web-dev-qa-db-ja.com

大量のユーザーに対応できるようにWebアプリケーションをスケールアップするための最良の戦略は何ですか?

Webアプリケーションをスケールアップするための戦略を開発する方法についてのアドバイス/ベストプラクティスを取得したいと思います。私はここで少しワッフルして、限られた知識を示しますが、知識のギャップを埋めたいと思っています。自分でできるだけ多くのことを学びたくなりますが、一般的な質問として、外部委託するのが最も簡単なことを知っておくとよいので、外部の助けを得ることに目を向ける必要があることに気付きます。

私の経歴-私は主にユーザーインターフェイスの開発に携わっており、FlashとPHP)で働いて、ユーザーが画像やビデオをアップロードしてオンラインで共有するのを見るアプリの機能を開発しています。

システムアーキテクチャは次のとおりです-

  1. データベースサーバー(MySQL)としても機能する単一のWebサーバー。このサーバーは、信頼できる信頼できるホスティング会社のマネージドホスティングパッケージ上にあります。 Webサーバーは、主要なUIコンポーネントであるPHPページとFlashSWFを提供します
  2. ユーザーの画像、ビデオ、オーディオファイルを保存するためのAmazonS3バケット。
  3. ユーザーインターフェイスコンポーネントは、PHPページ、またはFlash SWFのいずれかです。たとえば、画像とビデオは、AMFPHPサービスを介してデータベースにクエリを実行してロードする画像とビデオファイルのURLを取得するFlashswfsを介して表示されます。 。これらはAmazonS3バケットから受信されます。別のFLashSWFは、AmazonCloudのEC2インスタンスで実行されているPHPスクリプトへのアップロードとPOSTSファイルを処理します。
  4. 画像、ビデオ、オーディオのアップロードを管理するためのアップロードサーバー。これは、CPU容量が80%に達したときにインスタンスを追加するように設定された、Elastic LoadBalancerの背後で実行されているAmazonEC2インスタンスです。
  5. また、ビデオファイルのトランスコードにはAmazonEC2でも実行されるサードパーティのサービスを使用しています。

したがって、大部分は、スケールアップできるように設定されていると思います。しかし、私はトラフィックの多いWebアプリケーションをスケールアップまたは管理する方法の経験がないため、Webサーバーホスティング会社に依存して、Web /アプリサーバーとデータベースサーバーのスケーラブルな構成のセットアップを管理します。

ハードウェア/アーキテクチャのスケーリング-

私が理解しているように、ここでの最初のステップは、Webサーバーとデータベースを分離し、データベースサーバーを単独で実行し、Webサーバーをロードバランサーの背後に配置し、最終的にデータベースサーバーのマスター/スレーブ構成を作成することです。私のウェブホスティング会社に何をするように頼むべきですか?これを行うことに関する問題は何ですか?また、AMFPHPサービス、さまざまなタイプのクエリ(書き込みと読み取り)などにどのような影響がありますか? globals.phpスクリプトに含まれるデータベース接続の詳細を含む別のスクリプトがあるので、接続の詳細を1つのステップで簡単に更新できます。マスター/スレーブ構成では、すべての書き込みは通常マスターサーバーに送られ、読み取りはスレーブから行われるというのは正しいですか?これは、すべてのデータベースクエリを調べて、その「UPDATE」または「DELETE」クエリがマスターデータベースサーバーに送信されることを確認する必要があることを意味しますか?私のPHPコードでは、データベースクエリはスクリプト全体に分散され、必要に応じて関数内から呼び出されます。データベースの抽象化について少し読みましたが、このアプローチの重要性を完全には理解していません。

スケーリングのためのコード最適化-

物事をよりスケーラブルにするためにコードを変更することについて考える必要があることは何ですか? PHPで、スケーリングの影響を受ける一般的なものは何ですか?

セキュリティ-

大量の処理を考えるときに注意する必要があるセキュリティに関連する一般的なことは何ですか。

データベースの最適化、バックアップ、およびリカバリの手順-

大規模データベースのMySQLデータベースの自動データベースバックアップおよびリカバリ戦略を実装するための最良の方法は何ですか。データベースの分割を検討する必要があります-ユーザーメンバーシップ情報のデータベース、ユーザーのアップロードに関するデータを保持するためのデータベース、サイトの実行に関するデータを含むデータベースなど、いくつかのデータベースがありますが、すべてのデータを単一のサーバーに保持します管理機能に関連するものとして。データベースを分析して、状況がどのように機能しているかを確認し、Webアプリがどのように使用されているかを把握できるようにしたいので、データベースのスナップショットを定期的に作成して保存する方がよいと想定します。これらは、物事が時間の経過とともにどのように発展したかについてのタイムラインを持っており、ある種のデータベース分析ツールを使用してこれらのスナップショットをクエリし、物事がどのように変化したかを追跡します。私自身と他の非技術者の両方がデータを分析してレポートを作成できるようにするツールである、これをどのように行うかについての良いアドバイスはありますか?.

これは、スケールアップ戦略を開発するときに取り組む必要のある分野についての私の理解をカバーしています。上記の問題をうまく管理するために私は何をする必要があると人々は思いますか?私は私の仮定に正しいですか?私は何を逃しましたか?他にどのようなことを考慮する必要がありますか?これに対処するための良いリソースはありますか?これらの問題を解決するために誰かを採用する場合、完璧な候補者に期待すべきスキル/経験は何ですか?

ありがたいことに受け取ったすべてのアドバイス/経験/提案

乾杯!

5
undefined

私の投票が終了した後に役立つように、いくつかのポインタ。 読むことを検討してください:

どちらも、スケーラブルなWebアプリケーションを構築する方法についての優れた本であり、使用されているテクノロジーと考え方/設計プロセスの両方をカバーしています。

3
Jesper M

この質問はここで答えるには広すぎます-私は読むことをお勧めします highscalability.com

2
jamespo