2011-08-13 13 views
1

私は、高スループットで多数のクライアント(500K以上)の分散型Cometベースのサーバを構築する必要があります。私は現在、長いポーリング要求の数が多いことに対処するための効率が高いため、Tornadoを使用する可能性を検討しています。分散型Tornadoベースのチャットサーバ

私の心配は、単一のTornadoサーバーがこのような多数の長いポーリングクライアントを処理できるかどうかです。実験として、Tornado Chatのデモ(https://github.com/facebook/tornado/tree/master/demos/chat)を分散環境に展開したいと思います。私。並行して動作している複数のTornadoチャットサーバーがあり、それぞれが変化するクライアントセットを担当しています。

私は、このようなスキームの実装や関連リソースへの参照に関して、あなたが持っているアイデアや考えを感謝します。

ありがとうございます!

答えて

0

基本的なチャットを複数のTornadoインスタンスに分散させるには、分散メッセージパッシングメカニズムを作成する必要があります。最も簡単な実装は、RabbitMQ(またはその競合他社)のようなメッセージキューを使用し、ファンアウトすべての接続がリッスンしている間にユーザーが何かを入力したときのメッセージ。

+0

Ivan、この場合、rabbitmqはどのように役立つのですか? – securecurve

+0

RabbitMQは、1つの竜巻インスタンス(chat.services.com:8001)が提供するクライアントから別の竜巻インスタンス(chat.services.com:8002)がサービスする別のクライアントにメッセージを配信するのに役立ちます。主な課題は、オンライン、オフライン、アイドルの各オンラインユーザー(プレゼンス)の状態を維持することです。例えば、Facebookは、アイドルストラテジーアルゴリズムを開発しました.1,2,5,8,11秒間アイドル状態のユーザーアクティビティを決定します。これは、ネットワークの負荷を大幅に減らし、優れたスループットを達成するのに役立ちます。 –

0

これについての最初の考えはフロントエンドにNginxサーバー/リバースプロキシを持つことですが、背中には複数のTornadoインスタンスがあります。これはプロセスごとにTornadoインスタンスになる可能性があります。ベンチマークパフォーマンスが低下したことに気付いたときに、別のマシンで同じことをやり始めます。

Nginxは、ロングポーリング/ Tornadoサーバー/インスタンスで負荷を分散する必要があるすべてのサーバーをラウンドロビンします。

この場合、rabbitmqがどのように役立つかはわかりません。

関連する問題