websocketとイミュータブルインフラ、難しい話
- yosuke_furukawa
- 11291
- 0
- 123
- 9
「もしSocket.IOを複数Nodeでスケールしたいなら、LBでSticky Sessionせよ」と書いてあるが、イムータボーインフラの昨今、front-endをSticky Sessionでバランシングするのどうなん?
2014-05-30 12:00:30@yuroyoro すごく面白い指摘だと思っていて、websocketみたいなステートフルガリガリな奴はイミュータブルインフラと相性が悪いと思うので、今のところスッキリした解決策はないですね。
2014-05-30 12:27:34逆に言えばイミュータブルインフラでステートフルなサーバーの扱い方が整ってくるのであればWebSocketとイミュータブルインフラの相性は見直される可能性ありそう。
2014-05-30 12:31:38@yosuke_furukawa @yuroyoro ステート is 何で、例えば Socket.IO なら HTTP の Cookie 共有はできるし、どうせそれは裏のセッションストレージなどで共有されているはず。 cont
2014-05-30 12:36:49@yosuke_furukawa @yuroyoro コネクションについては切れる、けど WS はいつか切れる前提で作らないと使い物にならないと思う。そうでなくても切れるから。 cont
2014-05-30 12:37:16@yosuke_furukawa @yuroyoro あと、俺たちが WS だと思って使ってたものは Socket.IO さんからみたら XHR LongPooling だった、なんだってー!な時代はもう少し続くのかなとも思うなどなど。難しいですね。
2014-05-30 12:37:26@Jxck_ @yosuke_furukawa sticky session、serverがdownしたserverにしばらく振られ続けたり、うっかり期待するステートを持たないserverにfallbackされたりで辛い思い出であるので…
2014-05-30 12:42:05@Jxck_ @yuroyoro コネクションはいつか切れる前提でサーバーは作らないといけないのはその通りでその切れる条件を満たさずにばっさりとblue-green deploymentってやってしまうと cont
2014-05-30 12:52:35@Jxck_ @yuroyoro サーバーのメモリ中にあるデータ(ゲームプレイ中のデータ等cookieとかに入りきらないデータ)が消えてしまうなど問題が多そうなので 気を遣わないといけなくて、cont
2014-05-30 12:52:52@Jxck_ @yuroyoro guilleが紹介しているやり方は一番シンプルな例を一例として用意しているだけだと思うので、イミュータブルインフラと組み合わせるならもっと工夫を入れないといけないと感じてます。まぁ難しいですね。。
2014-05-30 12:54:03@yosuke_furukawa @yuroyoro まあ鉄板は Redis 後ろに立てて pub/sub でしょうけど、 socket.io-redis もちゃんとメンテされていくような雰囲気なので、そこは安心ですね。あとは、 MQTT が気になって気になって震える。
2014-05-30 13:00:17@yosuke_furukawa @Jxck_ websocketに限らず、一般的なアプリケーションでも特定サーバのメモリにだけ状態があるアーキテクチャは耐障害性の観点から危険だと思うのですが、sticky sessionはその事に対しての免罪符になり得るので cont
2014-05-30 13:00:17@yosuke_furukawa @Jxck_ 、そもそも使わない前提がいいと思うんですよね。ただリアルタイム性を要求されるゲーム等だと、たとえbackendになんらかのstorageを立ててレプリケーションさせても遅延が気になったりしそうですし……。難かしい…
2014-05-30 13:01:29@yuroyoro @yosuke_furukawa そもそも使わないといかんともしがたい人が、泣く泣く導入するくらいの敷居が本当なのかもとは常々思います。要件が緩ければ別ですが、クリティカルなところはまだまだノウハウ足りてない感じはしますね。
2014-05-30 13:08:54ソフトウェアエンジニア/Node.js/Japan Node.js Association 代表理事/Chrome Advisory Board/TechFeed公認エキスパート