5

しばらく疑問に思っていました。Facebook コードのような Web サイトで複数のサーバーを使用するにはどうすればよいですか?

複数のサーバーが同じコードを実行し、さらに追加することで利益が得られることを、コードでどのように考慮することができますか?

または、コードに関係なく、Webサーバーはおそらくこれを処理しますか?

4

2 に答える 2

4

共有とネットワーキングによって。コードは、1 つまたは複数のサーバーで同じである必要があります。

データベースを介してデータを共有したり、Memcache などを使用してメモリを共有したり、バランサーを使用して負荷を共有したりできます。Google のようにサーバーを特化した場合 (URL フェッチを行うもの、データを保持するもの、数値計算を行うものなど) は、手持ちのハードウェアで次のことができます。よりよく活用されます。

コードはディスパッチ ロジック (通常は API を介して抽象化されます) を使用できるため、サーバーが 1 つであっても数百万であっても同じように機能します。

IPC (Inter Process Communication) はネットワーク対応で、サービスの「より緊密な」結合を可能にします。Google には、これを支援するためのプロトコル バッファプロジェクトもあります。

基本的に、サーバーは (フェイルオーバー/バックアップを超えて) 真の利益を得るために共有する必要があります。コードは、共有を支援するために抽象化のレベルを使用する必要があります。実際の共有では、通常、ラウンド ロビンまたはMap/Reduceロジックが使用されます。

于 2010-07-10T14:49:29.687 に答える
3

基礎となるアーキテクチャ パターンは、「シェアード ナッシング アーキテクチャ」です。アイデアは、分散可能な方法でアーキテクチャの最も頻繁に使用される部分を構築し、分散ピアが他のピアについて何も知る必要がないため、相互に通信する必要がないことです。そうすれば、他のピアを追加してスケーリングできます。

通常、これには、共有コンポーネントにフィードするためのある種のトラフィックのルーティング (負荷分散) と、永続性および/または状態の同期が必要です。

このための「古典的な」アーキテクチャは、共通のデータベースに対して実行される複数の「何も共有しない」アプリケーション サーバーにトラフィックを分散する 1 つまたは複数のロード バランサーです。通常、アプリケーション サーバー ハードウェアはかなり安価であり、データベース ハードウェアは負荷に応じて 1 つまたは 2 つの大きな鉄です。

最近では、データベースを分割してスケールするソリューションも増えています。最終的には、複数の db ノードが存在し、各ノードにデータのサブセットのみが含まれる、分散型のシャード データベースにつながります。

于 2010-07-11T10:06:23.637 に答える