マイクロサービスではどのように通信しますか?


この記事では、主にマイクロサービスの概念と、マイクロサービスなどのソフトウェアを改善する際に発生する問題について説明します.
ざっとしたマイクロサービス通信
マイクロサービスマイクロサービスは、小型の独立したサービスでソフトウェアを構成する方法である.
このとき、各サービス間では、予め定義されたAPIを介して通信が行われ、同期通信と非同期非同期メッセージングに分けられる.

  • 同期通信は、HTTPやRPCなどのプロトコルを用いて、他のサービスが露出するAPIを呼び出す方式である.これは、呼び出し元が応答を待っているため、同期メッセージングモードです.

  • 非同期メッセージングとは、サービスがメッセージを送信した後に返信を待たない方法です.1つ以上のサービスは、メッセージを非同期で処理します.
  • 非同期メッセージングには多くの利点があり、1つの利点は応答性責任です.
    例えば、反応性.
    サービスA、サービスB、サービスCがあります.
    서비스A -> 서비스B -> 서비스C
    順番に呼び出すと仮定します.
    このとき、同期呼び出しは、サービスCの終了を待ち、サービスBの終了を待つ必要がある.
    同期コールから非同期メッセージに変更された場合、サービスAは、サービスBおよびサービスCの終了を待つことはない.
    問題
    どうきつうしんもんだい
    メンテナンス中の人工知能ソフトウェアは,APIサービスと機械学習サービスに大別される.
    機械学習サービスはトレーニングと推理の任務を実行する.
    この点,機械学習サービスには推論操作を同期的に処理するという問題があることが分かった.
    これは、gRPCプロトコルを使用して推論を呼び出し、結果を返すように設計され、推定にあまり時間がかからないことを保証します.
    機械学習サービスで新しいモデルとデータを追加した後、最終的に問題が発生しました.
    grpc._channel._InactiveRpcError: <_InactiveRpcError of RPC that terminated with:
            status = StatusCode.UNAVAILABLE
            details = "upstream request timeout"
            debug_error_string = "{"created":"....","description":"Error received from peer ipv4:xx.xx.xx.xx","file":"path/src/","file_line":0000,"g
    rpc_message":"upstream request timeout","grpc_status":14}"
    >
    最初はgRPC timeoutエラーです.実際、timeout自体を大きく設定すれば解決できますが、ユーザー体験を大きく破壊します.
    推論作業には数十秒、数分かかるかもしれませんが、この間、ユーザーがずっと待つわけにはいきません...!
    非同期メッセージへの移行
    従来のトレーニングでは、GCP Pub/subを使用して非同期メッセージングを行うため、Pub/subを使用して推論することにしました.
    任務は大きく4つの段階に分かれている.
    修正
  • プッシュジョブ要求はPub/subで発行される.
  • マシンラーニングサービスでは、Pub/subのユーザに推論操作を実行させる機能を追加します.
  • Frontend appは推論操作の結果が出る前にポーリングするように修正された.
  • gRPCコードを削除します.
  • 第3段階は突然です.
    簡単な説明なら...
    フロンテンドの角度から
    従来の推定作業は同期しているため,HTTPリクエストを1回送信すると,すぐに推定結果が応答として受信される.
    推論作業の非同期的な変化に伴い,推論結果は直ちに応答を返さない.
    したがって、推論作業が終了する前にポーリングするように変更されました.
    通常のHTTPを使用してポーリングし、応答が推定されたことを示すメッセージが表示されるまで繰り返します.
    Backendの立場から
    では、Backendは何をする必要がありますか?
    APIは、推定開始要求およびポーリング要求を処理するために変更する必要があります.
    また,推論が終わったら結果をDBに保存すべきである.
    の最後の部分
    これで、マシンラーニングサービスはすべてのタスクを非同期で実行します.
    一人ですべての仕事をするには長い時間がかかります.特にフロントです.困難がありますが、私はとても喜んで、私はアーキテクチャの改善に大きな貢献をしました.
    残念な点もあります
    私が初めて言ったように、このソフトウェアはマイクロサービスのようなものです.
    厳密には、マイクロサービスとは言い難いが、APIゲートウェイはHTTPのみをサポートし、複数のサービスが1つのDBを共有している.
    MicroServiceアーキテクチャの詳細については、まだ理解していないと思います.
    私はよく勉強して、もっと改善しなければなりません...!
    Reference
  • AWS Microservices
  • Designing interservice communication for microservices
  • 私の話題とPRたち...