2016-12-13 14 views
1

ロードバランサの後ろにwebsocketサーバを設定しようとしています。最初は、socket.ioライブラリを使用しました。しかし、ロードバランサの背後で使用される場合、sticky sessionが必要であることがわかりました。ws websocketサーバライブラリは、ロードバランサの背後で使用されている場合、スティッキセッションを必要としますか?

this websiteに従って、ハンドシェイクを実行して接続を確立するために複数の要求を送信します。要求が別のサーバーに送信されると、接続は失敗します。

さらに調査したところ、SockJSのような他のwebsocketサーバーライブラリにも同じ問題があることがわかりました。それらはすべてロードバランサの背後で動作するためには固定セッションが必要です。

今、私はwebsocketライブラリwsをチェックしています。しかし、私はロードバランサの背後でそれを使用する例を見つけることができませんでした。

wsライブラリではスティッキーセッションが必要ですか?

ロードバランサの背後でスティッキセッションなしで動作できる他のwebsocketライブラリはありますか。

+0

私はそうは思わない。スティッキセッションを回避するには、すべてのサーバーにソケットセッションをレプリケートする必要があります。 – Hosar

答えて

2

なぜスティッキーセッションに頼ることができない/したくない特別な理由はありますか?

ソケット接続を複数のホストに分散する場合は、の一部のソリューションが必要です。スティッキセッションは完全に良好です。

あなたが偶数にリンクするsocket.io page on using multiple nodesは、"クライアントを発信元アドレスに基づいてルーティングすることによって解決策を実装する方法をNginX経由で"で説明しています。これを試してもうまくいきませんでしたか?

Horizontally Scaling Node.js and WebSockets with Redisには非常に良い記事があります。この記事では、スティッキーセッションと自動フェイルオーバーの問題を解決する方法について説明しています。

+0

ソースIPアドレスに基づいてクライアントをルーティングすることで、スティッキセッションを作成できることはわかっています。最後の段落のリンクに示すように、クッキーを挿入してクッキーに基づいてクライアントをルーティングするさらに優れた方法を使用することもできます。しかし、可能であれば、スティッキーセッションを避けたいと思っています。ロードバランサでスティッキセッションを使用すると、ロードバランサの背後にあるサーバー間で負荷を均等に分散することはできません。 – userpal

+0

たとえば、ソースIPに基づいてスティッキセッションを作成する場合、NATを使用している1社のネットワークのクライアントが1つのパブリックIPを使用している場合、すべてが同じサーバーにルーティングされます。この場合、1台のサーバーが過負荷になり、他のサーバーはアイドル状態になります。 Cookieを使用してスティッキセッションを作成する方がやや優れていますが、スティッキセッションを使用している限り、サーバー間で負荷を均等に分散することはできません。 – userpal

+0

私は、Webサーバーと同様にwebsocketサーバーを水平方向にスケールアップでき、ロードバランサは負荷をすべてのサーバーに均等に分散できることを願っています。あなたの最後の段落のリンクでは、 '' ...これは必ずしも必要なわけではありませんが、SockJSのようなものを使うと、ポーリングにフォールバックすると、ユーザがサーバー間でバウンスするのを防ぎます。スティッキセッションは、ポーリングにフォールバックする場合にのみ必要です。 – userpal

関連する問題