100 日間の基盤構築の 17 日目 - メッセージ キューの入門
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
100 日間の基盤構築の 17 日目 - メッセージ キューの入門
基本概念
メッセージキューとは何ですか?
MQ:メッセージキュー
メッセージを保存するキュー。メッセージは、順番に消費されます (キュー先入れ先出し)。
メッセージングに関与する 2 つの当事者は次のように呼ばれます。 プロデューサー そして消費者 、プロデューサーはメッセージの送信を担当し、コンシューマーはメッセージの処理を担当します。
メッセージキューの用途は何ですか?
おなじみの 3 つのメリット:
- 非同期処理: 非同期処理はメッセージ キューを通じて実装され、対応するメッセージをメッセージ キューに送信した後、結果がすぐに返されるため、応答時間が短縮され、ユーザー エクスペリエンスが向上します。その後、システムはメッセージを消費します。
- ピーク クリッピング/電流制限: まず、短期間に高い同時実行性によって生成されたトランザクション メッセージをメッセージ キューに保存します。その後、バックエンド サービスが自身の機能に従ってこれらのメッセージをゆっくりと消費するため、バックエンド サービスが直接無効になることを回避できます。 -サービス終了。
- システムの結合を減らす: モジュール間に直接呼び出しがないため、モジュールの追加または変更は他のモジュールにほとんど影響を与えません。
エンタープライズアプリケーションのシナリオ:
- 分散トランザクションの実装: 分散トランザクションのソリューションの 1 つは MQ トランザクションであり、ほとんどの MQ でサポートされています。トランザクションにより、イベント ストリーミング アプリケーションは次のことを行うことができます。消費する、加工する、生産するメッセージ プロセス全体はアトミック操作として定義されます。
- シーケンス保証: データ順序に厳しい要件があるシナリオに適しており、ほとんどの MQ でサポートされています。
- 遅延/タイミング処理: メッセージは送信後すぐには消費されませんが、指定された時間が経過した後に消費されます。
- データ ストリーム処理: ビジネス ログ、監視データ、ユーザーの行動など、分散システムによって生成される大量のデータ ストリームについて、メッセージ キューはこれらのデータをリアルタイムまたはバッチで収集し、ビッグ データ処理エンジンにインポートして、効率的なデータ処理の実現 ストリームの管理と処理。
メッセージキューを使用するとどのような問題が発生しますか?
システム可用性の低下: システムの可用性がある程度低下するのはなぜですか? MQ に参加する前は、メッセージの損失や MQ のハングアップなどについて考える必要はありません。しかし、MQ を導入した後は、それについて考慮する必要があります。
システムの複雑さの増加: MQ に参加した後は、メッセージが繰り返し消費されないことを確認し、メッセージ損失を処理し、メッセージ配信の順序を確認し、その他の問題を解決する必要があります。
一貫性の問題: メッセージ キューは非同期実装を実現できると上で述べましたが、メッセージ キューによってもたらされる非同期により、実際にシステムの応答速度が向上します。しかし、メッセージの実際の消費者がメッセージを正しく消費しなかったらどうなるでしょうか?これにより、データの不整合が発生します。
共通メッセージキュー
カフカ
Kafka は LinkedIn のオープンソース バージョンです分散ストリーミングプラットフォーム、Apache のトップレベルのプロジェクトとなり、初期には大量のログを処理するために使用され、その後徐々にフル機能の高性能メッセージ キューに発展しました。
ストリーミング プラットフォームには 3 つの主要な機能があります。
- メッセージキュー: メッセージ ストリームのパブリッシュとサブスクライブは、メッセージ キューに似ているため、Kafka もメッセージ キューとして分類されます。
- レコードメッセージストリームのフォールトトレラント永続ストレージ: Kafka はメッセージをディスクに永続化し、メッセージ損失のリスクを効果的に回避します。
- ストリーミング処理プラットフォーム: メッセージがパブリッシュされたときに処理するために、Kafka は完全なストリーム処理ライブラリを提供します。
ロケットMQ
RocketMQ は、Alibaba がオープンソース化したクラウドネイティブの「メッセージ、イベント、ストリーム」リアルタイム データ処理プラットフォームであり、Kafka を利用しており、トップレベルの Apache プロジェクトとなっています。
RocketMQ のコア機能 (RocketMQ 公式 Web サイトからの抜粋):
- クラウド ネイティブ: クラウドとともに生まれ、クラウドとともに成長し、無制限の柔軟なスケーリング、K8 フレンドリー
- 高スループット: 兆レベルのスループットが保証され、マイクロサービスとビッグデータの両方のシナリオに対応します。
- ストリーム処理: 軽量、拡張性が高く、高性能で機能が豊富なストリーム コンピューティング エンジンを提供します。
- 財務グレード: 財務グレードの安定性。コアトランザクションリンクで広く使用されています。
- ミニマリスト アーキテクチャ: 外部依存性ゼロ、シェアードナッシング アーキテクチャ。
- 環境に優しい: マイクロサービス、リアルタイム コンピューティング、データ レイクなどの周囲のエコシステムとシームレスに接続します。
ラビットMQ
RocketMQ は、Alibaba がオープンソース化したクラウドネイティブの「メッセージ、イベント、ストリーム」リアルタイム データ処理プラットフォームであり、Kafka を利用しており、トップレベルの Apache プロジェクトとなっています。
RocketMQ のコア機能 (RocketMQ 公式 Web サイトからの抜粋):
- クラウド ネイティブ: クラウドとともに生まれ、クラウドとともに成長し、無制限の柔軟なスケーリング、K8 フレンドリー
- 高スループット: 兆レベルのスループットが保証され、マイクロサービスとビッグデータの両方のシナリオに対応します。
- ストリーム処理: 軽量、拡張性が高く、高性能で機能が豊富なストリーム コンピューティング エンジンを提供します。
- 財務グレード: 財務グレードの安定性。コアトランザクションリンクで広く使用されています。
- ミニマリスト アーキテクチャ: 外部依存性ゼロ、シェアードナッシング アーキテクチャ。
- 環境に優しい: マイクロサービス、リアルタイム コンピューティング、データ レイクなどの周囲のエコシステムとシームレスに接続します。
パルサー
Pulsar は、次世代のクラウドネイティブな分散メッセージ フロー プラットフォームで、元々は Yahoo によって開発され、トップレベルの Apache プロジェクトになりました。
Pulsar は、メッセージング、ストレージ、および軽量の機能コンピューティングを統合し、マルチテナント、永続ストレージ、およびマルチマシン ルームのクロスリージョン データ レプリケーションをサポートするコンピューティングとストレージの分離アーキテクチャ設計を採用しており、強力な一貫性、高スループット、低遅延を備えています。 、スケーラビリティなどのストリーミング データ ストレージ機能は、クラウド ネイティブ時代のリアルタイム メッセージ ストリーミング送信、ストレージ、およびコンピューティングに最適なソリューションとみなされます。
Pulsar の主な機能は次のとおりです (公式 Web サイトから抜粋)。
- これは、次世代のクラウドネイティブな分散メッセージ フロー プラットフォームです。
- Pulsar の単一インスタンスは複数のクラスターをネイティブにサポートし、コンピューター ルーム全体のクラスター間のメッセージ レプリケーションをシームレスに完了できます。
- リリースレイテンシとエンドツーエンドレイテンシが非常に短い。
- 100 万を超えるトピックにシームレスに拡張します。
- Java、Go、Python、C++ をサポートするシンプルなクライアント API。
- トピックの複数のサブスクリプション モード (排他、共有、フェイルオーバー)。
- メッセージの配信は、Apache BookKeeper が提供する永続的なメッセージ ストレージ メカニズムを通じて保証されます。
- 軽量のサーバーレス コンピューティング フレームワーク Pulsar Functions は、ストリーム ネイティブのデータ処理を実装します。
- Pulsar IO は、Pulsar Functions に基づくサーバーレス コネクタ フレームワークであり、Apache Pulsar との間でのデータの移動を容易にします。
- 階層型ストレージは、データが古くなったときに、ホット ストレージからコールド/長期ストレージ (S3、GCS など) にデータをオフロードできます。
上記の MQ の比較:
コントラストの方向 | まとめ |
---|
スループット | 10,000 レベルの ActiveMQ および RabbitMQ (ActiveMQ のパフォーマンスは最悪です) のスループットは、100,000 レベル、さらには 100 万レベルの RocketMQ や Kafka よりも一桁低いです。 |
可用性 | すべてが高可用性を実現できます。 ActiveMQ と RabbitMQ は両方ともマスター/スレーブ アーキテクチャに基づいており、高可用性を実現します。 RocketMQ は分散アーキテクチャに基づいています。 Kafka も分散されており、1 つのデータの複数のコピーが存在します。数台のマシンがダウンしても、データが失われたり利用できなくなったりすることはありません。 |
適時性 | RabbitMQ は Erlang に基づいて開発されているため、強力な同時実行機能、非常に優れたパフォーマンス、非常に低いレイテンシを備え、マイクロ秒レベルに達し、その他はミリ秒レベルに達します。 |
機能サポート | Pulsar は、より包括的な機能を備え、マルチテナンシー、複数消費モデル、および永続モードをサポートする、次世代のクラウドネイティブな分散メッセージ フロー プラットフォームです。 |
メッセージが失われました | ActiveMQ と RabbitMQ は損失の可能性が非常に低く、Kafka、RocketMQ、および Pulsar は理論的に損失 0 を達成できます。 |
要約:
- RabbitMQ は、スループットの点では Kafka、RocketMQ、Pulsar にわずかに劣りますが、Erlang に基づいて開発されているため、強力な同時実行機能、非常に優れたパフォーマンス、およびマイクロ秒レベルに達する非常に低い遅延を備えています。しかし、RabbitMQはErlangをベースに開発されているため、Erlangのソースコードレベルでの研究やカスタマイズを行う力を持つ国内企業はほとんどありません。ビジネス シナリオにそれほど高い同時実行要件 (100,000 または 100 万レベル) がない場合、これらのメッセージ キューの中で RabbitMQ が最初の選択肢となる可能性があります。
- RocketMQ と Pulsar は強力な一貫性をサポートしており、メッセージの一貫性要件が高いシナリオで使用できます。
- RocketMQ は Alibaba によって作成された Java オープン ソース プロジェクトであり、ソース コードを直接読み取って、自社の MQ を Alibaba の実際のビジネス シナリオでテストできます。
- Kafka の特徴は実際には非常に明白です。つまり、提供するコア機能は少ないものの、超高スループット、ミリ秒レベルのレイテンシ、極めて高い可用性と信頼性を提供し、ディストリビューションは任意に拡張できます。同時に、Kafka が超高スループットを確保するには、少数のトピックをサポートすることが最善です。 Kafka の唯一の欠点は、メッセージが繰り返し消費される可能性があることですが、ビッグ データとログ収集の分野では、このわずかな影響は無視できます。 -時間のコンピューティングとログの収集。リアルタイム コンピューティング、ログ収集、およびビッグ データ分野のその他のシナリオの場合、Kafka の使用は業界標準であり、コミュニティは非常に活発であり、言うまでもなくポルノ的なものではありません。それは世界中でこの分野ではほぼ事実上の標準となっています。
エンタープライズレベルの自社開発MQに関する簡単な調査
Alibaba 自社開発: RocketMQ、RabbitMQ
テンセント自社開発: TDMQ、CMQ
百度の自己調査: 調査予定
バイト自己研究: BMQ
Meituan が自社開発: Mafma
Qunar.com による自社開発: QMQ
JD.com が自社開発した: JMQ
その他は調査対象です。 。