すべてのプロダクト
Search
ドキュメントセンター

ApsaraMQ for RocketMQ:一般的なシナリオ

最終更新日:Mar 12, 2026

ApsaraMQ for RocketMQ は、分散システムに対して、非同期通信、トランザクションの一貫性、順序指定配信、トラフィックバッファリング、リアルタイムデータ同期を提供します。

たとえば、ある eコマース企業が、登録、注文、在庫、物流などのビジネス側面をカバーしているとします。この企業は、タイムセール、周年記念イベント、定期的な特別オファーなどのプロモーションイベント中に、ビジネスのピークに対応する必要があります。これらの活動は、分散マイクロサービスアーキテクチャに大きな課題をもたらします。

以下のシナリオでは、ApsaraMQ for RocketMQ が一般的なアーキテクチャの課題をどのように解決するかを示します。各シナリオでは、eコマースプラットフォームを実行例として使用します。

シナリオ解決する課題
非同期デカップリングセカンダリタスクをオフロードしてレスポンスレイテンシーを削減
分散トランザクションの一貫性独立したサービス間でデータの一貫性を維持
順序指定メッセージ配信エンティティごとにメッセージを厳密な FIFO 順で処理
ピーク負荷シフトダウンストリームサービスに過負荷をかけることなくトラフィックスパイクを吸収
大規模キャッシュ同期クラスター内のすべてのサーバーにリアルタイム更新をブロードキャスト

非同期デカップリング

ユーザーが eコマースプラットフォームに登録すると、システムはメールと SMS の両方で確認通知を送信します。登録サービス、メールサービス、SMS サービスは独立したコンポーネントです。これらの連携方法によって、ユーザーの待機時間が決まります。

メッセージキューを使用しない場合

直列処理では、各ステップが順次連鎖します。各ステップに 50 ms かかると、ユーザーは成功応答が表示されるまで 150 ms 待つことになります。

Serial mode
  1. ユーザーが登録認証情報を送信し、登録サービスがアカウントデータを書き込みます。

  2. 登録サービスがメールサービスを呼び出し、確認メールを送信します。

  3. メールサービスが SMS サービスを呼び出し、確認メッセージを送信します。

  4. 3 つのステップすべてが完了した後、ユーザーは成功応答を受け取ります。

並列処理では、メールと SMS の通知を同時に送信するため、合計待機時間は 100 ms に短縮されます。

Parallel mode
  1. ユーザーが登録認証情報を送信し、登録サービスがアカウントデータを書き込みます。

  2. 登録サービスがメールサービスと SMS サービスを同時に呼び出します。

  3. 両方の通知が送信された後、ユーザーは成功応答を受け取ります。

どちらのアプローチも、登録サービスを通知サービスに密結合させます。いずれかの通知サービスが遅くなったり、利用できなくなったりすると、登録が遅延または失敗します。

ApsaraMQ for RocketMQ を使用する場合

登録サービスと通知サービスの間に ApsaraMQ for RocketMQ を配置します。登録サービスは単一のメッセージをパブリッシュしてすぐに復帰するため、ユーザーの待機時間は約 55 ms に短縮されます。

Asynchronous decoupling
  1. ユーザーが登録認証情報を送信し、登録サービスがアカウントデータを書き込みます。

  2. 登録サービスは、登録成功メッセージを ApsaraMQ for RocketMQ にパブリッシュし、すぐに成功応答を返します。

  3. メールサービスと SMS サービスはそれぞれ登録トピックをサブスクライブし、非同期で通知を送信します。

登録サービスは、ダウンストリームの通知サービスの可用性やパフォーマンスに依存しなくなります。メッセージフォーマットが同じである限り、プロデューサーとコンシューマーは独立して進化できます。

非同期デカップリングは、即時応答を必要としないあらゆる操作に適しています。

分散トランザクションの一貫性

上記の登録例では、登録サービスとメールサービスは別々のシステムです。これらのデータは一貫性を保つ必要があります。つまり、登録が成功した場合はメールがトリガーされ、登録が失敗した場合はトリガーされてはなりません。

通常メッセージの問題点

標準 (非トランザクション) メッセージでは、登録サービスはまずデータを書き込み、次に成功メッセージをパブリッシュします。パブリッシュに失敗すると、メールサービスはメッセージを受信できず、2 つのシステムの同期が失われます。

Normal message processing
  1. 登録サービスが登録を処理します。

  2. 登録サービスが成功メッセージを ApsaraMQ for RocketMQ にパブリッシュします。

    • パブリッシュが成功した場合、メールサービスはメッセージを受信します (ステップ 3)。

    • パブリッシュが失敗した場合、メールサービスは登録について知ることができません。登録データとメールデータは不整合になります。

  3. メールサービスが成功メッセージを受信します。

  4. メールサービスが確認メールを送信します。

トランザクションメッセージによる解決

ApsaraMQ for RocketMQ のトランザクションメッセージは、2フェーズプロトコルを使用します。まずハーフメッセージが送信され、ローカルトランザクションの結果に基づいてコミットまたはロールバックされます。

Transactional message processing
  1. 登録サービスがハーフメッセージを ApsaraMQ for RocketMQ に送信します。

    • ハーフメッセージの送信に成功した場合、ステップ 2 に進みます。

    • 失敗した場合、登録は続行されません。両方のシステムは一貫性を保ちます。

  2. 登録サービスがローカルの登録トランザクションを実行します。

    • 登録が成功した場合、ステップ 3a に進みます。

    • 登録が失敗した場合、ステップ 3b に進みます。

  3. 登録サービスがトランザクションの結果を報告します。

    • 3a. コミット: ApsaraMQ for RocketMQ はメッセージをダウンストリームのコンシューマーに配信します。ステップ 4 に進みます。

    • 3b. ロールバック: ApsaraMQ for RocketMQ はハーフメッセージを破棄します。通知は送信されません。両方のシステムは一貫性を保ちます。

  4. メールサービスが登録成功メッセージを受信します。

  5. メールサービスが確認メールを送信します。これで両方のシステムは一貫性が保たれます。

すべての決定ポイントで、両方のサービスにまたがるデータは同期を保ちます。実装の詳細については、「トランザクションメッセージ」をご参照ください。

順序指定メッセージ配信

一部の操作は、特定のシーケンスで処理する必要があります。ユーザーの登録レコードが作成、更新、削除された場合、これらのイベントはまさにその順序でコンシューマーに到達する必要があります。順序が狂った処理は、古いデータや不整合なデータを残す可能性があります。

ApsaraMQ for RocketMQ は、パーティション順序付きメッセージをサポートしています。トピック内のメッセージはシャーディングキーによってパーティション分割され、同じシャーディングキーを共有するすべてのメッセージは、そのパーティション内で厳密な FIFO (First-In, First-Out) 順で配信および消費されます。これにより、各メッセージが 1 つのプロセスによって消費されることが保証されます。

ユーザー登録への適用: ユーザー ID をシャーディングキーとして設定します。同じユーザーに対するすべてのイベント (作成、更新、削除) は同じパーティションに入り、パブリッシュされた順序で処理されます。

説明

FIFO 順序は単一のパーティション内でのみ保証されます。異なるパーティション間のメッセージには順序の保証はありません。

実装の詳細については、「順序付きメッセージ」をご参照ください。

ピーク負荷シフト

タイムセールや共同購入イベント中、多数のユーザーリクエストによりトラフィックが急増します。ダウンストリームの通知サービスは、この突然の急増に対応できず、メッセージのドロップやサービス停止につながる可能性があります。

ApsaraMQ for RocketMQ は、高スループットのアプリケーション層と容量制限のあるダウンストリームサービスとの間でメッセージをバッファリングします。

Peak-load shifting
  1. ユーザーが大量の購入リクエストをタイムセール処理システムに送信します。

  2. タイムセールシステムは、ビジネスルールに基づいてリクエストを検証し、条件を満たす注文を ApsaraMQ for RocketMQ にパブリッシュします。

  3. 通知システムは、持続可能なレートでメッセージを消費し、購入成功通知を送信します。

  4. ユーザーが確認通知を受け取ります。

キューがトラフィックのバーストを吸収し、通知システムが自身のペースでメッセージを処理できるようにします。

大規模キャッシュ同期

「独身の日 (Double 11)」のような大規模なショッピングイベント中、各会場には価格が頻繁に変動する多種多様な商品があります。従来のリクエストごとのキャッシュルックアップは、キャッシュサーバーに過負荷をかけます。ネットワークインターフェースコントローラー (NIC) が飽和状態になり、ページの読み込み時間が増加します。

ApsaraMQ for RocketMQ は、ブロードキャスト消費でこの問題に対処します。デフォルトのクラスター消費では、各メッセージはコンシューマークラスター内の 1 つのコンシューマーにのみ配信されます。ブロードキャスト消費モードでは、クラスター内のすべてのコンシューマーがすべてのメッセージを受信します。

価格同期への適用: 価格が変更されると、単一のメッセージが ApsaraMQ for RocketMQ にパブリッシュされます。コンシューマークラスター内のすべてのアプリケーションサーバーが更新情報を受信し、ローカルキャッシュをリフレッシュします。これにより、繰り返しのキャッシュクエリが不要になり、すべてのサーバーが同期状態に保たれます。

消費モードの詳細については、「クラスター消費とブロードキャスト消費」をご参照ください。