1. 要件分析
1. 機能要件: 最も基本的な生成および消費モデルに加えて、MQ は同期呼び出しのサポートを提供するために REQUEST-REPLY モデルもサポートする必要があります。さらに、MQ が PUBLISH-SUBSCRIBE モデルを提供できる場合、イベントプロキシはもっとシンプルにできる
2. パフォーマンス要件: 今後 1 ~ 2 年の製品開発を考慮すると、メッセージ キューのスループットは 1W qps を超えることは予想されませんが、単一メッセージの遅延要件が高いため、1W qps を超えることが期待されます。できるだけ短く
3. 可用性の要件: オンライン サービスであるため、高可用性が必要ですが、少量のメッセージ損失は許容されます。
4. 使いやすさの要件: 学習コスト、初期開発および展開コスト、日々の運用および保守コストなどを含みます。
2. 水平比較
特性 | アクティブMQ | ラビットMQ | カフカ | ロケットMQ |
---|---|---|---|---|
生産者と消費者 | サポート | サポート | サポート | サポート |
発行-購読 | サポート | サポート | サポート | サポート |
要求と応答 | サポート | サポート | - | サポート |
APIの完全性 | 高い | 高い | 高い | 低 (静的構成) |
多言語サポート | サポートされていますが、JAVA が推奨されます | 言語に依存しない | サポートされていますが、JAVA が推奨されます | サポート |
単一マシンのスループット | レベル10,000 | レベル10,000 | 10万レベル | 単一マシンレベル 10,000 |
メッセージの遅延 | ミリ秒レベル | マイクロ秒レベル | ミリ秒レベル | ミリ秒レベル |
可用性 | 高(マスタースレーブ) | 高(マスタースレーブ) | 非常に高い (分散型) | 非常に高い (分散型) |
メッセージが失われました | - | 低い | 理論的には失われることはない | 理論的には失われることはない |
重複したメッセージ | - | 制御可能な | 理論的には重複が発生します | 重複を許可する |
文書の完全性 | 高い | 高い | 高い | 真ん中 |
クイックスタートを提供する | 持っている | 持っている | 持っている | なし |
最初の導入の難しさ | - | 低い | 真ん中 | 高い |
個人的な提案:
- あなたのスキルが平均的であれば、RabbitMQ の使用を検討できます。
- インフラストラクチャの研究開発力は強力なので、RocketMQ を使用するのは良い選択です。
- リアルタイム コンピューティングとログ収集: Kafka の使用
3.選び方
MQ | 説明する |
---|---|
ラビットMQ | Erlang 開発では、メッセージの蓄積に対するサポートが十分ではありません。大量のメッセージが蓄積されると、RabbitMQ のパフォーマンスは急激に低下します。RabbitMQ は、1 秒あたり数万から数十万のメッセージを処理できます。 |
ロケットMQ | Java で開発されており、インターネット用のクラスタリング機能が豊富です。オンライン サービスの応答遅延に対して多くの最適化が行われています。ほとんどの場合、ミリ秒レベルの応答を実現し、1 秒あたり数十万のメッセージを処理できます。 。 |
カフカ | Scala は豊富なログ機能と最高のパフォーマンスを備えて開発されていますが、1 秒あたりのメッセージ数がそれほど多くないビジネス シナリオでは、Kafka のレイテンシが比較的高くなるため、オンライン ビジネス シナリオには適していません。 |
アクティブMQ | Java 開発はシンプルで安定していますが、パフォーマンスは前の 3 つに比べて劣ります。小規模なシステムには問題ありませんが、お勧めできません。インターネットで主流のものを使用することをお勧めします。 |