web-dev-qa-db-ja.com

KafkaメッセージVS REST通話

最近のマイクロサービスの世界では、マイクロサービス間でREST API呼び出しを使用して同様の結果を得ることができるときに、kafkaメッセージングを使用する多くの設計が職場で見られます。技術的には、残りのAPI呼び出しの使用を完全に停止できます代わりにkafkaメッセージングを使用します。マイクロサービス間でapi呼び出しを使用する場合、kafkaメッセージングを使用する場合。

実際の例を挙げましょう:

在庫サービスとベンダーサービスがあります。毎日のベンダーサービスはベンダーAPIを呼び出して新しいアイテムを取得し、これらは在庫サービスに移動する必要があります。アイテムの数は最大10,000オブジェクトです。

この使用例では、次の方が良いですか?

  1. ベンダーAPIから新しいデータを取得した後、REST在庫サービスのAPIを呼び出して、新しいアイテムを保存します。

  2. ベンダーAPIから新しいデータを取得した後、それらをメッセージとしてkafkaトピックに送信し、在庫サービスによって消費されるようにします

どちらの方法を選択し、考慮事項は何ですか

7
user1955934

マイクロサービスアーキテクチャは、独自に動作できる独立した自律型サービスを提唱しています。メッセージキューが必要な理由を理解しましょう。

HTTPプロトコルは同期

HTTPは非同期であるという非常に広い誤解があります。 Httpは同期プロトコルですが、クライアントは非同期で処理できます。例えば。 httpを使用してサービスを呼び出すと、httpクライアントがスケジュールするバックエンドスレッド(非同期)になります。ただし、http呼び出しは、タイムアウトになるか応答が戻るまで待機します。この間、http呼び出しチェーンは同期的に待機しています。一度に何百ものリクエストがある場合、同期的にスケジュールされたhttp呼び出しの数をイメージでき、ソケットを実行できます。

[〜#〜] amqp [〜#〜]

マイクロサービスアーキテクチャでは、AMQP(アドバンスメッセージキュープロトコル)を優先します。つまり、サービスはキュー内のメッセージをドロップし、それを忘れます。これは真の非同期転送プロトコルです。サービスがキューにメッセージをドロップするとサービスが実行され、関係するサービスがそれらを選択するためです。

他のサービスがダウンした場合でも、最終的にメッセージ/イベント/データを取得するため、心配することなく拡張できるため、このタイプのプロトコルが推奨されます。

したがって、それは本当にあなたの特定のケースに依存します。 HTTPの実装は簡単ですが、適切にスケーリングすることはできません。メッセージサービスには、メッセージの順序やワーカーのような独自の課題がありますが、アーキテクチャは拡張可能であり、望ましい方法です。書き込み操作では常にキューを優先し、読み取り操作ではHTTPを使用できますが、あるサービスが別のサービスを呼び出し、別のサービスが別のサービスを呼び出すような長いチェーンを実行していないことを確認してください。

お役に立てれば幸いです。

0
Imran Arshad

MicrosercicesにおけるKafkaの役割を理解しやすくする投稿がいくつかあります。

microservices-Apache-kafka-domain-driven-design

イベントへの旅

building-a-microservices-ecosystem-with-kafka

build-services-backbone-events

さらにサポートが必要な場合はお知らせください。喜んでお手伝いします。

0
Ashish Bhosle