[51CTO.com からのオリジナル記事] 最初から、さまざまなマイクロサービスがさまざまな方法で相互に通信する必要があります。
HTTP REST API を使用することを好む人もいますが、独自のキューの問題に遭遇する可能性があります。 RabbitMQ などの古いメッセージ キューを使用することを好む人もいますが、拡張や操作などの関連する問題を考慮する必要があります。
そこで、上記 2 つの問題を解決することを目的とした Kafka ベースのアーキテクチャが誕生しました。 この記事では、Apache Kafka がこれまでマイクロサービスで使用されてきた HTTP REST API とメッセージ キュー アーキテクチャをどのように改善し、サービス機能をさらに拡張するかについて説明します。 二つの陣営の物語 最初のキャンプでは、HTTP REST API やリモート プロシージャ コール (RPC) などの他のサービスを呼び出すことによって通信が直接処理されます。 2 番目の陣営は、サービス指向アーキテクチャ (SOA) からエンタープライズ サービス バス (ESB) の概念を借用し、他のサービスとの通信を担当するメッセージ キュー (RabbitMQ など) をメッセージ エージェントとして使用して、さまざまな操作を実装しました。 この方法では、サービス間の直接的な「通信」による通信負荷を 1 つずつ軽減できますが、ネットワーク内に余分な「ホップ」のコストが追加されます。 HTTP REST API を使用したマイクロサービス HTTP REST API は、サービス間で RPC を実行するための一般的な方法です。その主な利点は、初期設定が簡素化され、メッセージ送信の相対的な効率が向上することです。 ただし、このパターンでは、実装者はキューなどの問題や、受信リクエストの数がノードの容量を超える問題への対処方法を考慮する必要があります。 たとえば、長いサービス チェーンがあり、そのうちの 1 つがノードの処理能力を超えているとします。 次に、この問題に対処するために、サービス チェーン内のすべての先行サービスに対して同じタイプのバック プレッシャー処理 (翻訳者注: システムはソースまたはアップストリームの送信レートを適応的に削減します) を実行する必要があります。 さらに、このパターンでは、すべての個別の HTTP REST API サービスが高可用性である必要があります。そして、さまざまなマイクロサービスで構成された長いパイプラインでは、どのマイクロサービスもそのすべてのコンポーネントを失う余裕はありません。 したがって、特定のグループ内の少なくとも 1 つのプロセスが正常に機能している限り、通信は引き続き機能します。 もちろん、通常はこれらのマイクロサービスの前に負荷分散モジュールを構成する必要があります。同時に、さまざまなマイクロサービスが呼び出しを通じてどこで通信するかを知る必要があるため、サービス検出モジュールが必要になることがよくあります。 このモードの利点の 1 つは、レイテンシが非常に低いことです。特定のリクエスト パスでは仲介者の役割がほぼ排除されるため、Web サーバーや負荷分散などのコンポーネントは実戦テスト済みで、高いパフォーマンスを発揮します。 異なる RPC タイプのマイクロサービスの場合、それらの間の共通の依存関係を処理する必要があるため、すぐに非常に複雑になり、最終的には開発プロセスに影響を与えたり、開発プロセスを遅らせたりする傾向があることがわかります。 今日、業界ではいくつかの新しいソリューションも導入されています。たとえば、Envoy プロキシはサービス メッシュを使用してこの問題を解決します。 このパターンは負荷分散やサービス検出などの問題を解決しますが、単純で直接的な RPC 呼び出しと比較すると、システム全体の複雑さが大幅に増加します。 下の図に示すように、多くの企業では、最初は相互に通信する必要があるマイクロサービスが少数しかありませんが、システムが徐々に「成長」するにつれて、それらの間の呼び出し関係と通信チャネルは最終的にスパゲッティのボウルのように複雑になります。
メッセージキュー マイクロサービス間の通信を構築するもう 1 つの方法は、メッセージ バスまたはメッセージ キュー システムを使用することです。 以前のサービス指向アーキテクチャでは、これをエンタープライズ サービス バス (ESB) と呼んでいました。通常、メッセージ ブローカーとして RabbitMQ または ActiveMQ が必要です。 集中型メッセージ サービスとして、メッセージ ブローカーは、それに接続されているすべてのマイクロサービス間の通信を容易にすることができます。 同時に、キューイング処理メカニズムとメッセージ サービスの高可用性の助けにより、さまざまなサービス間の通信も保証されます。 たとえば、メッセージ キューのサポートにより、さまざまなメッセージを順番に受信して、システムが後続の処理を実行できるようになります。 リクエストのピークが発生し、処理能力の制限を超えた場合、システムは後続のキューを直接破棄しません。 ただし、多くのメッセージ ブローカーは、クラスター環境でのメッセージ配信および永続化機能にはスケーラビリティが欠けているか、制限されていることをユーザーに明示的に通知しています。 メッセージ キューで注目すべきもう 1 つの領域は、エラーが発生したときにそれをどのように処理するかです。 たとえば、システムの信頼性の高いメカニズムは、メッセージ送信プロセスにおいて少なくとも 1 回は保証できますか?それとも最大で1回しか保証できないのでしょうか? もちろん、そのセマンティクスの選択は、メッセージ キューの実装によって完全に異なります。つまり、選択したメッセージとそれに伴うセマンティック ルールに精通している必要があります。 さらに、既存のシステムのアーキテクチャにメッセージ キューを追加すると、必然的に操作および保守する新しいコンポーネントが追加されます。 同時に、さまざまなメッセージを送信するために、ネットワークに新しい「ホップ」を追加すると、追加の遅延が発生し、Web サイトの待機も発生します。 客観的に言えば、このモデルは、さまざまなメッセージ キュー システムに集中型アクセス制御リスト (ACL) を使用することで、さまざまなセキュリティの問題を簡素化します。 つまり、この集中制御方式では、さまざまなルールを一律に適用して、誰がどのようなメッセージを読み書きできるかを制限します。 集中型通信のもう 1 つの利点は、ネットワーク セキュリティです。たとえば、以前は、すべてのマイクロサービスが独自に相互に通信していました。 メッセージ エージェントを導入すると、すべての接続をメッセージ キュー サービス経由で転送し、ファイアウォールのようなルール設定を通じて他のマイクロサービス間の直接接続を除外できるため、攻撃対象領域を減らすことができます。 Kafka中心の利点 LinkedIn によって作成された Apache Kafka は、オープンソースのイベント ストリーミング プラットフォームです。これまでの古いメッセージキューシステムと完全に異なるのは、送信者と受信者を完全に分離できる機能を備えていることです。つまり、送信者は送信したメッセージを誰が受け取るかを知る必要はありません。
他の多くのメッセージ ブローカー システムでは、送信したメッセージを誰が読むかを事前に知っておく必要があります。これにより、従来のキューイング システムにいくつかの新しい未知のユース ケースを追加することが多少妨げられます。 Apache Kafka を使用する場合、送信者によってさまざまなメッセージがトピックと呼ばれるログのようなデータ ストリームに書き込まれ、誰が、またはどのアプリケーションが実際にメッセージを読み取るかを気にする必要はありません。 したがって、新しいユースケースでは、新しい用途に応じて Kafka の関連トピック コンテンツをどのように処理するかを検討する余地が残ります。 Kafka の場合、送信されるさまざまなメッセージの特定のペイロードを気にする必要がないだけでなく、メッセージを任意の方法でシリアル化することもできます。 そのため、ほとんどのユーザーは依然として JSON、AVRO、または Protobuf を使用してデータ形式をシリアル化しています。 さらに、ACL を簡単に設定して、システム内のさまざまなプロデューサーとコンシューマーが読み取りまたは書き込みできるトピックを制限できるため、すべてのメッセージに対する集中的なセキュリティ制御を実現できます。 その結果、潜在的に非常に大量のデータを取り込むために、Kafka がファイアホース スタイルのデータ パイプラインとして使用されることがよくあります。 たとえば、Netflix は Kafka を使用して 1 日あたり 2 兆件のメッセージを処理していると主張しています。 Kafka のコンシューマーには重要な特性があることに注目する価値があります。メッセージの負荷が増加すると、Kafka のコンシューマーは障害と容量要件の増加に応じて変化します。このとき、Kafka はコンシューマー間の処理負荷を自動的に再調整します。 開発者は、マイクロサービス内の高可用性の確保から Apache Kafka サービス自体に重点を移していることがわかります。 同様に、ストリーミング データを処理する Kafka の運用能力も、Kafka をメッセージング システムからストリーミング データ プラットフォームへと変革しました。 良いニュースとしては、Apache Kafka を使用するとネットワークに余分な「ホップ」が追加されますが、さまざまなリクエストに対するマイクロサービス通信バスとしてのレイテンシは増加 (または減少) しません。 つまり、上記の低レイテンシ、自動拡張、集中管理、成熟した高可用性により、Apache Kafka はマイクロサービスの通信開発において際立っており、さまざまなストリーミング データのリアルタイム分析に使用できる安定した動作環境を構築します。 [51CTO オリジナル記事、パートナーサイトに転載する場合は、元の著者とソースを 51CTO.com として明記してください] |
>>: Aruba 802.11ax、究極のモバイルエクスペリエンス
少し前、私のような新人が「検索エンジンで上位にランクするにはどうしたらいいか」という問題について議論...
[概要]Techmeme は、多数のテクノロジー企業の幹部やベンチャーキャピタリストを引き付けていま...
[[436712]]この記事はWeChatの公開アカウント「馬崇嘉」から転載したもので、著者は馬崇嘉...
admin5.com が 10 月 25 日に報じたところによると、Shanda Literatur...
2019 年 4 月、金融サービス、小売、テクノロジー、ヘルスケアなどの業界の 108 人の技術専門...
ニュース報道の過程でよく使われる「事実を語る」報道手法とは、記者がニュース報道の事実を慎重に選択し、...
[51CTO.com からのオリジナル記事] インターネットや情報技術の発展に伴い、人々が知識を獲得...
Racknerd は本日、8G メモリ、4 コア、100G SSD、5T トラフィックを提供する高構...
Hualong Lane は元々 PHPWind システムを使用しており、元の URL はデフォルト...
10月27日、Huawei Cloud TechWaveグローバルテクノロジーサミット(アプリケーシ...
Java ベースのエンタープライズ バックエンド アプリケーションを扱ったことがあるソフトウェア開発...
2018年最もホットなプロジェクト:テレマーケティングロボットがあなたの参加を待っています著者: ジ...
AOL が所有するアメリカのニュースおよびブログ サイト、ハフィントン ポストの社長兼編集長、アリア...
分析: ①分析統計ツールをインストールする。お金をかけたくない場合は、Google Analytic...
Hostsolutions は、今回もプロモーションを実施しています。今回は、VPS と SSD ハ...