「平均的な」Web アプリケーションをサポートする適切な設定は、次のように展開される可能性があります。
- アプリケーションとデータベースを組み合わせた単一のサーバー
- 別のマシン上の別のデータベース
- DNS ラウンド ロビン (貧弱な負荷分散) を備えた 2 番目のアプリケーション サーバー、またはPerlbalなど
- 2 つ目は、レプリケートされたデータベース サーバー (読み取り負荷の場合、適格なデータベース読み取りがスレーブに送られるように、アプリケーション ロジックの変更が必要です)
この時点で、現在の状況を評価すると、より適切なスケーリング パスを決定するのに役立ちます。たとえば、読み取り負荷が高く、コンテンツがあまり頻繁に変更されない場合は、キャッシングを重視し、専用のフロントエンド キャッシュを導入することをお勧めします。たとえば、Squidを使用して不要なデータベース読み取りを回避します。通常はアプリケーションでキャッシュの一貫性を維持します。
一方、コンテンツが適度に頻繁に変更される場合は、おそらくより広範なソリューションを好むでしょう。アプリケーション サーバーとデータベース スレーブをさらにいくつか導入して影響を軽減し、 memcachedなどのオブジェクト キャッシングを使用して、揮発性の低いコンテンツがデータベースにヒットするのを回避します。
ほとんどのサイトでは、これでおそらく十分ですが、世界的な現象になった場合は、地域のデータセンターにハードウェアを配置し、地理的負荷分散などのトリックを使用して、訪問者を最も近い「クラスター」に誘導することを検討することをお勧めします。 "。その時点までに、本当に細かい調整ができるエンジニアを雇えるようになるでしょう。
おそらく、私が考えることができる最も有益なスケーリングのアドバイスは、あまりにもすぐに心配することを避けることです。人々が使いたくなるようなサービスを開発し、アプリケーションを適度に堅牢にすることに専念してください。初期の簡単な最適化のいくつかは、データベースの設計がかなり堅実であること、およびインデックスがセットアップされていることを確認することです。また、データをキャッシュする方法をブラウザーに指示するキャッシュ制御ヘッダーをアプリケーションが発行することを確認してください。設計の早い段階でこの種の作業を行うと、特にキャッシュの一貫性の問題に対処するために全体をやり直す必要がない場合に、後でメリットが得られます。
私がお伝えしたい 2 番目に重要なアドバイスは、他の Web サイトで機能するものが自分にも適していると思い込んではならないということです。ログを確認し、トラフィックを分析し、アプリケーションをプロファイリングします。ボトルネックがどこにあるかを確認して解決してください。