2

独立した Python サーバーを使用して sockJS を介して Web ソケットをサポートするための 2 つの同様のソリューションを調査してきましたが、これまでに 2 つのソリューションを見つけました。

複雑でスケーラブルな Web ソケット ベースの Web アプリケーションを作成する必要があります。残念ながら Tornado をスケーリングするのは難しく、Web ソケットの水平方向のスケーリングには Vertx の方が優れているようです。

また、Redis を Tornado と組み合わせて使用​​して、pub/sub システムを水平方向にスケーリングし、HAproxy を使用して SockJS リクエストをスケーリングできることも理解しています。

Vertx と Tornado の間で、SockJS をサポートするスケーラブルなシステムを作成するための推奨されるソリューションは何ですか?

4

2 に答える 2

3

Vertx には組み込みのクラスタリング サポートがあります。多くのノードで試したことはありませんが、いくつかのノードではうまくいくようです。内部的には、hazelcast を使用してノードを整理します。Vertx は JVM でも実行されます。JVM には、便利な監視/管理ツールがすでに多数あります。したがって、Vertx は「バッテリーを含む」ソリューションのように思えます。

于 2012-11-26T09:46:50.620 に答える
2

水平方向にスケーリングするために、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 メモリを使用することを忘れないでください。

于 2013-06-09T16:26:44.177 に答える