ブログ | NGINX

WebSocket と NGINX を使用したリアルタイム Web アプリケーション

NGINX-F5 水平黒タイプ RGB の一部
リック・ネルソン サムネイル
リック・ネルソン
2014 年 7 月 21 日公開

ブログ記事「WebSocket プロキシとしての NGINX」では、NGINX を使用してWebSocketアプリケーション サーバーをプロキシする方法について説明しました。 この記事では、WebSocket を使用してリアルタイム アプリケーションを作成するときに考慮すべきアーキテクチャとインフラストラクチャの問題のいくつかについて説明します。これには、必要なコンポーネントやシステムの構築方法などが含まれます。

WebSocket は HTTP にインタラクティブ性を追加します

HTTP は、通信フローでは常にクライアントがリクエストを開始し、バックエンド サーバーがそれに応答する、リクエスト/レスポンス ベースの Web アプリケーションに適しています。 クライアントとサーバー間のよりインタラクティブなメッセージベースのやり取りを行う Web アプリケーションには、単純な HTTP を超えたものが必要です。 HTTP 経由の全二重通信をシミュレートするこれまでの試みは複雑で、多くの欠点がありました。 WebSocket プロトコルと WebSocket JavaScript インターフェイスを組み合わせることで、転送されるデータの量と待ち時間を削減しながら、こうしたタイプのアプリケーションをより簡単に構築できるようになります。

クライアントとサーバーの間で全二重ソケット接続を作成できるため、プッシュ、ポーリング、ストリーミング通信を利用するリアルタイムのイベント駆動型 Web アプリケーションを開発できます。 WebSocket を使用すると、接続が確立された後、クライアントまたはサーバーのいずれかが通信を開始できます。 これにより、オンライン ゲーム、チャット、株価追跡、スポーツ スコアのリアルタイム レポートなど、さまざまな種類の Web アプリケーションが可能になります。

WebSocket のもう 1 つの使用例は、 WebRTCベースのアプリケーションの開発です。 WebRTC は、ブラウザ間通信を行うアプリケーションを作成するために使用されます。 通信のセットアップには別のシグナリング チャネルが必要であり、WebSocket はこれに適したプロトコルです。

WebSocket アプリケーションの技術要件

WebSocket Web アプリケーションに必要な最小限のインフラストラクチャは、WebSocket JavaScript アプリケーションを実行し、WebSocket サーバーと通信するクライアント ブラウザーです。 最近のリリースではすべての主要ブラウザが WebSocket をサポートするようになりましたが、クライアントが WebSocket をサポートするブラウザを使用していることを確認することが重要です。 WebSocket サーバーには多くのオプションがあり、さまざまな環境の例を次に示します (このリストは便宜上提供されており、NGINX, Inc. による推奨を意味するものではありません)。

  Node.jsルビー
わあウェブソケットレール
ソケット.ioem-ウェブソケット
ソックJSウェブマシンルビー
  
パールトムキャット
モジョリシャスWebSocketの使い方
Net::WebSocket::サーバー
  
PHP のウェブログラフィック
ラチェットWebLogic Server での WebSocket の使用
PHP プッシュ WebSocket
PHP-Websockets
  
パイソン
ウェブソケット
ws4py

WebSocket を高トラフィック量にスケーリングする

単一の WebSocket サーバーを使用することも可能ですが、アプリケーションのパフォーマンスはサーバーの容量によって制限され、サーバーも単一障害点となります。 多くのリアルタイム アプリケーションは、広く普及することを期待して開発されていますが、成長率を予測するのは難しい場合があります。 リアルタイム アプリケーションの人気の高まりに対応するには、インフラストラクチャで次のことが実行できる必要があります。

  • 多数の同時ユーザーをサポートできる拡張性
  • クライアントとサーバー間の通信を処理する際の遅延を低く抑える
  • 高可用性をサポートする(単一障害点がないことを意味する)
  • 構成を簡単に変更し、変化する状況に適応できるようにする

これは、NGINX を WebSocket サーバーおよび HTTP サーバーの前に配置し (ほとんどの WebSocket アプリケーションも HTTP を使用するため)、WebSocket 対応のリバース プロキシおよびロード バランサーとして動作させることで実現できます。 すべてのリバース プロキシが WebSocket を直接サポートするわけではありません。 Amazon Web Services (AWS) 環境の Elastic Load Balancing (ELB) など、一部のものは TCP モードで実行する必要があり、HTTP ヘッダーを処理できません。 プロキシ プロトコルはこの制限に対処するために開発され、NGINX もこれをサポートしているため、WebSocket は AWS で完全にサポートされます。 NGINX を WebSocket リバース プロキシとして使用すると、ルーティングの柔軟性や、NGINX で SSL 接続を終了できる機能など、追加の利点が得られます。

NGINX を使用した一般的な WebSocket 構成は次のようになります。

ここでは、HTTP サーバーと WebSocket サーバーのセットを負荷分散している高可用性の NGINX サーバーのペアに接続するさまざまなデスクトップ クライアントとモバイル クライアントを示します。 このタイプの構成では、WebSocket サーバーまたは NGINX サーバーの障害に耐えることができ、WebSocket サーバーを簡単に追加または削除できます。 また、WebSocket サーバーへの接続方法に関するルーティングの詳細はすべてクライアントから隠されているため、堅牢でスケーラブルな WebSocket アプリケーション インフラストラクチャが実現します。 リアルタイム Web アプリケーションの Web パフォーマンスと信頼性は非常に重要です。 今すぐお問い合わせください NGINX Plus がアプリケーションのパフォーマンス、信頼性、可用性の向上にどのように役立つかを学びます。

詳細については、以下を参照してください。


「このブログ投稿には、入手できなくなった製品やサポートされなくなった製品が参照されている場合があります。 利用可能な F5 NGINX 製品およびソリューションに関する最新情報については、 NGINX 製品ファミリーをご覧ください。 NGINX は現在 F5 の一部です。 以前の NGINX.com リンクはすべて、F5.com の同様の NGINX コンテンツにリダイレクトされます。"