web-dev-qa-db-ja.com

マイクロサービスアーキテクチャのWebsocket

メッセージキューからイベントを読み取り、すべてのWebクライアントにリアルタイムで通知する通知サービスがあるとします。私はWebソケットの仕組みを知っていますが、その間にAPIゲートウェイがあると困惑します。そのとき、クライアント、APIゲートウェイ、および通知サービスの間でWebソケット接続がどのように維持されるのでしょうか。

助けてください!ありがとう

編集:アーキテクチャ: enter image description here

18
Vipul Goyal

Websocket

クライアントによって開かれたWebSocket接続は、最終的にWebSocketサーバーに接続する必要があります。

API Gateway

APIゲートウェイの仕事は、クライアントからの着信Webソケット接続を受け入れ、それをWebソケットサーバーに正しくルーティングすることです。 APIゲートウェイは、クライアントのWebソケットから送信されたすべてのデータを正しいバックエンドサービスにリダイレクトし、常に接続を維持します。

すべてがどのように連携するか...

あなたの質問の根源は、「websocket接続を使用するクライアントに、通知サービスからライブアップデートを受信させるにはどうすればよいですか?」です。最も簡単な答えは、Notification ServiceでWebsocketサーバーを起動し、各クライアントにAPIゲートウェイに接続させ、APIゲートウェイにそのトラフィックをNotification Serviceにルーティングさせることです。

  • クライアント<=> APIゲートウェイ<=>通知サービス

さらにそれを...

通知サービスから送信されるデータを変換するために、クライアントからさらに要件があれば、次のことができます。

  1. 通知サービスにそのビジネスロジックを詰め込みます(非推奨)。
  2. または、APIゲートウェイとノーティフィケーションサービスの間に、 フロントエンドのバックエンド マイクロサービスデザインパターン(推奨):と呼ばれる変換ロジックを持つ別のサービスを追加します。
    • クライアント<=> APIゲートウェイ<=>通知サーバー(変換ロジック)<=>通知サービス。
  3. または、選択したAPIゲートウェイがビジネスロジックを保持し、データを変換するように設計されている場合、変換ロジックをAPIゲートウェイに直接配置します。
6
alextaujenis

概念を混同しないでください。 API Gatewayは、インフラストラクチャをクライアントから隠しています。 「フロントエンドのバックエンド」の意味で、多くのサービスの単一のフロントエンドにすることができます。また、認証など、他の多くのことにも関与します。

Webソケットサーバーは、API Gatewayと並行して配置できます。別のドメインまたは別のポート。 http://nchan.io のようなWebソケットサーバーを使用するとします。アプリケーションからのイベントは、メッセージブローカーまたは使用するメッセージング統合パターンを通過します。消費者はこのイベントを選択し、Nchanサーバーを介して公開できます。クライアント(ブラウザなど)はNchanサーバーに接続し、イベントについて通知されます。

4
marein