2012-01-25 11 views
-1

私はNode.jsの観点から、IOバインドされたユースケースのために一般的なコンセンサスが輝いているように見えます。私は次のFacebook/Twitterを構築しようとはしていないが、私の質問はソーシャルネットワーキングサイトが一般的にI/OバウンドかCPUバウンドですか?ソーシャルネットワーキングはこのような多種多様なコンテキストを網羅することができるので、チャット、インスタントメッセージング、ユーザ追跡、ステータス更新などの機能に特に関心があることをさらに述べる。これらのタイプのものについては、ボトルネックは一般的にCPUまたはIO側で発生しますか?FacebookやTwitterのCPUやIOなどのソーシャルサイトはバインドされていますか?

答えて

3

私は毎月20万人の月間アクティブユーザーのサイトの主任エンジニアでした。私たちは間違いなくI/Oに縛られていました。

スケーリングCPUは非常に簡単です。新しいノードをネットワーク上で起動し、ロードバランサの利用可能なプールに追加します。一方、スケーリングI/Oは、データがアドレス可能性と妥当な一貫性を維持しなければならないため、非常に扱いにくく高価です。

読み取り側では、レプリケーションをサポートすることで拡張できます。これには、レプリケーションの遅延を許容できるソフトウェアの作成が必要です。データが書き込みDBから読み取りDBに移動するのにかかる時間です。私たちは1つの書き込みサーバーに対して4つの読み取りサーバーを持っていました。高負荷の場合、遅延は秒になります。我々は、キャッシュがmemcachedを介して電源供給され、ハイラムサーバのクラスタが使用される、ライ​​トバックキャッシュを使用したI/Oアクセスを実装することを選択しました。

書き込み側では、同時書き込みの数を維持するためにデータシャーディングが必要です。つまり、テーブル結合を使用することはできず、断片全体のアトミック性が失われます。繰り返しますが、ソフトウェアはこれに耐えなければなりません。

また、フォトピクチャのようなバイナリデータを扱う場合、サイトは通常、より良いファイルシステムI/Oのために最適化されたCDNを使用します。

私の主なポイントは、典型的なソーシャルネットワーキングサイトでは、I/OとCPUのスケーリングに費やされる時間とコストが大幅に増えたことです。

関連する問題