質問
そこで私は最新の Stackoverflow ポッドキャストを聞いていました (第19話)、ジェフとジョエルは、Web サイトの成長に伴うサーバー ハードウェアのスケーリングについて少し話しました。Joel の発言によれば、最初のいくつかのステップは非常に標準的なものです。
- Web サーバーとデータベースの両方を実行する 1 つのサーバー (現在の Stackoverflow セットアップ)
- 1 つの Web サーバーと 1 つのデータベース サーバー
- 負荷分散された 2 つの Web サーバーと 1 つのデータベース サーバー
ただし、彼らは次に何が起こるかについてはあまり話しませんでした。さらに Web サーバーを追加しますか?別のデータベースサーバーですか?冗長性を確保するために、この 3 台のマシンのクラスターを別のデータセンターに複製しますか?Web スタートアップはハードウェア部門からどこへ向かうのでしょうか?
解決
「平均的な」Web アプリケーションをサポートする適切なセットアップは、次のように進化します。
- アプリケーションとデータベースを組み合わせた単一のサーバー
- 別のマシン上の個別のデータベース
- DNS ラウンドロビン (貧乏人の負荷分散) を備えた 2 番目のアプリケーション サーバー、または パールバル
- 2 番目は、レプリケートされたデータベース サーバー (読み取りロードの場合、適格なデータベース読み取りがスレーブに送られるように、アプリケーション ロジックの変更が必要です)
この時点で、現状を評価することは、より良いスケーリング パスを決定するのに役立ちます。たとえば、読み取り負荷が高く、コンテンツがあまり頻繁に変更されない場合は、キャッシュを重視し、専用のフロントエンド キャッシュを導入した方がよい場合があります。 イカ 不必要なデータベースの読み取りを避けるためですが、メンテナンス方法を考慮する必要があります。 キャッシュの一貫性, 、通常はアプリケーション内で行われます。
一方、コンテンツがかなりの頻度で変更される場合は、おそらく、より広範囲にわたるソリューションを好むでしょう。影響を軽減するためにさらにいくつかのアプリケーション サーバーとデータベース スレーブを導入し、次のようなオブジェクト キャッシュを使用します。 memcached 揮発性の低いコンテンツのデータベースへのアクセスを避けるため。
ほとんどのサイトではおそらくこれで十分ですが、世界的な現象になる場合は、地域のデータセンターにハードウェアを配置し、地理的負荷分散などのトリックを使用して訪問者を最も近い「クラスター」に誘導することを検討し始めることになるでしょう。 」。その時点で、あなたはおそらく物事を本当に微調整できるエンジニアを雇用できる立場にいるでしょう。
おそらく、私が思いつく中で最も価値のあるスケーリングに関するアドバイスは、あまりにも早い段階で心配しないようにすることです。人々が使いたくなるサービスを開発し、アプリケーションを適度に堅牢にすることに集中します。初期の簡単な最適化としては、データベース設計がかなりしっかりしていて、非常におかしなことをしていないようにインデックスが設定されていることを確認することが挙げられます。また、アプリケーションがデータのキャッシュ方法をブラウザーに指示するキャッシュ制御ヘッダーを発行していることを確認してください。設計の早い段階でこの種の作業を行うと、特にキャッシュ一貫性の問題に対処するために全体をやり直す必要がない場合に、後で利点が得られる可能性があります。
私が伝えたい 2 番目に重要なアドバイスは、他の Web サイトで機能するものが自分にも機能すると考えるべきではないということです。ログを確認し、トラフィックに対して分析を実行し、アプリケーションのプロファイリングを行います。ボトルネックがどこにあるのかを確認して解決します。
他のヒント
Joel は、同じ設定で 2 番目のデータセンターを追加し、それぞれにユーザーをランダムに割り当てると述べました。データへの変更はログに記録され、一方の場所からもう一方の場所に送信されるため、両方の場所にすべてのデータが含まれます。
Web 2.0 Expo での Cal Henderson (Yahoo) の講演「Scalable Web Architectures Common Patterns & Approaches」は非常に興味深いものでした。動画があると思ったのですが、見つかりませんでした。ただし、スライドは次のとおりです。
http://www.slideshare.net/techdude/scalable-web-architectures-common-patterns-and-approaches
次のステップは、Web サーバーのクラスター (Web ファーム) とデータベース サーバーのクラスター化システム (レプリケーションや Oracle RAC など) です。等。)
.Net のキャッシュと使用に興味がある場合は、を調べてください。 アプリケーションキャッシュブロック エンタープライズ ライブラリにあります (もちろん、これを上記の他の点と合わせて使用します)。