web-dev-qa-db-ja.com

flask and REST

関連するコンポーネント:

  • モバイルクライアント
  • マイクロサービス
  • APIゲートウェイ

各マイクロサービスは、Flaskアプリケーションであり、RESTful APIを公開します。リクエストがモバイルクライアントによって行われると、API Gatewayに送信されます。

システムの最も重要なタスクの1つは、家具の選択と家具の配置アルゴリズムを実行することです(以下を参照)。選択が最初に行われ、ユーザーに結果を与えるはずの配置アルゴリズムに出力が提供されます。

API Gatewayがリクエストを受け取ったら、2つのオプションがあります。

  1. APIゲートウェイは、選択アルゴリズムサービスにリクエストを送信します。その応答を待ちます。 API Gatewayが応答を受信すると、リクエストを(前の要求から受信した応答とともに)配置アルゴリズムサービスに送信します。応答を取得してクライアントに返します。下の図:

enter image description here

  1. API Gatewayは、必要な処理を行う選択アルゴリズムサービスにリクエストを送信し、結果とともに配置アルゴリズムサービスにリクエストを送信します。配置アルゴリズムサービスが完了すると、選択アルゴリズムに応答してAPIゲートウェイに応答を送信し、APIゲートウェイはそれをクライアントに返します。下の図:

enter image description here

また、2つのマイクロサービスが互いに通信したい場合、どの方法が使用されますか?

4
Shahlin Ibrahim

これは提示されたように誤った選択のように感じられますが、異なる「正しい」ソリューションを持つ考慮すべきさまざまな種類の依存関係もあります。とは言っても、提案されたソリューションのどちらかが正しいものであるという単一のケースは考えられません。

あなたが言ったように、サービスBはサービスAからの応答なしでは出力を提供できません。それはすぐに私にとって赤信号であり、おそらく別々のマイクロサービスであってはならないことを私に伝えます。また、現在のアーキテクチャでは、それを処理するonly方法は、サービスBが直接Aと通信し、APIゲートウェイを介してクライアントに合成応答を提供することを意味します。実際には、おそらく2つのマイクロサービスがあってはならないという警告もあります。これが真の場合、Bの出力は実際にはAに「依存」しませんではありません。

API Gatewayによって公開されたサービスエンドポイントがサービスAとBからの情報の組み合わせであるというのであれば、それが答えです。それぞれが独立しており、ゲートウェイによって構成されます。

サービスAにdataサービスBに必要なもの(ビジネスロジックではなくデータのみ)である場合、別の答えは共有データストア(従来のデータベースまたはメッセージキューなど)両方のマイクロサービスが通信します。

Auth には、サービス構成のオプションと「なぜ」に関するかなり良い議論があります。それは、あなたが同様に明るいと感じるかもしれません。また、specific「サービスA」や「サービスB」などのジェネリックを使用するのではなく、ビジネスケース。

質問の更新後

更新されたユースケースの場合、これらのマイクロサービスのその他の使用方法に応じて、オプションを再構築します。現在のところ、Selectionマイクロサービスで直接Placementマイクロサービスを呼び出すことは考えられません。

代わりに、あなたが説明したようにAPI Gatewayで作業を構成するか、マイクロサービスを単一のコンポーネントに統合します。

アップストリームの複数のサービス呼び出しを管理する、統一されたより高レベルのAPIを提供することは、その範囲内であるimoです。これを実行したくない主な理由は、技術的な制限がある場合、たとえば、1つのクライアント要求を解決するために発生する必要のある2つのマイクロサービス間に大量のチャットが存在する場合です。たとえば、「ベストフィット」分析を最適化するクライアントサービスを提供したい場合は、家具の選択と配置の両方を行います。そのため、作品を選択し、多くの組み合わせで配置する必要があります。その場合は、内部ですべてを処理する「ルームデザイン」マイクロサービスを1つ作成することを検討します。これにより、データベースやクエリをより適切に最適化できるようになります。

2
Paul