ApsaraMQ for RabbitMQ は、分散型の高可用性ストレージアーキテクチャをベースに構築されたフルマネージド型メッセージングサービスです。AMQP 0-9-1 プロトコルを実装し、オープンソース RabbitMQ クライアントと互換性があります。オープンソース RabbitMQ と比較して、ApsaraMQ for RabbitMQ は、メッセージの蓄積やスプリットブレインの問題など、一般的な安定性の課題を解決します。また、高い同時実行性、分散デプロイ、柔軟なスケーリングなど、クラウドメッセージングサービスのメリットを提供します。
このトピックでは、ApsaraMQ for RabbitMQ とオープンソース RabbitMQ を、機能、スケーラビリティ、信頼性、エクスチェンジ、キューの観点から比較します。
すべてのメリットについては、「メリット」をご参照ください。
機能
機能 | ApsaraMQ for RabbitMQ | オープンソース RabbitMQ |
プロトコル | AMQP 0-9-1 | AMQP 0-9-1、AMQP 1.0、STOMP、MQTT、HTTP(S)、WebSocket |
クライアント SDK | すべてのオープンソース RabbitMQ クライアント SDK (任意の言語、任意のバージョン) | オープンソース SDK |
遅延メッセージ | 秒単位の精度。x-delayed-message プラグインと TTL 方式の両方に対応しています。詳細については、「遅延メッセージ」をご参照ください。 | プラグイン、またはメッセージ TTL の有効期限切れと転送の方式が必要です。 |
トランザクションメッセージ | サポートされていません | サポートされています |
順序付きメッセージ | サポートされています。詳細については、「メッセージの順序付き消費」をご参照ください。 | サポートされています |
メッセージの優先度 | 専用インスタンスのみ | サポートされています |
メッセージのリトライ | タイムアウト期間内にメッセージが確認されない場合、自動的に再配信されます。詳細については、「リトライポリシー」をご参照ください。 | 組み込みのリトライ機能はありません。未確認メッセージによってキューがブロックされ、メッセージの蓄積やサービス中断を引き起こす可能性があります。 |
認証 | カスタムユーザー名とパスワード、または Resource Access Management (RAM) の AccessKey ペアから生成された認証情報。詳細については、「静的ユーザー名とパスワード」および「RAM 認証情報」をご参照ください。 | カスタムユーザー名とパスワード |
アクセス制御 | オープンソースの権限モデルと RAM ポリシーベースの認可。詳細については、「権限管理」および「RAM アクセス制御」をご参照ください。 | オープンソースの権限モデル |
可観測性
機能 | ApsaraMQ for RabbitMQ | オープンソース RabbitMQ |
ダッシュボード | vhost、エクスチェンジ、キューレベルの組み込みメトリクスを提供します。Prometheus と Grafana の統合が事前設定されています。詳細については、「ダッシュボード」をご参照ください。 | 2 つのオプション: (1) 管理 UI を使用してメトリクスを取得しますが、ストレージと可視化レイヤーは独自に構築する必要があります。 (2) Prometheus と Grafana を手動でセットアップします。 |
メッセージトレース | コンソールベースのトレースビューで、メッセージのライフサイクル全体を表示します。キュー、メッセージ ID、または処理時間でクエリできます。詳細については、「メッセージトレース」をご参照ください。 | トレースデータはサーバー側のログファイルに書き込まれるため、クエリと根本原因の分析に時間がかかります。 |
AMQP コマンド
次の表は、ApsaraMQ for RabbitMQ とオープンソース RabbitMQ における BasicCancel AMQP コマンドの動作を比較しています。
項目 | ApsaraMQ for RabbitMQ | オープンソース RabbitMQ |
| コンシューマーのサブスクリプションをキャンセルします。すでに配信されたメッセージは再キューイングされます。 | コンシューマーのサブスクリプションをキャンセルします。すでに配信されたメッセージは Unacked 状態のままです。 |
この違いは、コンシューマーのキャンセル後のメッセージ配信のトラブルシューティングにおいて重要です。ApsaraMQ for RabbitMQ では、BasicCancel 後の再キューイングにより、未確認のメッセージが他のコンシューマーに再配信される可能性があります。オープンソース RabbitMQ では、これらのメッセージはチャネルが閉じられるか、タイムアウトするまで未確認のままです。
スケーラビリティと信頼性
項目 | ApsaraMQ for RabbitMQ | オープンソース RabbitMQ |
クラスタースループット | 固定の上限はありません。マスターレスの分散アーキテクチャにより、水平スケールアウトをサポートします。 | 単一ノードの容量によって制限されます。スケールアップにはハードウェアのアップグレードが必要です。 |
単一キューのスループット | 固定の上限はありません。各キューはノード間で水平にスケールします。 | キューをホストするノードによって制限されます。 |
接続 | クラスターとともにスケールします。ノードを追加することで、パフォーマンスを低下させることなく接続容量を増やすことができます。 | 単一マシンのリソースによって制限されます。 |
遅延メッセージ | 秒単位の精度、高スループット、すぐに利用可能 | プラグインのセットアップが必要 |
高可用性 | ストレージとコンピューティングの分離によるマルチ AZ 配置。障害が発生したコンピューティングノードは迅速に削除および分離できます。データは 3 重化して保存されます。 | ミラーキューまたはクォーラムキューに依存します。この実装はスプリットブレインの問題が発生しやすくなります。 |
メッセージの蓄積 | 大量のバックログがある場合でも安定したパフォーマンスを維持します。クラスターの通常動作は影響を受けません。 | 大量のバックログはノードのメモリを消費し、メモリ不足による障害を引き起こして、サービス中断につながる可能性があります。 |
弾力的なスケーリング | 必要に応じてクラスターノードを追加または削除することで、スケールアウトまたはスケールインできます。サーバーレスインスタンスはメッセージ量に基づいて課金されるため、事前のキャパシティプランニングが不要です。 | 容量はクラスター内の最大マシンによって制限されます。スケーリングにはハードウェアのアップグレードまたはクラスターの再パーティション化が必要です。 |
自己修復 | 組み込みの検査システムが、デッドロックとノード障害を自動的に検出して解決します。 | 自動化された自己修復機能はありません。手動での介入が必要です。 |
エクスチェンジ
ApsaraMQ for RabbitMQ は、オープンソース RabbitMQ と同じエクスチェンジタイプとプロパティをサポートしています。
プロパティ | ApsaraMQ for RabbitMQ | オープンソース RabbitMQ |
タイプ | direct、fanout、headers、topic、x-delayed-message、x-consistent-hash | direct、fanout、headers、topic、x-delayed-message、x-consistent-hash |
永続化 | 永続化と非永続化 | 永続化と非永続化 |
自動削除 | サポートされています | サポートされています |
内部 | サポートされています | サポートされています |
代替エクスチェンジ | サポートされています | サポートされています |
コンシステントハッシュエクスチェンジ | サポートされています | サポートされています |
キュー
ApsaraMQ for RabbitMQ は、キューレベルのインフラストラクチャに関する決定を抽象化します。すべてのキューは分散型の高可用性クラスター上で実行されるため、クラシックキューとクォーラムキューのタイプを選択したり、レプリケーションを手動で設定したりする必要はありません。
プロパティ | ApsaraMQ for RabbitMQ | オープンソース RabbitMQ |
キュータイプ | 分散 HA クラスター (設定不要) | 手動での選択が必要: クラシック (ミラーキュー) またはクォーラムキュー |
ノードの割り当て | フルマネージド、手動での割り当て不要 | 手動でのノード選択が必要 |
リトライポリシー | 消費タイムアウト時に自動再配信されます。詳細については、「リトライポリシー」をご参照ください。 | タイムアウトベースの再配信はありません |
永続化 | 永続化と非永続化 | 永続化と非永続化 |
最大長 / 最大長バイト / 最大メモリ内長 / 最大メモリ内バイト | 設定は不要です。メモリへの負荷なしで大量のメッセージの蓄積をサポートします。 | 無制限の蓄積によるメモリ不足による障害を防ぐために設定する必要があります。 |
配信制限 | デフォルト値は 16 (固定)。詳細については、「リトライポリシー」をご参照ください。 | 手動での設定が必要 |
デッドレターエクスチェンジ | サポートされています | サポートされています |
デッドレタールーティングキー | サポートされています | サポートされています |
単一アクティブコンシューマー | サポートされています。詳細については、「メッセージの順序付き消費」をご参照ください。 | サポートされています |
Action
The following table compares the behavior of the BasicCancel AMQP command between ApsaraMQ for RabbitMQ and open-source RabbitMQ.
Item | ApsaraMQ for RabbitMQ | Open-source RabbitMQ |
BasicCancel | Cancels the consumer subscription; already-delivered messages are requeued. | Cancels the consumer subscription; already-delivered messages remain in the Unacked state. |