Se ha denunciado esta presentación.
Utilizamos tu perfil de LinkedIn y tus datos de actividad para personalizar los anuncios y mostrarte publicidad más relevante. Puedes cambiar tus preferencias de publicidad en cualquier momento.

WebSocket on AWS (ロードバランサとSocket接続を使用したイベント通知サーバの負荷分散)

ELBを使用した場合に、WebSocketなどのSocket接続をロードバランシングする方法についての説明です。
(追記:2015年4月10日)
資料を新しいものに更新いたしました。

  • Inicia sesión para ver los comentarios

WebSocket on AWS (ロードバランサとSocket接続を使用したイベント通知サーバの負荷分散)

  1. 1. WebSocket on AWS Yuta Imai Solutions Architect, Amazon Data Services Japan, K.K.
  2. 2. WebSocketについて •  リアルタイム/インタラクティブなアプリケーション、特にゲームなどで WebSocketが利用されることが増えている。 •  AWS上での利用事例も増えている。 •  WebSocketでも可用性やスケーラビリティをあげるためにロードバラ ンサーを使いたい! •  トラフィックの性質がHTTPと異なるので、Elastic Load Balancing(ELB)含め、ロードバランサーとの付き合い方を変える必要 がある。
  3. 3. おさらい(1):HTTPとTCPコネクション HTTPではリクエスト/レスポンスごとに空いているTCPコネクションを利用す る(なければ新規作成する) ➔HTTPセッションとTCPコネクションが非依存 GET / HTTP/1.1... HTTP/1.1 200... GET /foo.html HTTP/1.1... HTTP/1.1 200... GET /a.jpg HTTP/1.1... HTTP/1.1 200... コネクション新規作成 空いていれば再利用 空きがなければさらに新規作成 時間
  4. 4. WebSocketはセッションごとにTCPセッションを作成し、セッション中は継続 的に利用する。 ➔アプリケーションのセッションがTCPコネクションに依存する。 ➔アプリケーションのセッションが終了するまでそのTCPコネクションは 専有される。 GET /chat HTTP/1.1 Host: ... Upgrade: websocket Connection: Upgrade HTTP/1.1 101 Switching Protocols Upgrade: websocket Connection: Upgrade message message message message おさらい(2):WebSocketとTCPコネクション 時間
  5. 5. WebSocketとロードバランサー(LB) •  前述のとおり、WebSocketはクライアント・サーバー間でアプリ ケーションのセッション数に応じてTCPコネクションが持続的に専 有される。 •  間にLBを挟むとLBのコネクションも専有してしまう。LBのリソース がボトルネックになり得る。 •  WebSocketはサーバーとクライアントを1対1でセッションを確立さ せ、それを維持して利用する仕組みなので、セッションが確立され てしまえばLBはあまり意味がない。遅延が増加するというデメリッ トもある。 •  セッション確立時だけLBを使うのが上手な付き合い方。
  6. 6. 1. わたしはどこに行けば? 2. 君はApp server2へ! 3. WebSocket接続おねがいしまーす App servers GET /app HTTP/1.1 Host: ... Upgrade: websocket Connection: Upgrade GET /dispatch HTTP/1.1 Host: ... HTTP/1.1 200... ... Goto ws://App server2 セッション確立時だけELBを使うアーキテクチャ コネクション数のレポート Auto Scaling group Dispatchers ディスパッチ時に各サーバー のコネクション状態を確認
  7. 7. このアーキテクチャの利点 •  ロードバランサを挟まないため: –  ロードバランサによるコネクション切断はない –  ロードバランサのポート枯渇等による新規接続の棄却は起きない –  ロードバランサによる遅延の増加は起きない •  負荷(例えばコネクション数)に応じてアプリケーショ ンサーバをスケールさせられる •  ソケットサーバの障害にも対応可能 –  クライアント側で別サーバーに再接続するなどの仕組みも重要
  8. 8. 注意点 •  クライアントのディスパッチ先は別途管理して、アプ リケーションがクライアントに正しく通知できるように する •  アプリケーションサーバの数を減らす際は、コネク ション切断の影響を抑えるため、十分なクールダウ ンをする –  クライアントに再接続を実装することで影響を小さく
  9. 9. 運用のTIPS •  アプリケーション・サーバーは負荷(例えばコネク ション数)に応じてスケールさせる •  アプリケーションサーバの障害への考慮 –  クライアント側で別サーバーに再接続するなどの仕組みが重要。 –  ゲームの場合、そのゲームプレイは一旦終了させ、新たなゲームを 始めてもらうイメージ。
  10. 10. まとめ •  WebSocketを使うときはセッション確立とアプリケー ションセッションを分けて考える •  ELBはセッション確立(ディスパッチャ)側だけで使う
  11. 11. (参考)HTTPとELB セッションがTCPコネクションを専有しないので、LBとEC2の間で少ない TCPコネクションを効率的につかいまわすことができる。
  12. 12. (参考)WebSocketとELB •  現状、ELBはWebSocketをサポートしていない。 –  Socket.ioを使うと動くように見えるが、これは単にSocket.ioがHTTPにFallbackしているだけ •  TCPモードで動かすことにより、セッション開始時のロードバランシングは可能。 •  しかしセッション確立後、クライアントは特定のEC2と継続的に通信し続ける のでLBの意味がない。 •  にも関わらず、ELBのリソース(コネクション)を利用されつづけてしまう ※もしそれでもこの方式をとる場合、ELBには非アクティブなセッションを切断する機能があ るのでこれにも注意が必要。(タイムアウト値は設定可能)

×