要旨
マイクロサービスベースのアーキテクチャ(Kubernetes)で実行されるアプリケーションがあります。アプリケーションの外部とのすべての通信は、API Gatewayを介して行われます。
つまり、私のフロントエンドからのリクエストはサービスに直接送信されませんが、ゲートウェイを経由する必要があります。
動かす
次に、フロントエンドと内部サービス間のリアルタイム通信を必要とする機能を実装する必要があります。しかし、内部サービスは外部に公開されていないため、ゲートウェイを介してリアルタイムデータを「ルーティング」する方法が必要です。
すべてのサービスがNode.jsで実行されているため、Socket.IOを使用してリアルタイム通信を実装したいのです。
問題
しかし、スケッチから紫色の二重矢印を実装する方法は?
そのため、通常、フロントエンドクライアントは、Socket.IOが実行されているサーバーに接続します。しかし、私の場合、このサーバー(リアルタイム機能サーバー)はクライアントからアクセスできません(アクセスできないはずです)。つまり、クライアントはゲートウェイに接続する必要があります。したがって、ゲートウェイは、すべての着信メッセージをリアルタイムサービスとその逆にルーティングするメカニズムを実装する必要があります。
アイデア
(1)ゲートウェイでイベントをリッスンする2番目のHTTPサーバーを用意し、それらのイベントをリアルタイムサーバーに送信します。反対の方向では、リアルタイムサーバーはゲートウェイにイベントを発行し、ゲートウェイはそれをフロントエンドに発行します。このアプローチは間違いなくうまくいくと思いますが、すべてを2回放出するのは冗長なようです。そして、それは間違いなくパフォーマンスを損なうでしょうか?
(2)Socket.IOアダプターを使用して「ノード間でイベントを渡す」。これは「プロセスまたはコンピューター間でメッセージを渡す」ために使用されるため、正しい方法と思われます。しかし、ドキュメントやサンプルが不足しているため、使用を開始するのに問題があります。私もRedisを使用していません(アダプターを使用するために必要ですか?)
(3)socket.io-emitterパッケージを使用します。これは、最後のコミットが3年前からあったため、良いオプションとは思えません。
(4)他に何かありますか?
nginx
イングレスコントローラーとして使用しました。必要に応じてhaproxyも使用できます。2つのサービス(デプロイメント)があり、1つはHTTP(s)リクエストを管理し、もう1つはソケットリクエストを管理します。Ingressを使用すると、パスを公開し、トラフィックを適切なサービス/socket
にリダイレクトできsocket-service
ます。たとえば、ヒットしたリクエストはすべてアプリケーションにリダイレクトされます。
ingress-controller
k8sを使用すると、socket
トラフィックがサッカーサービスに送信されます。