Web アプリケーションをスケーリングするにはどうすればよいでしょうか?

Web アプリケーションをスケーリングするにはどうすればよいでしょうか?

私は主に Web アプリケーション開発者ですが、スケーリング/スケーラビリティ技術についてはあまり詳しくありません。私のアプリケーションは Django を使用して Python で記述されており、かなり標準的な設定です。

現在、Web サーバーには Apache 2.2 を使用し、データベース サーバーには MySQL を使用しています。両方とも同じ VPS 上で実行されています。

これまでは、基本的にはプロトタイプであり、同時接続ユーザー数は 15 ~ 30 人程度だったので、問題はありませんでしたが、今後はユーザー数が増えるため、パフォーマンスの問題が発生します。

そこで質問なのですが、Web アプリケーションをスケーリングするにはどうすればいいのでしょうか? 現在の計画は次のとおりです。

  1. 現在、実行中の VPS サーバーは 1 つだけで、Apache + MySQL です。
  2. 次に、MySQL のみを実行する別の VPS サーバーを追加する予定なので、Web サーバー 1 台と DB サーバー 1 台が備わります。
  3. 次に、MySQL の負荷を軽減するために、データをキャッシュするための memcache を Web サーバーに追加します。
  4. 次に、すべての静的コンテンツを提供するための別の Web サーバーです。
  5. 次に、負荷分散用の VPS サーバー (nginx/varnish) があり、その背後に 2 つの Web サーバーと db サーバーが配置されます。

それは実行可能な戦略のように思えますか? ここについて教えてください。

答え1

最初のボトルネックがどこにあるか知っていますか? わからない場合は、やるべきことの順序をどのように決めましたか?

そうは言っても、アプリで何かひどい間違いをしていなければ、おそらく最初に遭遇する制限はデータベースによって発生するディスク I/O であり、あなたの戦略はおそらく適切な選択となるでしょう。

データベースを別の物理ディスクに移動すると、大いに役立つはずなので、最初に行うべきことです。たとえば、使用しているシステムによっては、現在のホストで 2 番目のディスクを使用することと、完全に別のサーバーに移動することとの間に違いがない、または大きな違いがある場合があります。VPS で実行しており、ディスク I/O が制限されている場合、2 番目の VPS に移動しても、同じストレージ (同じディスク、同じ SAN など) を使用する場合は、あまり役に立ちません。ただし、この最後の問題は、VPS プロバイダーが対処する必要がある問題です。

答え2

ぜひ読んでみてくださいスケーラブルなインターネットアーキテクチャ著者: Theo Schlossnagle。この本では、サーバー間のアプリケーションのスケーリング、単一障害点の排除、データベースのスケーリングなど、すべての理論と実践について説明しています。

ただし、あなたの計画はスケーリングの最初の段階のように思えます。通常、すべてが 1 つのサーバーで開始され、次に Web とデータベースを分割し、リバース プロキシまたはロード バランサーを追加して複数の Web サーバーを実行する、という手順になります。

答え3

測定しないものを改善することはできません。まず、ボトルネックが何であるかを確認する必要があります。今すぐ atop を使用し、まだ行っていない場合は何らかの監視を設定します。すべてが順調に実行されている場合は、JMeter を使用して現実的な負荷を生成できます。

ここでは、Django アプリを中心に構築するインフラストラクチャについてもう少し詳しく説明します。

関連情報