水平方向にスケーリングするために、Sockjs Tornado + Rabbit MQ + Memcached を使用することもできます。RabbitMQ ブロッカーは、物理サーバー A から物理サーバー B へのメッセージング バスの役割を果たします。サーバーに関するすべての情報は、memcache に保存できます。たとえば、クライアント ソケット C1(A) からクライアント ソケット C2(B) にメッセージ M を送信する必要があります。
- A の受信者が同じサーバーでホストされている場合 (memcache をチェックして)、SockJS Router を使用して直接メッセージを送信します
- それ以外の場合は、RabbitMQ ブロッカー B1(A) を介して (ルーティング ロジックを使用して) M を B2(A) に送信します。ここで、SockJS ルーター B はメッセージを元の受信者 C2(B) に直接送信できます。
RabbitMQ の AMQP プロトコルは Erlang を利用しているため、メッセージ パッシングは非常に安定しており、負荷の高い分散アプリケーションに最適です。私の言葉を裏付けるために、ここを見てください: http://www.rabbitmq.com/blog/2012/04/25/rabbitmq-performance-measurements-part-2/
各物理サーバー (次の電力 Xenon 4 ノード、MEM 4Gb、HDD-140 -1000Gb を搭載) は、3 ~ 5 個の sockjs tornado インスタンスを処理できます。SockJS の実装では、URL に追加のパラメーターを介してリバース プロキシ (HaProxy) をうまく利用しています。
分散テストでは、gemetr または tsung (erlang ベース) を使用できます。
いくつかの分散アプリでこのアプローチを使用しました。
さらに、L1 キャッシュとして Tornado メモリを使用することを忘れないでください。