websocketに対応していないロードバランサを使うといくつか問題が起きる
- upgradeヘッダを捨ててしまい接続できない(L7スイッチなど)
- ポート番号枯渇により新規接続ができなくなる
- タイムアウトの設定が短いと定期的に切断されてしまう
- 接続を維持しているとバランスされずに片寄る
問題に対応できそうな方法
- DNS RoundRobbin
- NGINX websocket proxy
- node-http-proxy
- LVS
- HAProxy
- 自前で作る
良い点
- DNSの設定だけでできるので楽
- 接続トラブルとは無縁
悪い点
- DNSをキャッシュするプロバイタにたくさんユーザがいると、とても片寄る
- 片寄って悲鳴を上げているサーバを救うことはできない
- ラウンドロビンしているがいろんなレイヤーでキャッシュされるのでコントロールできない
あまり試してないので適当
良い点
- nginx慣れていれば楽に設定できる
あまり試してないので適当
あまり試してないので適当
あまり試してないので適当
それ程難易度が高くないので自前で作ってもよいのでは
仕様例
クライアント:最初にHTTPでAPIにアクセスし接続するサーバーを取得、そのIPで接続
サーバー:HTTPでアクセスしてきた時に現在WEBSOCKETに繋げてる接続数を見て一番少ないサーバを返す
懸念:グローバルIPアドレスが必要になる
良い点
- なんでもできる
悪い点
- 未知のトラブルが発生する
- 良くも悪くも実装者依存