Apache RocketMQ、クラウドネイティブのユニファイド メッセージング エンジンを構築

この記事は、2023 Yunqi Conference で Lin Qingshan が行った基調講演「Apache RocketMQ Cloud Native Unified Messaging Engine」を編集したものです。

Apache RocketMQ の概要

メッセージキューの進化の傾向

オペレーティングシステム、データベース、ミドルウェアは基本ソフトウェアのトロイカであり、メッセージキューは最も古典的なミドルウェアの1つであり、30年以上の歴史があります。彼の開発は主に次の段階を経ました。

第一段階、2000年以前。最初のメッセージ キューは 1980 年代の情報バスであり、ソフトウェア間の通信問題を解決するためにパブリッシュ/サブスクライブ モデルが最初に提案されました。1990 年代には、IBM、Oracle、Microsoft が立ち上げた国際的な商用ソフトウェア巨人の時代でした。彼らは独自の MQ を開発しており、その最も代表的なのが IBM MQ です。これは高価で、主に大規模な金融、電気通信、その他の企業などのハイエンド企業を対象としています。このタイプの商用 MQ は通常、ハイエンドのハードウェアを使用し、次の形式で提供されます。オールインワンのソフトウェアとハ​​ードウェア マシン、および MQ 独自のソフトウェア このアーキテクチャはスタンドアロン アーキテクチャです。

フェーズ II、2000 ~ 2007 年。2000 年代に入ると、第 1 世代のオープン ソース メッセージ キューが登場し、JMS と AMQP という 2 つの主要な標準が誕生し、対応する 2 つの実装として ActiveMQ と RabbitMQ が誕生し、初期のオープン ソース メッセージ キュー テクノロジを主導しました。オープン ソースはメッセージ キューの人気を大幅に高め、使用の敷居を下げ、テクノロジーを誰でもアクセスできるようにして、徐々にエンタープライズ レベルのアーキテクチャの標準構成になりました。現在と比較すると、このタイプの MQ は主に従来のエンタープライズ レベルのアプリケーションや小規模なトラフィック シナリオを対象としており、水平方向の拡張機能は比較的弱いです。

第 3 段階は 2007 年から 2017 年までです。PCインターネットとモバイルインターネットが爆発的に発展しています。従来のメッセージ キューでは数億ユーザーのアクセス トラフィックと大量のデータの送信に耐えられないため、分散アーキテクチャを完全に採用し、強力な水平拡張機能を備えたインターネット メッセージ ミドルウェアが誕生しました。 Kafka と RocketMQ が含まれます。また、クローズド ソースとして Taobao Notify もあります。また、Kafka の誕生により、メッセージング ミドルウェアはメッセージング分野からストリーミング分野に拡張され、分散アプリケーションの非同期デカップリング シナリオからビッグ データ分野のストリーム ストレージおよびストリーム コンピューティングのシナリオまで拡張されました。

第4期、2014年~現在。クラウド コンピューティング、IoT、ビッグデータが新たな波をもたらします。

Apache RocketMQ 開発の歴史

メッセージキュー業界の発展に伴い、Apache RocketMQ 自体も 10 年間にわたって発展しており、「インターネットで誕生」と「クラウド コンピューティングで成長」の 2 つの段階に分けることができます。

最初の段階は、RocketMQ の 0 から 1 への開発と、Alibaba 内での大規模な実装です。2012 年に超大規模電子商取引インターネット アーキテクチャをサポートするために、Alibaba ミドルウェアが RocketMQ を開発し、製品誕生の初期段階でオープンソース化し、2017 年に RocketMQ が Alibaba のメッセージング テクノロジ システムを統合しました。

第 2 段階はクラウド コンピューティングです。RocketMQ は 2016 年にクラウドに移行しました。これは、パブリック クラウド SaaS 形式を提供する業界初のオープン ソース メッセージ キューでもあります。2016 年に Alibaba は RocketMQ を Apache に寄贈し、2017 年に開発されて卒業し、中国初の TLP インターネット ミドルウェアとなりました。RocketMQ は、クラウド コンピューティングとオープンソースの両輪によって推進され、Alibaba の外でも本格的なスケールを実現し、数千の業界のデジタル変革の完了を支援し、その製品機能もさらに飛躍しました。5.0 は 2022 年に正式にリリースされ、Apache RocketMQ は正式にクラウドネイティブ時代に突入します。

Apache RocketMQ 5.x ユニファイド メッセージング エンジン

Apache RocketMQ 5.X ビジネス パノラマ

クラウド時代の多様なユーザー ニーズに応えるために、RocketMQ 5.0 は、元のインターネット ビジネス メッセージ ミドルウェアから「メッセージ、イベント、ストリーム」のハイパーコンバージド処理プラットフォームに拡張し、より包括的な機能を解放しました。

メッセージング分野では、クラウド ネイティブ テクノロジー、より優れた弾力性のあるアーキテクチャ、高可用性機能を全面的に採用しています。

イベント分野では、CloudEvent 仕様と新しいイベント中心の製品インターフェイスをサポートし、顧客がビジネス間および組織間を越えたデジタル ビジネス エコシステムを構築できるようにします。

ストリーミング分野では、ストリーミング ストレージによりバッチ機能が強化され、データ スループットが大幅に向上します。論理キュー機能が追加され、論理リソースと物理リソースが分離され、ストリーミング シナリオでのシームレスなスケーラビリティが実現します。新しいストリーミング データベース RSQLDB を追加して、リアルタイム イベントを提供します。ストリーム処理ストリーム分析機能。

RocketMQ は、統合されたデバイス クラウド アーキテクチャに基づいて、元の接続アプリケーションから IoT デバイスの接続に至るまで、完全な IoT メッセージ キュー機能を実装します。同時に、RocketMQ 5.0 は、最小限のリソース消費と運用保守コストでサービスを構築でき、エッジ コンピューティングに適したミニマリスト アーキテクチャの原則も維持し続けます。

メッセージとフローの統合

Apache RocketMQ がユニファイド メッセージング エンジンであるのはなぜですか? Apache RocketMQ は主に次の点で統合されています。

最初の統合は、Apache RocketMQ がメッセージとストリームを統合するシナリオです。この比較表から、メッセージとフローの違いがわかります。一般的に言及されるメッセージ シナリオとキュー シナリオは、ビジネス統合に焦点を当てています。このシナリオでは、RocketMQ の主な役割は、ビジネス アプリケーションを接続し、トランザクション システムの分離など、ビジネス アーキテクチャの上流と下流のシステムを分離することです。このタイプのシナリオは主にオンライン ビジネスであり、ユーザーが購入などの特定のビジネス プロセスをトリガーします。

ユーザー エクスペリエンスを確保するために、メッセージング システムは低遅延を優先する必要があります。このシナリオでは、同期通信 RPC に対応し、メッセージング システムが非同期通信を担当します。メッセージ消費レベルでは、メッセージ データに基づいて対応するビジネス ロジックを実行し、次のビジネス プロセスをトリガーすることが重要です。各メッセージは独立してステートレスに処理されます。ビジネスのデジタル シナリオに焦点を当てたデータベース OLTP と比較することができ、1 回の操作でのデータ量が少なく、オンライン トランザクションに使用されます。

ストリーミング シナリオを見ると、主にデータ統合、さまざまなデータ コンポーネントの接続、データ分散、データ アーキテクチャの上流システムと下流システムの分離に重点が置かれています。たとえば、ログ ソリューションはログ データを収集し、ETL を実行してログ データを検索エンジン、ストリーム コンピューティング、データ ウェアハウスなどに配信します。ログに加えて、データベースの Binlog 配布とページのクリック ストリームも一般的なデータ ソースです。このシナリオでは、オフライン ビジネスであるため、低遅延に対する要求は弱く、大量のスループット負荷に重点を置いています。さらに、メッセージ消費段階では、もはや単一のメッセージ処理の問題ではなく、バッチ ダンプまたはバッチ フロー計算の問題になります。デジタル ビジネス シナリオに焦点を当て、データベースにおける OLAP に相当し、1 回の操作でのデータ量が多く、オフライン分析シナリオで使用されます。

具体的には、RocketMQ はどのようにしてメッセージとストリームの統合を実現するのでしょうか?

これは主に、プロデューサー、コンシューマー、トピック、トピック論理パーティション MessageQueue を含むドメイン モデルの統合に反映されます。メッセージとフローのさまざまなシナリオに対応するために、統合ドメイン モデルの下でさまざまなアクセス モードが使用されます。

メッセージ シナリオでは、クライアントはトピックのみを認識し、トピックにメッセージを送信し、サブスクリプション関係に基づいてトピック メッセージを消費し、対応するビジネス ロジックをトリガーし、消費の成功または失敗を返します。消費が失敗した場合は、再試行されます。

ストリーミング シナリオでは、メッセージ データのアクセス モードが異なります。データ統合シナリオで使用されるため、大規模なデータ統合には必然的にデータ シャーディングが必要となり、上流と下流のデータ システムはデータ シャーディングに基づいて接続されます。メッセージの読み取りと書き込みの方法では、読み取りと書き込みのトピックを指定するのではなく、トピックのシャード、つまり読み取りと書き込み操作のキューを指定します。ストリーム ストレージ システムとして、ダウンストリーム コンシューマは通常、ステートフル コンピューティング用のストリーム コンピューティング エンジンです。ストリーム コンピューティング エンジンのフォールト トレラントな処理をサポートするには、チェックポイント メカニズムをサポートする必要があります。これは、ストリーム コンピューティング エンジンに redolog を提供するのと同様で、キューの位置に従ってメッセージを再生し、メッセージの状態を復元できます。ストリームコンピューティング。また、シャード内での順序付けも必要であり、同じキーを持つデータは同じシャードにハッシュされ、keyby 操作の実装に使用されます。

これは、ストリーム ストレージ アクセス モードとメッセージ アクセス モードの違いです。メッセージング シナリオでは、ユーザーはトピック リソースに注意を払うだけでよく、キューや場所などの概念を理解する必要はありません。

ストリーミング シナリオでは、データ型の変更という非常に重要な変更がもう 1 つあります。簡単に比較すると、業務統合シナリオでは、メッセージデータは受注業務や物流業務などのビジネスイベントを伝達するものであり、データ規模は小さいものの、特に各データの価値が高いのが特徴です。単一トランザクションに対して、オンライン、短くて高速なアクセス モードを優先します。

ストリーミング シナリオでは、より非トランザクション データになります。たとえば、ユーザー ログ、システム モニタリング、一部の IoT センサー データ、Web サイトのクリック ストリームなどです。データ規模は桁違いに増大しているが、1個のデータの価値が相対的に低く、アクセス形態がオフライン一括送信に偏っているのが特徴である。したがって、ストリーミング シナリオでは、RocketMQ ストレージを高スループットのためにさらに最適化する必要があります。

RocketMQ 5.0 では、エンドツーエンドのバッチ メッセージが導入されています。クライアントから開始される送信フェーズでは、メッセージがクライアント上で特定の数にバッチ処理され、1 つの RPC リクエストでブローカーに直接送信されます。ブローカーのストレージ段階では、メッセージのバッチ全体が直接保存され、バッチ インデックス作成テクノロジを使用すると、メッセージのバッチに対して 1 つのインデックスのみが構築されるため、インデックスの構築速度が大幅に向上します。消費段階では、データのバッチ全体も消費者側に読み取られ、最初に解凍操作が実行され、最後に消費ロジックが実行されます。このようにして、ブローカーのメッセージ全体の TPS を元の 100,000 レベルから 100 万レベルに増やすことができます。

端末とクラウドの一元化

2つ目の統合は、エンドとクラウドの統合で、エンドはIoTデバイスやモバイル端末を指し、クラウドはクラウドサービスやアプリケーションを指します。まず、モノのインターネットのシナリオとは何なのか、そしてモノのインターネットにおいてメッセージがどのような役割を果たすのかを理解しましょう。モノのインターネットは間違いなく近年最も注目されている技術トレンドの 1 つであり、多くの研究機関や業界レポートがモノのインターネットの急速な発展を提案しています。

  • IoT デバイスの規模は爆発的に増加し、2025 年には 200 億台以上に達すると予想されています。
  • モノのインターネットのデータ規模、モノのインターネットからのデータの増加率は 28% 近くに達しており、将来的にはリアルタイム データの 90% 以上がモノのインターネット シナリオからのものになるでしょう。これは、将来的にリアルタイム ストリーム データ処理のデータ型に大量の IoT データが存在することを意味します。
  • 重要なトレンドはエッジ コンピューティングです。将来的には、データの 75% が従来のデータ センターやクラウド環境の外で処理されるようになります。ここでのエッジとは、データ ソースに近い店舗、工場、電車などの場所を指します。 。

この図から、モノのインターネットのシナリオにおけるメッセージの役割がわかります。

1 つ目の役割は接続であり、通信を担当し、センサー データのレポート、クラウド コマンドの発行など、デバイス間の通信、およびデバイスとクラウド アプリケーション間の通信をサポートし、IoT アプリケーション アーキテクチャをサポートし、クラウドとエッジ デバイスを接続します。

2 番目の機能はデータ処理です​​。IoTデバイスは継続的にデータ ストリームを生成します。機器のメンテナンスや高温警告など、リアルタイムのストリーム処理が必要なシナリオが多数あります。MQ のイベント ストリーム ストレージとストリーム コンピューティング機能に基づいて、モノのインターネット シナリオのデータ アーキテクチャを構築できます。

完全な IoT ソリューションでは、エンドとクラウドの両方の連携が必要になります。エンドはデータの収集とデバイス命令の実行に使用され、クラウドはデータの保存、データの分析、複雑なビジネス ロジックの実行に使用されます。したがって、デバイスとクラウドの統合を実現するために、MQTT サブ製品が RocketMQ 5.0 でリリースされました。3 つの主要な機能があります。

  1. IoTの標準プロトコルであるMQTTを採用しており、IoTの脆弱なネットワーク環境や低い計算能力を考慮して設計された、非常に合理的なプロトコルです。同時に、複数のサブスクリプション モードと複数のメッセージ QoS (最大 1 回、少なくとも 1 回、1 回のみ、1 回のみなど) をサポートする多くの機能を備えています。そのドメイン モデル設計には、メッセージ、トピック、パブリッシュとサブスクライブなどの概念も含まれており、特に RocketMQ と一致し、クラウド統合 RocketMQ 製品フォームを構築するための基盤を築きます。
  2. デバイスとクラウドの統合アーキテクチャを採用しており、ドメイン モデルが近く、RocketMQ がストレージ層として使用されているため、各メッセージのコピーが 1 つだけ保存され、このメッセージは IoT デバイスとクラウド アプリケーションの両方で使用できます。さらに、RocketMQ 自体は自然なストリーム ストレージであり、ストリーム コンピューティング エンジンは IoT データのリアルタイム分析をシームレスに実行できます。メッセージはさまざまなアクセス シナリオ (サーバー側の RocketMQ、デバイス側の MQTT など) から送信されますが、コピーが 1 つだけ書き込まれてコミットログに保存され、その後、複数の需要シナリオのキュー インデックスが配布されます。 、サーバー シナリオ (RocketMQ) はレベルに従うことができます。トピック キューは従来のサーバー側の消費に使用され、デバイス側のシナリオは MQTT マルチレベル トピックおよびワイルドカード サブスクリプションに従ってメッセージを消費できます。このようにして、同じストレージ エンジンに基づいて、IoT シナリオでのサーバー アプリケーションの統合とメッセージの送受信をサポートし、エンドクラウドの統合を実現できます。
  3. オリジナルの RocketMQ の 10,000 レベルのキュー機能を 100 万レベルのキュー機能に改善しました。たとえば、Kafka のようなメッセージ キューでは、各トピックは独立したファイルですが、トピックの数が増えるとメッセージ ファイルの数も増加し、シーケンシャルな書き込みがランダムな書き込みに変質し、パフォーマンスが大幅に低下します。RocketMQ は Kafka に基づいて改良されています。Commitlog ファイルを使用してすべてのメッセージ コンテンツを保存し、CQ インデックス ファイルを使用して各トピック内のメッセージ キューを表します。CQ インデックス データは比較的小さいため、ファイルの増加はIO への影響は大きくなりますが、はるかに小さいため、キューの数は 100,000 に達する可能性があります。ただし、この端末デバイスのキュー シナリオでは、100,000 レベルのキューの数はまだ少なすぎます。さらに数を一桁増やして、100 万レベルのキューの数に達することを期待しています。 CQインデックス配信を行い、100万レベルを達成するために導入されたエンジンです。

メッセージとイベントの統合

メッセージとイベントの統一である 3 番目の統一があります。

その前に、まずイベント駆動とは何かを理解しましょう。イベント駆動型は本質的に、異なるモジュールと異なるシステム間の結合を最小限に抑えることができるソフトウェア設計パターンです。

以下は、一般的なイベント駆動型のアーキテクチャ図です。まず、イベント プロデューサーがイベントを EventBroker に送信し、次に EventBroker がイベントをイベント処理のために対応するコンシューマーにルーティングします。イベント処理は柔軟に拡張でき、イベント コンシューマはいつでも追加または削除でき、イベント プロデューサーはこれについて透過的です。

さまざまなイベント駆動テクノロジーが数十年前に登場したため、イベント駆動アーキテクチャは実際には非常に古典的な設計パターンです。たとえば、デスクトップ クライアント プログラミング フレームワークでは、ボタンをクリックすると onclick イベントをトリガーでき、開発者はイベントに応答するビジネス ロジックを作成します。プログラミング言語では、コールバックや関数などのイベント駆動型のコード パターンが採用されることがよくあります。ハンドラー; 分散への参入 システムの時代には、システム間の通信とコラボレーションにもイベント駆動型のアプローチが採用されるでしょう。

この図から、イベント ドリブン アーキテクチャは実際にはメッセージ ベースのアプリケーション デカップリングとそれほど変わらないことがわかり、本質的にデカップリングの問題を解決します。メッセージのパブリッシュとサブスクリプションであっても、イベントの生成と消費であっても、それはすべてコードの分離とシステムの分離のためです。メッセージ キューは技術的な実装であり、ほとんどの EventBroker はメッセージ キューに基づいて実装されていますが、イベント ドリブンはアーキテクチャ上の概念です。

イベント ドリブンとメッセージ ドリブンの最大の違いは、イベントは特別な種類のメッセージであり、特定の特性を満たすメッセージのみをイベントと呼ぶことができるということです。

たとえば、上の図を考えてみましょう。メッセージは、多くのサブクラスを持つ抽象クラスのようなもので、最も重要なものはコマンドとイベントです。信号機を例にとると、信号機にオープンメッセージを送信することは一種のコマンドであり、信号機はこのコマンドを受け付けて信号機を点灯させます。信号灯が点灯した後、信号灯が青に変わったというメッセージを送信するのは一種のイベントです。

イベントには、次の 4 つの主な特徴があります。

  1. それは、すでに起こって事実になったことを表す不変の出来事です。
  2. イベントには時間の概念があり、同じエンティティに対してイベントの送信は連続的に行われます。たとえば、信号灯は緑、黄、赤などのイベントを順番に送信します。
  3. イベントは予測不可能です。これが、EDA アーキテクチャが最大限の分離を達成できる理由です。イベント ジェネレーターは、誰がイベント コンシューマであるか、またはイベントをどのように消費するかを気にしません。
  4. イベント ドライバーは完全に分離されており、下流のコンシューマーがイベントをどのように利用するかは予想できないため、イベントは具体的であり、下流のコンシューマーが必要なものを取得できるように、できるだけ詳細な情報を含める必要があります。これがメッセージとイベントの違いです。

サーバーレス化

サーバーレスのトレンド

サーバーレスは、次世代のクラウド ネイティブの代表的なテクノロジーであると考えられています。クラウド ネイティブの本質は、一連の技術システムと方法論を通じて顧客がクラウドをより良く利用できるように支援し、クラウド コンピューティングの恩恵を完全に解放し、顧客が次のことを実現できるようにすることです。クラウド コンピューティングを使用して、より効率的で低コストのデジタル トランスフォーメーションを実現します。クラウドネイティブ テクノロジーに関しては、マイクロサービスやコンテナ化などについてよく耳にします。マイクロサービスは、アプリケーション アーキテクチャの概念の革新に焦点を当てており、マイクロサービスを使用して高いビジネスの凝集性と低結合を実現し、それによって研究開発の効率、コラボレーションの効率、ビジネスの機敏性を向上させます。一方、コンテナ化はアプリケーションの運用と保守のレベルに関係し、コンテナ化は相違点を保護するために使用されます。 K8s プラットフォームの助けを借りて、アプリケーションの運用保守効率とリソース使用率も改善できます。

クラウド ネイティブにおけるサーバーレスの意味は、基本的なテクノロジーが沈下し、クラウド サービス インターフェイスが上昇する傾向にあるため、基本的に顧客は基盤となるテクノロジーや物理リソースを気にせずにビジネスの研究開発に集中できるようになるということです。

下の図に示すように、クラウド コンピューティングが登場する前、ユーザーはビジネスの研究開発を行う前に、独自の IDC を構築し、物理マシンを購入し、仮想化し、ミドルウェアを構築する必要があり、多くの時間、エネルギー、リソースが費やされます。ビジネスとは何の関係もないプロジェクト。クラウド参入後はクラウドベンダーがインフラを提供することが多くなり、初期のIaaSではクラウドベンダーのコンピューティング、ストレージ、ネットワークリソースを直接利用し、PaaSでは自社でデータベースやミドルウェアを構築する必要がなくなりました基本的なソフトウェア サービス: クラウド コンピューティングがサーバーレス段階に進化した現在、顧客はビジネス コードの開発にエネルギーの大部分を完全に集中させています。

クラウド サービス ベンダーにとって、サーバーレス クラウド製品も、オブジェクト ストレージ、ファンクション コンピューティングなどの初期のいくつかの製品から、サーバーレス メッセージ キュー、マイクロサービス、データベース、検索、ビッグデータ製品など

包括的なサーバーレス アプリケーション シナリオ

サーバーレス時代に入り、サーバーレスをフルに活用する顧客はメッセージ キューにどのようなシナリオの変化をもたらすでしょうか?

  • たとえば、アプリケーション側では、ますます多くのアプリケーションが自己購入した ECS にデプロイされるのではなく、サーバーレス コンテナー、アプリケーション エンジン、およびファンクション コンピューティング上で直接ホストされ、クラウド サービスはビジネス トラフィックやビジネス トラフィックに基づいて柔軟なスケーリングを自動的に実行します。対応するメッセージング サービスも、メッセージ トラフィックに応じて柔軟に拡張できなければなりません。
  • 車両のインターネット メッセージング ソリューションのシナリオでは、自動車には毎日朝と夕方のピークがあり、上流と下流のメッセージ トラフィックにも明らかなピークと谷があります。車両のインターネットの顧客は、ピークに備えてメッセージング リソースを事前購入する必要はありません。トラフィックは発生しますが、実際のメッセージ量に応じて支払います。
  • モバイル アプリのプッシュ シナリオでは、多数の接続を維持する必要性、時折ピークに達するメッセージ プッシュ、極度に小さいメッセージ ストレージ スペースなど、リソース指標のより多くの側面にも直面することになります。 、ストレージ、およびネットワーク バインディング メッセージの代わりに、接続数、メッセージ トラフィック、ストレージ容量に対して個別に支払います。
  • コアの弾力性機能に加えて、メッセージ キューのコア アーキテクチャ シナリオ「イベント ドリブン」が、サーバーレス時代の最も重要なアーキテクチャ パターンになりました。イベント ドリブン アーキテクチャは、より機敏でスケーラブルで回復力のあるサーバーレス アプリケーションの開発に役立ちます。サーバーレス R&D パラダイム。したがって、サーバーレス オールクラウド開発モデルでは、顧客はメッセージ キューのサービス インターフェイスを上位に移動し、「イベント バス」の機能を持たせる必要があることを望んでいます。お客様は、すぐに使用できるサーバーレス クラウド サービスだけでなく、すぐに使用できるイベント駆動型の統合サービスも必要としており、これまでのように統合されたグルー コードを記述する必要がなくなり、研究開発の効率がさらに向上します。ローコードとノーコードへの移行。たとえば、クラウド製品イベント統合では、OSS ファイル アップロード イベントがイベント バスに送信され、ユーザーはこのイベントをサブスクライブし、関数コンピューティングに基づいてファイル処理と応答イベントを実行して、サーバーレス コンピューティング能力を推進します。

サーバーレスのトレンドに直面して、RocketMQ 5.0 は製品形式から技術アーキテクチャに至るまで大幅な進化を遂げました。

サーバーレス アプリケーション用の新しい SDK

アプリケーションがサーバーレス テクノロジを広範囲に使用すると、トラフィックの変化に応じてアプリケーションのインスタンスの数が動的かつ弾力的に拡張されます。過去のシナリオと比較して、インスタンスの数は非常に頻繁に変化するため、メッセージの負荷分散がより大きな課題になります。送受信です。

まず、実動リンクの負荷分散を見てみましょう。プロデューサは、サービス検出メカニズムを通じて、トピックのデータ断片化と対応するブローカー アドレスを知っています。そのサービス検出メカニズムは比較的シンプルで、デフォルトでは RoundRobin を使用してポーリングし、各トピック キューに送信し、Broker クラスタのトラフィック バランスを確保します。プロデューサは完全にステートレスであるため、どれほど柔軟なスケーリングであっても大きな影響はありません。

コンシューマの負荷分散を見てみましょう。比較的言えば、それはプロデューサーよりも複雑です。古いモデルはキューレベルの負荷分散です。コンシューマはトピック内のキューの合計数と、同じ ConsumerGroup の下にあるインスタンスの数を知っています。分散アルゴリズムは一貫したハッシュ方式に似ており、各コンシューマ インスタンスが対応するキューをバインドし、そのキューにバインドされたメッセージのみを消費することができます。各キュー内のメッセージは 1 つのコンシューマ インスタンスによってのみ消費されます。このモデルの最大の欠点は負荷の不均衡であり、コンシューマ インスタンスはキューにバインドされ、一時的なステータスを持つ必要があります。アプリケーション インスタンスの数が頻繁に変化すると、この負荷の不均衡によりアプリケーションのサーバーレス拡張が非効率になり、拡張の新しい段階でメッセージ トラフィックを共有できなくなります。図に示すように、トピックには 2 つのパーティションがあります。3 番目のノードを拡張すると、空の実行が発生します。トピックが 3 つのパーティションに拡張され、その後、コンシューマ インスタンスが 2 にスケールバックされると、コンシューマ インスタンスの 1 つが 3 つのポイントを持ちます。 2 番目に、トラフィックが過負荷になっています。

したがって、RocketMQ5.0 では、メッセージ粒度の負荷分散メカニズムが導入され、キューをバインドする必要がなく、メッセージがコンシューマ クラスタ内でランダムに分散されるため、コンシューマ クラスタの負荷分散が確保されます。さらに重要なことは、このモデルはフルリンク サーバーレス シナリオにより一致しており、ブローカー マシンの数、トピック キューの数、およびコンシューマ インスタンスの数は完全に分離されており、個別に拡張および削減できることです。

サーバーレスのイベント駆動型の課題

前の章では、メッセージとイベントの統合について説明しましたが、イベントとはビジネス セマンティクスを含むメッセージです。典型的なイベント駆動のケースを見てみましょう。

下図はメッセージキュー RocketMQ をベースに実装された取引システムで、イベント駆動型アーキテクチャを採用しており、「注文」イベントを中心に取引業務を完結させます。イベントプロデューサーはトランザクションセンターであり、コンシューマーはトランザクションの下流システムです。たとえば、注文作成イベントが送信されると、ショッピング カートがイベントに応答し、以前の追加購入が削除されます。注文支払いイベントが発生すると、会員システムがイベントに応答して顧客にポイントを追加し、物流システムはイベントに応答し、その後の配送とフルフィルメントのリンクを実行します。取引システム全体は「イベント駆動型」マイクロサービスから構築されています。

従来のメッセージ キューに基づくイベント駆動型のソリューションは、組織や部門内での適切な選択です。しかし、サーバーレス時代には多くの新たな課題に直面しています。

  • SaaS プラットフォーム (DingTalk) とそのパートナーなど、複数の異なる組織の連携によってビジネス デジタル ソリューションが完成するケースが増えています。DingTalk プラットフォームでは、ビデオ会議、スケジュール、アドレス帳、承認などのさまざまなイベントが公開されます。ストリーミングとピン留めは、下流パートナーによってこれらのイベントを消費し、業界アプリケーションを開発するために使用されます。この種の新しいデジタル ソリューションでは、イベントのプロデューサーとコンシューマーが別の企業に属していることが多く、開発者は集中的なコミュニケーションを行うことができず、低コストで「イベント」の定義、形式、使用法を理解することができません。現在のモデルは、開発者間のコミュニケーションと会社の内部ドキュメントに過度に依存しています。
  • 企業が異なれば、異なるメッセージ キューを使用する、イベント プロデューサーが RocketMQ を使用する、イベント コンシューマーが RabbitMQ を使用するなど、異なるメッセージ送信プロトコル (HTTP または AMQP など) を使用するなど、異なるテクノロジ システムが使用されることがよくあります。
  • イベント コンシューマは多様で、同じビジネス イベントであっても、イベント コンシューマは特定のサブタイプのみを必要とする場合や、同じイベントであっても、一部のフィールドにしかアクセスできない場合があります。
  • すぐに使用できるイベント統合機能の欠如: 顧客はクラウドを十分に使用した後、OSS アップロード イベントへの応答や、ファイル処理のための関数コンピューティングの使用など、さまざまなクラウド製品イベントに応答する必要があります。この機能は、従来のメッセージ キューにはありません。

サーバーレスのイベント駆動型テクノロジーでは、「イベント」自体のみに焦点を当て、伝送プロトコル、SDK、生産モデルと消費モデルなどのテクノロジー実装の詳細を分離する、より徹底的な分離が必要です。

サーバーレスのイベント駆動型設計

メッセージ キューに基づいたサーバーレス イベント ドリブンを実現するために、「イベント ドリブン」シナリオのサービス インターフェイスが上位に移動され、「イベント」ドメイン モデルを中心に再設計されます。

一番左はイベント ソースです。イベントにはプラットフォーム間で生成および消費できる機能が必要であるため、CNCF の CloudEvents がイベント フォーマットとして使用されます。これは業界のイベントの事実上の標準であり、この標準によってイベントの宣言が簡素化され、サービスやプラットフォーム間でのイベントの相互運用性が向上します。

イベントは組織全体で使用される可能性があるため、これらのさまざまなイベント ソースをこのイベント センターに登録できるようにするには、統合されたイベント センターが必要です。消費者にとって、これはイベント ストアのようなもので、興味のあるイベントを選択して購読することができます。

イベント コンシューマが消費ロジックを書き始めるとき、開発者もイベントの形式をより明確に理解する必要があり、イベントのコンテンツが何であるか、そこにどのようなフィールドがあるか、そしてそれらの意味が何であるかを知る必要があります。正しい消費ビジネスロジックです。そのため、イベントバスにはスキーマセンターも提供されており、このスキーマセンターにより、コンシューマーはイベントソースのイニシエーターと通信することなく、イベントの形式を一目で理解することができ、全体の効率が大幅に向上しました。

さらに遡って、イベント消費段階に至ります。イベント コンシューマには多くの種類があり、異なるコンシューマが異なるイベント タイプに注目するため、イベント バスは豊富なフィルタリング ルールを提供する必要があります。複数のコンシューマが同じイベントに興味がある場合でも、必要なのはイベントの一部だけである可能性があり、イベント バスはイベントを変換する機能も提供します。これは RocketMQ5.0 のイベント駆動型機能の抽象化です。

サーバーレスイベントドリブンの新しい形式

上記の新しい設計に基づいて、RocketMQ をイベント ストレージのコアとして使用して、新しいイベント バス EventBridge が実装されます。

製品インターフェイスでは、イベント駆動型ビジネス向けに抽象化レイヤーが実装され、コア ドメイン オブジェクトがメッセージから CloudEvents に変わります。統一されたイベント標準に基づいて、イベント駆動型のデジタル エコシステムを構築します。

イベント ソースは多様で、クラウド製品イベント、データ フロー イベント、SaaS プラットフォーム イベント、アプリケーション カスタム イベント、または一般的な WebHook などがあります。もちろん、そのイベント ターゲットも多様です。イベントは、イベント ルール エンジンを通じてさまざまなコンシューマにルーティングされます。典型的なコンシューマには、関数コンピューティングおよびメッセージ システム (さまざまなメッセージ キュー テクノロジを使用してプロデューサとコンシューマを分離するために使用されます)、ストレージ システム、ストリーム コンピューティングが含まれますエンジン、一般的な Webhook、さらには音声、SMS、メールなどのメッセージ通知まで。イベント駆動型アーキテクチャは、ハイブリッド クラウドおよびマルチクラウド デジタル システムの構築に適しています。

EventBridge を通じて、徹底したイベント駆動型のアーキテクチャが実現され、真に「イベント」自体のみを考慮し、プロデューサーとコンシューマーは、組織的なデカップリングと技術的なシステムのデカップリングを含む、より完全なデカップリングを実現します。

サーバーレスメッセージングカーネルの再構築

前述のものは主に、一部のサーバーレス アプリケーション、サーバーレス イベント駆動型アーキテクチャ、RocketMQ の製品形式とユーザー インターフェイスの変更など、サーバーレス アプリケーション シナリオを対象としています。次に、技術アーキテクチャの進化の観点から、RocketMQ がサーバーレス メッセージング クラウド サービスをどのように実装するかを見てみましょう。サーバーレス シナリオでは、顧客が必要とするのは宣言型の論理リソースであり、さまざまな論理リソースをバンドルせずに、ボリュームごとに弾力的に提供できます。

サーバーレス シナリオの場合、RocketMQ は 3 層のストレージとコンピューティングの分離アーキテクチャに進化しました。

  • 最初の層は RocketMQ プロキシで、主にマルチプロトコルとマルチドメインのシナリオをカバーします。ここでのドメイン シナリオには、従来のサーバー側アプリケーション統合である RocketMQ シナリオ、IoT 指向アプリケーションである MQTT、イベント駆動型アプリケーションである EventBridge が含まれます。プロキシは、コンピューティング リソースの主要なキャリアと考えることができ、完全にステートレスなゲートウェイです。接続数、メッセージ TPS、メッセージの読み取りと書き込みの比率が異なる顧客に対して、コンピューティング リソースとネットワーク リソースに独立した柔軟性を提供できます。このようにして、サーバーレス シナリオで複数のリソースを柔軟に分離するというお客様のニーズに応えることができます。
  • 2 番目の層は RocketMQ のストレージ エンジンで、主にメッセージの複数のコピーの実装と、複数のコピー間で高可用性スイッチングを実行する方法に焦点を当てています。同時に、ローカル ストレージとクラウド ストレージの統合された抽象化も担当します。メッセージは主にクラウドディスクとオブジェクトストレージに保存され、メッセージデータのほとんどはオブジェクトストレージに保存されるため、ストア自体の状態が弱くなり、弾力性効率も向上します。RocketMQ ストアは、メッセージ スループット、TPS、メッセージ サイズ、バッチ係数などの顧客のメッセージ トラフィック特性に基づいてストレージ リソースの IOPS、帯域幅、ストレージ スペースを柔軟に一致させ、メッセージ ストレージとコンピューティングの分離を実現します。
  • 3 番目の層はクラウド ストレージ層で、ほとんどのメッセージはオブジェクト ストレージ (パブリック クラウド インフラストラクチャ レベルのストレージ プーリング) に保存されます。コールド データをオブジェクト ストレージにオフロードすることで、RocketMQ ストアのライフ サイクルが短縮され、低コストで無制限のメッセージ ストレージ スペースも確保されます。

RocketMQ5.0 は柔軟なアーキテクチャを備えており、クラウド サービスの形式の RocketMQ はクラウド インフラストラクチャとさらに統合して、クラウド コンピューティングの恩恵を最大限に引き出すことができます。

コンピューティング レベルでは、RocketMQ 5.0 はコンテナ サービスを通じて ECS の弾力性機能を最大限に活用し、エラスティック リソース プール + HPA 関連テクノロジーを採用してコンピューティング機能の迅速な弾力性をサポートすると同時に、ACK 独自のクロス アベイラビリティ ゾーン展開機能により十分な機能を提供します。クラウド製品の高可用性保証。

ネットワーク レベルでは、RocketMQ 5.0 は、多様なネットワークに対するユーザーのニーズを満たすために、さまざまなクラウド ネイティブ ネットワーク機能にアクセスできます。パブリック ネットワークはいつでもオープンして使用でき、さまざまなプライベート ネットワーク形式をサポートし、グローバルなネットワークを構築します。 CEN に基づく相互運用可能なメッセージング ネットワークにより、さまざまな場所でのより多くの生活が実現します。

ストレージに関しては、Pangu DFS とオブジェクト ストレージに基づくマルチレベル ストレージ アーキテクチャにより、低コストで無制限のストレージ機能が提供され、ホット データ リンクとコールド データ リンクが分離され、より高い SLA が提供されます。

イベント駆動型のサーバーレス技術スタックを強化

最後に、Apache RocketMQ に基づくメッセージング製品システムはイベント駆動型であり、2 つの主要なシナリオを統合して、包括的なサーバーレス テクノロジー スタックを強化します。

上記は典型的なサーバーレス製品システムです。一部の大手クラウド ベンダーは、コア製品の包括的なサーバーレス化を実現しています。コンピューティング、ストレージ、ビッグ データ分析など、すべてのベンダーがサーバーレス サービス機能を備えています。これらの機能に基づいて、顧客はエンドサービスを構築できます。ツーエンドのサーバーレス アプリケーションはコア ビジネスに焦点を当て、コスト削減と効率向上を最大限に高めます。

講演者:

Lin Qingshan (愛称: Longji) 氏、Apache RocketMQ の共同創設者、Alibaba Cloud の上級技術専門家、Alibaba Cloud メッセージング製品ラインの責任者。メッセージング分野の国際的な専門家である彼は、メッセージング、リアルタイム コンピューティング、イベント駆動型およびその他の方向の研究と探求に熱心に取り組んでおり、RocketMQ クラウドネイティブ アーキテクチャとハイパーコンバージド アーキテクチャの進化を推進しています。

元のリンク

この記事は Alibaba Cloud のオリジナル コンテンツであり、許可なく複製することはできません。

Alibaba Cloudが深刻な障害に見舞われ、全製品が影響(復旧) Tumblr がロシアのオペレーティングシステムAurora OS 5.0 を冷却新しいUIが公開 Delphi 12とC++ Builder 12、RAD Studio 12多くのインターネット企業がHongmengプログラマーを緊急採用UNIX時間17 億時代に突入しようとしている (すでに突入している) Meituan が兵力を募集し、Hongmeng システム アプリの開発を計画Amazon が Linux 上の .NET 8 への Android の依存を取り除くために Linux ベースのオペレーティング システムを開発独立した規模はFFmpeg 6.1「Heaviside」がリリースされまし
{{名前}}
{{名前}}

おすすめ

転載: my.oschina.net/yunqi/blog/10143358