0

複数のクライアント サービスからの直接接続を受け入れる Azure ホスト アプリケーション (iisnode) があります。このアプリケーションは、さまざまな接続間でデータをストリーミングします。node.js の複数のインスタンスがあるシステムで実行している場合、実際の TCP 接続は異なるインスタンスに接続されます。

メモリ内接続をあるインスタンスから別のインスタンスに「移動」または「共有」する方法はありますか?

確かに、データをルーティングするためにインスタンス間通信を構築することはできますが、データをすばやく移動することが全体の目的であるため、アプリケーションがスケーリングするとは思いません。たとえば、4 つのインスタンスがあり、それぞれに 100 の接続があり、クライアント接続間でデータを移動するのに費やすのと同じくらい多くのリソースをインスタンス間でデータを移動するのに費やします。

4

1 に答える 1

2

(nodeProcessCountPerApplication 設定を使用して) 複数の node.exe プロセスを作成するように iisnode を構成すると、ラウンド ロビン ロジックを使用してそれらの間で着信 HTTP 要求がディスパッチされます。アプリケーションはその動作を制御できません。あなたのシナリオでは、2 つの異なるクライアントからの要求 (「接続」) が同じ node.exe プロセスに配置されることを決定論的に保証する方法はありません。

node.exe プロセス間で既存の TCP 接続または HTTP 要求を "移動" するメカニズムはありません。

一般に、このような通知シナリオに対処するより良い方法は、サブスクリプション ベースのメッセージング インフラストラクチャをバックエンドとして使用することです。Azure の ServiceBus は、このようなメカニズムを提供します。この設計では、node.exe の各インスタンスは、クライアントから接続を受信したときに特定のトピックにサブスクライブし、一致する通知が到着すると ServiceBus によって通知されます (おそらく node.exe の別のインスタンスを介して)。

于 2012-10-23T16:51:47.053 に答える