目次
1 はじめに
RocketMQ は、Alibaba Group によって元々開発され、オープンソース化されたオープンソースの分散メッセージング ミドルウェアです。分散システムに信頼性が高く、高性能でスケーラブルなメッセージ通信機能を提供することを目的としています。RocketMQ、RabbitMQ、KAFKA が 3 つの主流メッセージ ミドルウェアとして挙げられています。
一般に、MQ はその特性を次の 3 つの次元から分析できます。
- スループットとレイテンシ
- 信頼性
- メッセージモデルの豊富さ
1. スループットとレイテンシ:
メッセージミドルウェアは「トラフィックのピークカット」を実現するためによく使われるコンポーネントであり、1回の時間単位に処理できるメッセージの量は非常に重要な指標となります。RocketMQ は元々 Ali の "Double イレブン" 用に設計され、現在は "Double イレブン" 期間中のシステム スループットを確保するために使用されるコア コンポーネントの 1 つであり、次の 3 つの側面から高スループットと低遅延を保証します。
- 分散アーキテクチャ RocketMQ は、メッセージの保存と処理を複数のノードに分散できる分散アーキテクチャで設計されています。このようにして、メッセージの並列処理が実現され、システムのスループットと同時実行パフォーマンスが向上します。
- ゼロコピー、RocketMQ はメッセージ送信のプロセスにゼロコピーテクノロジーを採用しており、ユーザー空間とカーネル空間の間でデータが複数コピーされることを回避します。これにより、不必要なデータ コピー操作が削減され、データ送信効率が向上し、待ち時間が短縮されます。
- RocketMQ は、メッセージ インデックス ベースのアプローチを使用して、メッセージの検索と取得を高速化します。メッセージ インデックスを作成すると、メッセージが保存されている場所をすばやく特定でき、メッセージを読む効率が向上します。
2. 信頼性
メッセージの信頼性、つまりメッセージが簡単には失われません。RabbitMQ と同様に、RocketMQ はメッセージの信頼性が高く、次の方法を使用してメッセージの信頼性を確保します。
- 永続性。RocketMQ では、電力損失を防ぐためにメッセージをディスクに永続化できます。
- 確認と応答では、RocketMQ は公開確認と消費応答をサポートしています。メッセージが交換に送信された後、プロデューサーに確認を返すことができ、コンシューマーがメッセージを正常に消費した後、MQ に応答できます。
3. メッセージモデルの豊富さ
RocketMQ は 5 つのメッセージ モデルをサポートします。
- ピアツーピアモデル
- パブリッシュ・サブスクライブ・モデル
- リクエストレスポンスモデル
- 時限メッセージモデル
- シーケンシャルメッセージモデル
メッセージ モデルの豊富さは Kafka よりも高いですが、RabbitMQ よりは低いです
適切なシーン:
上記の 3 つの側面から、RocketMQ は、信頼性が高く、高スループット、低遅延の分散メッセージ通信を必要とするシナリオに適しています。以下は、RocketMQ が適用できる特定のビジネス シナリオの例です。
-
電子商取引の注文処理: 電子商取引プラットフォームでは、注文処理は重要なビジネス リンクです。RocketMQ を使用すると、注文の作成、支払いステータスの更新、在庫の控除など、注文関連のメッセージを非同期に処理できます。これにより、高スループットと低遅延を実現しながら、注文メッセージの信頼性の高い配信と順次処理が保証されます。
-
リアルタイム ログ処理: 大規模な分散システムでは、ログ処理はトラブルシューティング、パフォーマンス監視、データ分析にとって重要です。RocketMQ を使用すると、システムによって生成されたリアルタイム ログ メッセージを収集、送信、処理できます。大量のログ データを迅速に処理し、ログ メッセージの信頼性の高い配信と順次処理を保証します。
-
モバイル アプリケーションでのプッシュ通知: モバイル アプリケーションでのプッシュ通知では、多くの場合、通知メッセージをユーザーに迅速かつ確実に配信する必要があります。RocketMQ はメッセージ プッシュのバックエンド インフラストラクチャとして使用でき、大規模なメッセージ プッシュと即時通知をサポートし、メッセージの信頼性の高い配信と順次処理を保証します。
-
IoT デバイス通信: IoT の分野には、大量のデバイスおよびセンサー データの収集と処理が含まれます。RocketMQ はデバイス間のリアルタイム通信に使用でき、デバイスによって生成されたデータを処理と分析のためにクラウドに送信します。大規模な IoT シナリオに適した、信頼性の高いメッセージ配信と高スループット機能を提供します。
-
金融取引システム: 金融分野では、取引システムにはメッセージの信頼性と順序について非常に高い要件が求められます。RocketMQ は、支払い通知、資金決済、取引確認などの金融取引に関連するメッセージを処理するために使用できます。トランザクション メッセージのサポートと順次メッセージ処理機能を提供し、トランザクションの一貫性と順序を確保します。
2. アーキテクチャ
RocketMQ クラスター全体のアーキテクチャはマイクロサービス アーキテクチャに似ています。ノード情報を保存するネーム サーバーがあります。プロデューサーとコンシューマーの両方がネーム サーバーにアクセスしてブローカー情報を取得し、特定のブローカーを見つけてメッセージを送受信します。 。ブローカーは、フォールト トレランスを実現するために、マスター/スレーブ方式で相互にバックアップできます。
3. 中心となる概念
- メッセージ、メッセージ、データユニット。トピック、タグ、ボディで構成されます。body は送信される特定のデータです。
- プロデューサー、メッセージの送信者。RocketMQ のメッセージ キューにメッセージを送信する役割を果たします。
- コンシューマ、メッセージ受信者。特定のメッセージ トピック (Topic) をサブスクライブし、RocketMQ のメッセージ キューからメッセージを取得して処理します。
- トピック、メッセージの論理分類。メッセージのトピックまたはラベルに似ています。プロデューサーがメッセージを送信するときは、メッセージの送信先のトピックを指定する必要があります。
- tag はメッセージへの追加タグであり、トピックの下でメッセージをより詳細に分類するために使用されます。コンシューマはオプションでタグに基づいてメッセージをサブスクライブし、フィルタリングできます。
- メッセージキュー、メッセージトピックのパーティションまたはシャード。各トピックは複数のメッセージ キューに分割できるため、メッセージを並列処理してシステムのスループットと同時実行パフォーマンスを向上させることができます。
- メッセージの保存と転送を担当するブローカー。プロデューサからメッセージを受信し、適切なメッセージ キューに保存します。同時に、Consumer からの消費リクエストも受信し、Consumer にメッセージを配信します。
- ネーム サーバー (ネーム サービス) は、トピック、プロデューサー、コンシューマーなどの登録と検出を含む、RocketMQ システム全体のメタデータ情報の管理を担当します。プロデューサーとコンシューマーは、ルーティング情報とメタデータを取得するために、起動時に Namesrv と対話する必要があります。