# 1. メッセージミドルウェア
メッセージキュー技術は、分散アプリケーション間で情報を交換するための技術です。メッセージ キューはメモリまたはディスク上に常駐でき、アプリケーションによって読み取られるまでメッセージを保存します。メッセージ キューを使用すると、アプリケーションは独立して実行できます。アプリケーションはお互いの位置を認識したり、続行する前に受信プログラムがメッセージを受信するのを待つ必要がありません。 一般に、メッセージ ミドルウェアには、結合の低減、トラフィック ピークの低減、非同期通信、および信頼性の高い送信の機能があります。1. 結合の低減: パブリッシュとサブスクライブによる疎結合 登録ビジネスを例に挙げます。登録が成功すると、確認のために SMS と電子メールがユーザーに送信されます。従来のアーキテクチャ モデルは次のとおりです。 メール業務とSMS業務 ユーザー登録時にコードを記述します インターフェース経由で実装する場合も、リモート通話で実装する場合も、結合度は非常に高いです ここで、新たな要件が追加されます ユーザー登録完了後メールが送信されない ユーザーの「ポイントを増やすため」 これらの状況を分析してみましょう: まず、登録成功後の業務処理は、コードの蓄積とインターフェース呼び出しを通じて業務システムに実装されます。登録コードを変更するには、オンライン時にアプリケーションを起動および停止する必要がありますが、この方法が最も結合度が高くなります。 2 番目に、リモート呼び出しを通じて新しいビジネス処理を追加する場合、メイン プロセスのコードを変更する必要があり、アプリケーションの起動と停止が避けられません。 メッセージ ミドルウェアを次のように導入すると: #ユーザーが正常に登録された後、パブリッシュとサブスクライブを通じて、メッセージがメッセージ ミドルウェアに送信されます。ビジネスエンドは、同じチャネルのメッセージをサブスクライブし、登録成功のメッセージを受信した後、対応するビジネスを実行します。 「ポイント追加」の追加により、ポイントシステム側での処理とこのメッセージの購読だけで済むため、ユーザーの業務コードの変更やアプリケーションの起動・停止が不要となり、スムーズな拡張が可能となります。ビジネスは達成できる。 2. 非同期通信 上記の例で言うと、従来のアーキテクチャでは、ユーザー登録が完了して SMS メールが送信されると、クライアントが戻ってきてユーザーに登録が完了したことを通知します。成功です。メッセージ ミドルウェアを使用した後、ユーザーが登録情報を送信して処理が完了すると、ユーザーは正常に登録するように求められます。その後の SMS サービスと電子メール サービスは、SMS メッセージを送信する前に、購読チャネルからユーザー登録成功メッセージを受信し、メール、企業間でのやり取りは不要、相互抑制。 3. トラフィック ピークの削減とサージの防止メッセージ ミドルウェアはピーク期間中にメッセージを蓄積し、ピーク値が過ぎた後、ダウンストリーム システムがメッセージをゆっくりと消費してトラフィック ピークの問題を解決します。 。 同時実行性がピークに達すると、通常、バックエンド システムへの負荷が非常に高くなります。アプリケーション サーバーであってもデータベース サーバーであっても、この時点では、同様のリクエストがメッセージ キューに入れられる可能性があります。メッセージ ミドルウェアのサイズを設定し、処理が遅いために蓄積されます。メッセージ キューのサイズを設定して、同時実行の量を制御することもできます。製品のフラッシュ セールのビジネス シナリオは、比較的一般的です。 4. 信頼性の高い送信メッセージベースの通信は信頼性が高く、メッセージが失われることはありません。ほとんどのメッセージング ミドルウェアは、メッセージをディスクに永続化する機能を提供します。冒頭の 1 つ目のシナリオでは、メッセージ ミドルウェアはプロデューサによって生成されたメッセージをディスクに永続化できます。バックエンド アプリケーションは停止しますが、メッセージは失われず、アプリケーションは再起動されて処理を続行します。 メッセージ ミドルウェアがダウンしている場合、メッセージを受信できない場合にメッセージ ミドルウェアを維持するにはどうすればよいですか?という質問があるかもしれません。それは問題ではありません。メッセージ ミドルウェアは、メッセージの信頼性の高い送信を保証できるさまざまなメッセージ レプリケーション戦略、永続化戦略、クラスター展開戦略などを提供します。#2. メッセージ ミドルウェア モデル
##3. 一般的に使用されるメッセージ ミドルウェア##RabbitMQ
1. RabbitMQ の機能:
RabbitMQ はオープン ソース実装ですErlang 言語で開発された AMQP 標準に基づいています。 RabbitMQ はもともと金融システムから生まれ、分散システムでメッセージを保存および転送するために使用されており、使いやすさ、拡張性、高可用性の点で優れたパフォーマンスを発揮します。その具体的な機能は次のとおりです。信頼性柔軟なルーティングメッセージ クラスターのサポート
高可用性
複数のプロトコルのサポート (AMQP プロトコルのサポートに加え、STOMP や MQTT などのプラグインを通じて他のメッセージ キュー プロトコルもサポートします)
多言語クライアントのサポート
管理インターフェイスの提供
追跡メカニズムの提供
プラグイン メカニズムの提供 (RabbitMQ は多くのプラグインを提供しており、独自のプラグインを作成することもできます)
概要:
RabbitMQ の最大の利点は、比較的柔軟なメッセージ ルーティング戦略、高可用性、信頼性、豊富なプラグイン、複数のプラットフォームを提供することです。サポートと完全なドキュメント。ただし、AMQP プロトコル自体の実装が比較的重いため、他の MQ (Kafka など) と比較してスループットが不利になります。
ActiveMQ
1.ActiveMQ の機能:
ActiveMQ は、Apache によって作成されたオープン ソースのメッセージング ミドルウェアであり、効率的でスケーラブルで安定した、エンタープライズレベルのメッセージング通信を保護します。 ActiveMQ は JMS 1.1 を実装し、JMX 管理、マスター/スレーブ管理、メッセージ グループ通信、メッセージの優先順位、遅延メッセージ受信、仮想レシーバー、メッセージの永続化、メッセージ キューの監視など、多くの追加機能を提供します。主な機能は次のとおりです。
Java、C、C、C#、Ruby、Perl、Python、PHP など、OpenWire、STOMP、AMQP などの複数の言語でクライアントとプロトコルをサポートします。 、MQTT プロトコル。
メッセージ グループ通信、メッセージの優先順位、遅延メッセージ受信、仮想受信者、メッセージの永続化などの高度な機能を提供します。
JMS 1.1 および J2EE 1.4 仕様 (永続性、分散トランザクション メッセージ、トランザクションを含む) を完全にサポートします。
Spring フレームワークをサポートし、ActiveMQ は Spring 構成ファイルを通じて Spring アプリケーションに簡単に埋め込むことができます。
TomEE、Geronimo、JBoss、GlassFish、WebLogic などの一般的な J2EE サーバー テストに合格しました。
多様な接続方式 ActiveMQ は、VM 内、TCP、SSL、NIO、UDP、マルチキャスト、JGroups、JXTA など、さまざまな接続方式を提供します。
JDBC とジャーナルを使用して、メッセージの高速永続化をサポートします。
高パフォーマンスのクラスター、クライアント/サーバー、ポイントツーポイント通信、およびその他のシナリオ向けに設計されています。
テクノロジーと言語に依存しない REST API インターフェイスを提供します。
AJAX 経由での ActiveMQ の呼び出しをサポートします。
ActiveMQ は、CXF や Axis などの Web サービス テクノロジと簡単に統合して、信頼性の高いメッセージングを提供できます。
インメモリ JMS プロバイダーとして使用でき、JMS 単体テストに非常に適しています。
Kafka
1.Kafka の機能:
Kafka は、分散パブリッシュ/サブスクライブ メッセージング システムとして LinkedIn によって最初に開発され、後に Apache のものになりました。トップレベルのプロジェクト。その主な機能は次のとおりです。
パブリッシュとサブスクリプションの両方で高いスループットを提供します。 (Kafka の設計目標は、時間計算量が O(1) のメッセージ永続化機能を提供することです。これは、TB レベルを超えるデータに対しても一定時間のアクセス パフォーマンスを保証でき、非常に安価な商用マシンでも実行できます。 1 台のマシンに 1 秒あたり 100K のメッセージを送信)
メッセージの永続性。 (メッセージをディスクに永続化するため、リアルタイム アプリケーションだけでなく ETL などのバッチ消費にも使用できます。データをハードディスクに永続化してレプリケートすることで、データ損失を防ぐことができます。)
分散。 (各パーティション内でのメッセージの連続送信を確保しながら、サーバー間でのメッセージの分割と分散消費をサポートします。内部のプロデューサー、ブローカー、およびコンシューマーはすべて分散アーキテクチャであるため、外部への拡張が容易になります。)
Consumingmessagesプルモードを採用。 (処理中のメッセージのステータスは、サーバー側ではなくコンシューマ側で維持されます。ブローカーはステートレスであり、コンシューマ自体がオフセットを保存します。)
オフラインだけでなく、オンラインおよびオフラインのシナリオもサポートします。データ処理とリアルタイムデータを扱います。
RocketMQ
1. RocketMQ の機能:
RocketMQ は、2012 年に Alibaba によってオープンソース化され、その後 Apache software Foundation に寄付された分散メッセージング ミドルウェアです。そして、2017 年 9 月 25 日に Apache のトップレベル プロジェクトになりました。アリババの「Double 11」など数々の「スーパープロジェクト」を経験し、安定した優れたパフォーマンスを誇る国産ミドルウェアとして、その高性能、低遅延、高信頼性により、近年国内ユーザーの利用が増えています。企業が使用します。主な特徴は次のとおりです。
柔軟な拡張性を備えています。 (RocketMQ は当然クラスターをサポートしており、その 4 つのコア コンポーネント (NameServer、Broker、Producer、および Consumer) はそれぞれ単一障害点なしで水平方向に拡張できます。)
大量のメッセージを蓄積する機能があります。 (RocketMQ は、ゼロコピーの原則を使用して、非常に大量のメッセージを蓄積する機能を実現します。1 台のマシンで数億のメッセージの蓄積をサポートできると言われており、非常に多くのメッセージを蓄積した後でも、低い書き込み遅延を維持します。 )
連続メッセージをサポートします。 (RocketMQ は、メッセージ コンシューマーが送信された順序でメッセージを消費することを保証できます。シーケンシャル メッセージは、グローバルに順序付けされたメッセージとローカルに順序付けされたメッセージに分けられます。一般に、ローカルに順序付けされたメッセージを使用することをお勧めします。つまり、プロデューサーは特定のタイプを送信します。達成するために同じキューに送信するためのメッセージの数。)
複数のメッセージ フィルタリング方法をサポートします。 (メッセージのフィルタリングは、サーバー側のフィルタリングとコンシューマ側のフィルタリングに分かれます。サーバー側でフィルタリングを行うと、メッセージのコンシューマの要件に応じてフィルタリングを実行できます。メリットは、不要なメッセージの送信が削減されることですが、デメリットは、メッセージ サーバーの負荷が増加します。実装は比較的複雑です。コンシューマ側のフィルタリングは、特定のアプリケーションによって完全にカスタマイズされます。この方法はより柔軟です。欠点は、多くの無駄なメッセージがメッセージ コンシューマに送信されることです。)
トランザクションメッセージをサポートします。 (通常のメッセージと順次メッセージのサポートに加えて、RocketMQ はトランザクション メッセージもサポートします。この機能は、分散トランザクションに別のソリューションを提供します。)
バックトラッキング消費をサポートします。 (遡及消費とは、コンシューマーによって正常に消費されたメッセージが、ビジネス ニーズのために再度消費される必要があることを意味します。RocketMQ は、時間に応じた遡及消費をサポートします。時間ディメンションはミリ秒単位で正確で、前後に追跡できます。)
MoreFAQ については、PHP 中国語 Web サイトをご覧ください。
以上がRPCミドルウェアとは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。