効果的な Amazon MQ パフォーマンスの確保 - Amazon MQ

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

効果的な Amazon MQ パフォーマンスの確保

以下の設計パターンは、Amazon MQ ブローカーの有効性とパフォーマンスを向上させることができます。

低速コンシューマーのキューに対して同時保存とディスパッチを無効にする

デフォルトで、Amazon MQ は高速コンシューマーのキューに対して最適化を行います。

  • コンシューマーは、プロデューサーによって生成されるメッセージの速度に対応できる場合、高速とみなされます。

  • キューによって未確認メッセージのバックログが生成され、プロデューサーのスループットが低下する可能性がある場合、コンシューマーは低速とみなされます。

低速コンシューマーのキューに対して最適化を行うよう Amazon MQ に指示するには、concurrentStoreAndDispatchQueues 属性を false に設定します。設定の例については、「concurrentStoreAndDispatchQueues」を参照してください。

最良なスループットのために正しいブローカーインスタンスタイプを選択する

ブローカーインスタンスタイプのメッセージスループットは、アプリケーションのユースケースおよび以下の要因に依存します。

  • ActiveMQ を永続モードで使用する

  • メッセージサイズ

  • プロデューサーとコンシューマーの数

  • 送信先の数

メッセージサイズ、レイテンシー、およびスループット間の関係の理解

ユースケースによっては、より大きなブローカーインスタンスタイプはシステムスループットを向上させない場合があります。ActiveMQ が耐久性のあるストレージにメッセージを書き込むと、メッセージのサイズはシステムの制限要因を決定します。

  • メッセージが 100 KB 未満の場合、永続的ストレージのレイテンシーが制限要因となります。

  • メッセージが 100 KB 以上の場合、永続的ストレージのスループットが制限要因となります。

ActiveMQ を永続モード使用すると、ストレージへの書き込みは通常、前のコンシューマーがいくつか存在するか、あるいはコンシューマーが低速の場合に発生します。非永続的なモードでは、ブローカーインスタンスのヒープメモリに空き容量がない場合にも、低速のコンシューマーによるストレージへの書き込みが発生します。

アプリケーションにおける最適なブローカーインスタンスタイプを決定するには、異なるブローカーインスタンスタイプをテストすることが推奨されます。詳細については、「Broker instance types」および「Measuring the Throughput for Amazon MQ using the JMS Benchmark」を参照してください。

より大きなブローカーインスタンスタイプのユースケース

より大きなブローカーインスタンスタイプがスループットを向上させるには、3 つの一般的なユースケースがあります。

  • 非永続モード – アプリケーションがブローカーインスタンスのフェイルオーバー中におけるメッセージの喪失による影響を受けにくいときは、多くの場合 ActiveMQ の非永続モードを使用できます。このモードでは、ブローカーインスタンスのヒープメモリに空き容量がない場合にのみ、ActiveMQ は永続的ストレージにメッセージを書き込みます。非永続モードを使用するシステムは、大きなブローカーインスタンスタイプで利用できるより大きなメモリ容量、高速の CPU、および高速のネットワークの利点を活用できます。

  • 高速コンシューマー – アクティブなコンシューマーが利用可能で、concurrentStoreAndDispatchQueues フラグが有効になっていると、ActiveMQ は、永続モードになっている場合でも、ストレージにメッセージを送信することなく、プロデューサーからコンシューマーへの直接的なメッセージのフローを許可します。アプリケーションが素早くメッセージを消費できる場合 (あるいは、コンシューマーがその処理を行えるように設計できる場合)、アプリケーションはより大きなブローカーインスタンスタイプの利点を活用できます。アプリケーションがより素早くメッセージを消費できるようにするには、アプリケーションインスタンスにコンシューマースレッドを追加するか、あるいはアプリケーションインスタンスを水平あるいは垂直にスケールアップします。

  • バッチトランザクション – 永続的モードを使用しており、トランザクションごとに複数のメッセージを送信するときは、より大きなブローカーインスタンスタイプを使用することによって、全体的に高いメッセージスループットを達成することができます。詳細については、ActiveMQ ドキュメントの「Should I Use Transactions?」を参照してください。

最高のスループットのために正しいブローカーストレージタイプを選択する

複数のアベイラビリティーゾーン全体で優れた耐障害性とレプリケーションを活用するには、Amazon EFS を使用します。低レイテンシーと高スループットを活用するには、Amazon EBS を使用します。詳細については、「Storage」を参照してください。

ブローカーのネットワークを正しく設定する

ブローカーのネットワークを作成するときは、アプリケーションに合わせて正しく設定します。

  • 永続モードを有効にする – 同等のものと比べると、各ブローカーインスタンスはプロデューサーまたはコンシューマーのように動作するため、ブローカーのネットワークはメッセージの分散レプリケーションを提供しません。コンシューマーとして機能する最初のブローカーはメッセージを受信し、それをストレージに永続化します。このブローカーは確認をプロデューサーに送信し、そのメッセージを次のブローカーに転送します。2 番目のブローカーがメッセージの持続性を確認すると、最初のブローカーはそのメッセージを削除します。

    永続モードが無効になっている場合、最初のブローカーはメッセージをストレージに保持せずにプロデューサーに確認します。詳細については、Apache ActiveMQ ドキュメントの「レプリケートされたメッセージストア」および「永続的配信と非永続的配信の違い」を参照してください。

  • ブローカーインスタンスのアドバイザリーメッセージを無効にしない – 詳細については、Apache ActiveMQ ドキュメントの「Advisory Message」を参照してください。

  • マルチキャストブローカー検出を使用しない – Amazon MQ はマルチキャストを使用したブローカー検出をサポートしません。詳細については、Apache ActiveMQ ドキュメントの「検出、マルチキャスト、および zeroconf の違い」を参照してください。