最近のマイクロサービスの世界では、マイクロサービス間でREST API呼び出しを使用して同様の結果を得ることができるときに、kafkaメッセージングを使用する多くの設計が職場で見られます。技術的には、残りのAPI呼び出しの使用を完全に停止できます代わりにkafkaメッセージングを使用します。マイクロサービス間でapi呼び出しを使用する場合、kafkaメッセージングを使用する場合。
実際の例を挙げましょう:
在庫サービスとベンダーサービスがあります。毎日のベンダーサービスはベンダーAPIを呼び出して新しいアイテムを取得し、これらは在庫サービスに移動する必要があります。アイテムの数は最大10,000オブジェクトです。
この使用例では、次の方が良いですか?
ベンダーAPIから新しいデータを取得した後、REST在庫サービスのAPIを呼び出して、新しいアイテムを保存します。
ベンダーAPIから新しいデータを取得した後、それらをメッセージとしてkafkaトピックに送信し、在庫サービスによって消費されるようにします
どちらの方法を選択し、考慮事項は何ですか
マイクロサービスアーキテクチャは、独自に動作できる独立した自律型サービスを提唱しています。メッセージキューが必要な理由を理解しましょう。
HTTPプロトコルは同期
HTTPは非同期であるという非常に広い誤解があります。 Httpは同期プロトコルですが、クライアントは非同期で処理できます。例えば。 httpを使用してサービスを呼び出すと、httpクライアントがスケジュールするバックエンドスレッド(非同期)になります。ただし、http呼び出しは、タイムアウトになるか応答が戻るまで待機します。この間、http呼び出しチェーンは同期的に待機しています。一度に何百ものリクエストがある場合、同期的にスケジュールされたhttp呼び出しの数をイメージでき、ソケットを実行できます。
[〜#〜] amqp [〜#〜]
マイクロサービスアーキテクチャでは、AMQP(アドバンスメッセージキュープロトコル)を優先します。つまり、サービスはキュー内のメッセージをドロップし、それを忘れます。これは真の非同期転送プロトコルです。サービスがキューにメッセージをドロップするとサービスが実行され、関係するサービスがそれらを選択するためです。
他のサービスがダウンした場合でも、最終的にメッセージ/イベント/データを取得するため、心配することなく拡張できるため、このタイプのプロトコルが推奨されます。
したがって、それは本当にあなたの特定のケースに依存します。 HTTPの実装は簡単ですが、適切にスケーリングすることはできません。メッセージサービスには、メッセージの順序やワーカーのような独自の課題がありますが、アーキテクチャは拡張可能であり、望ましい方法です。書き込み操作では常にキューを優先し、読み取り操作ではHTTPを使用できますが、あるサービスが別のサービスを呼び出し、別のサービスが別のサービスを呼び出すような長いチェーンを実行していないことを確認してください。
お役に立てれば幸いです。
MicrosercicesにおけるKafkaの役割を理解しやすくする投稿がいくつかあります。
microservices-Apache-kafka-domain-driven-design
building-a-microservices-ecosystem-with-kafka
build-services-backbone-events
さらにサポートが必要な場合はお知らせください。喜んでお手伝いします。