都内で働くSEの技術的なひとりごと / Technical soliloquy of System Engineer working in Tokyo

都内でサラリーマンやってます。SQL Server を中心とした (2023年からは Azure も。) マイクロソフト系(たまに、OSS系などマイクロソフト以外の技術も...)の技術的なことについて書いています。日々の仕事の中で、気になったことを技術要素関係なく気まぐれに選んでいるので記事内容は開発言語、インフラ等ばらばらです。なお、当ブログで発信、発言は私個人のものであり、所属する組織、企業、団体等とは何のかかわりもございません。ブログの内容もきちんと検証して使用してください。英語の勉強のため、英語の

WebSocketって

WebSocket サーバー開発 : ASP.NET 4.5 編

http://blogs.msdn.com/b/tsmatsuz/archive/2012/04/25/websocket-server-asp-net-4-5-development.aspx

 

松崎さんのブログを見ながら、WebSocketを使った業務ロジックを設計・開発していたのだが、インフラ設計のことをふと下記のような書いてあることに気づく。

--------

Windows Azure への配置や ロード バランサー (Load Balance) 構成への対応
セッションでも説明しましたが、上記のコードのまま Windows Azure に配置した場合や、ロード バランサー構成に配置した場合、正しく動作しません。(Windows Azure では、既定でラウンド ロビンが使用されます。)

このため、実際の開発では、Windows Azure の Queue や Intenal Endpoint によるインスタンス間の通信や、専用のライブラリー (サード パーティー製の専用の仕組み、など) と連携するなど、負荷分散された状態で動作するよう細やかな設計・実装をおこなってください。(上記では、こうした処理を省略しています。)
なお、Windows Azure を使用した場合、もう一点注意すべき重要な点 (Keep Alive の問題) がありますが、ここでは説明を省略します。(セッションで説明した通りです。) 

--------

うーん。Webリクエストであれば、WFF(Web Farm Framework)を使った負荷分散ができるけど、WebSocketはできないんだよなぁ。(調べてないけど。どっかの企業の製品でWebSocketの負荷分散を対応しているハードもあるみたいだけど。)

ということは、WebSocketのサーバが配置されているサーバを負荷分散のため、スケールアウトさせた場合は、ノード間で各サーバでもっている情報をやりとりしなければいけないのか....(Session Affinityみたいなことできないのかな。)

 

ちょっと再設計してみるか。