今日は、RabbitMQ のおかげで、最も重い処理を非同期で実行し、すべてを非常に簡単に管理することで、ページの読み込み時間を短縮する方法を見ていきます。
アプリケーションや Web サイトの安定性と速度は、ユーザーにとって確かに最も重要な要素の 1 つです。時間がかかりすぎて最初のページを見る前にサイトを離れたことがない人はいないでしょうか?
RabbitMQとは
RabbitMQ は、オープンソースの分散型でスケーラブルなメッセージング ブローカーであり、プロデューサーとコンシューマー間の効率的な通信の仲介者として機能します。
RabbitMQ は、アプリケーション層メッセージング プロトコル AMQP を実装します。これは、ブローカーからプロデューサーへ、およびコンシューマーからプロデューサーへのメッセージの受信確認を通じて、配信を保証しながら非同期メッセージを通信することに重点を置いています。
RabbitHQ の仕組み
簡略化した方法で、RabbitMQ は、消費側アプリケーションがメッセージを取得して処理するまで、プロデューサーによって送信されたメッセージを保存するキューを定義します。これにより、システムがメッセージを通じて相互に通信する独立したモジュールに分割される分散システムの設計と実装が可能になります。
すべてのコミュニケーションと同様に、プロデューサー、メッセージ、受信者が必要です。ケーキの中央には RabbitMQ があり、メッセージが受信者を待つ場所になります。
メッセージの交換を表す交換の種類を知ることで、その仕組みをよりよく理解しましょう。
交換タイプ
交換を通じて、RabbitMQ 経由でメッセージを送信するときは常に、メッセージをキューに直接送信しません。他のシステムがそれを読み取るために、メッセージを別のキューに転送する役割を担う交換局に送信します。
交換のタイプは、ダイレクト、ファンアウト、トピック、およびリーダーです。
直接交換
生産者が 3 人の消費者に購入確認メッセージを発行する必要があるとします。つまり、システムは購入を行うために他の 3 つの異なるシステムと通信する必要があります。
RabbitMQ はメッセージを各キューに個別に送信するため、これらの他のシステムがメッセージを直接受信できるようにする勢いがあります。
通常、交換機はメッセージをキューに転送しますが、多くの場合、メッセージをすべてのキューに送信したくないことがあります。したがって、交換を行うために適用できる条件がいくつかあります。
したがって、メッセージを 1 人の消費者だけに送信することができます。全員に送信されるのではなく。
バインディング キー : キューをエクスチェンジに接続するには、コネクタのようなキューとエクスチェンジの間の関係であるバインドを作成する必要があります。
ルーティング キー : このバインドでは、ルーティング キーと呼ばれる要素を作成することもできます。言い換えると、これはメッセージを特定のキューに転送するためのキーです。
たとえば、ルーティング キー X、ルーティング キー Y、およびルーティング キー Z がある場合、ルーティング キー Y を持つメッセージはキュー Y を経由して、メッセージを受信するように定義したコンシューマに直接配信されます。
このようにして、複数のキューを交換機に接続できますが、同時に、ルーティング キーを使用して、キューと交換機との異なる関係を持つこともできます。
ファンアウト交換
メッセージが交換局に送信されると、それに接続されているすべてのキューに送信されます。したがって、ファンアウト交換機に 10 個のキューが接続されている場合、すべてのキューが送信されたメッセージを受信します。
話題の交換
これは最も柔軟な交換の 1 つであり、件名に応じてメッセージを送信できます。また、ルーティング キーの名前の付け方に基づいて、ルールのパターンやシステム間の関係を作成することができます。
例:
routing key (x.*); routing key(*.z); routing key (*.y.*).
RabbitMQ の AQMP とは何ですか
AMQP (Advanced Message Queuing Protocol) は、複数のアプリケーション間のメッセージのトランスポートを定義するために使用されるオープン メッセージング プロトコルです。これは、非同期トランスポートが可能であることを除いて、ワイヤレベルのプロトコルであるという点で HTTP および TCP プロトコルに似ています。
RabbitMQ が AMQP の実装を選択した理由はいくつかあります。 1 つ目は、このプロトコルが API を定義する JMS とは異なり、ミドルウェアの標準として記述されていることです。
Red Hat、Cisco Systems、Microsoft などの大企業を含む国際コンソーシアムがこの AMQP 仕様 を作成しました。 2 つ目は、このプロトコルの相互運用性です。これにより、AMQP を実装するあらゆるアプリケーションが AMQP ブローカーと通信できるようになります。
RabbitMQ で使用されるプロトコルは AMQP だけではありません。以下の画像は、RabbitMQ によって実装および/またはサポートされるすべてのプロトコル、言語、および API を表しています。
RabbitMQ の優れた機能
RabbitMQ は、メッセージを非同期に、また異なる場所からメッセージを通じてさまざまなアプリケーションの統合を可能にすることに加えて、メッセージング ブローカーの世界で非常に人気のある他の機能も提供します。
信頼性の高いストレージ
RabbitMQ には、メッセージ配信を保証できるいくつかの機能が組み込まれています。このうち、コンシューマーがメッセージを受信できない場合にストレージを提供します。これにより、コンシューマはメッセージの配信を受け入れて、メッセージが正常に処理されたことを確認できます。
処理が失敗した場合、RabbitMQ では、メッセージを再度キューに入れてコンシューマの別のインスタンスで消費したり、回復時に最初に失敗した同じコンシューマで再度処理したりすることができます。
RabbitMQ は、メッセージの配信順序も保証します。つまり、RabbitMQ キューに到着したのと同じ順序で消費されます。
クラスターの作成
RabbitMQ は 1 秒あたり数千のメッセージを処理することで優れたパフォーマンスを提供しますが、場合によっては、アプリケーションのパフォーマンスに影響を与えずに、より多くのメッセージを処理できる必要があります。
このため、RabbitMQ を使用すると、クラスターを作成してソリューションを水平方向に拡張でき、これはプロデューサーとコンシューマーの両方にとって透過的です。
高可用性キュー
RabbitMQ では、クラスター内の複数のノード間でキューをレプリケートできるため、ノードの障害やダウンタイムが発生した場合でも、ブローカーはプロデューサーからメッセージを継続的に受信し、適切なコンシューマーに配信できます。
柔軟なルーティング
RabbitMQ では、特定のパターンに従っている場合でも、バインディングを通じて交換とキューの間でメッセージをルーティングする柔軟なルーティング ルールを定義できます。
複数のプロトコルのサポート
AMQP プロトコルのサポートに加えて、RabbitMQ はプラグインを通じて STOMP、MQTT、および HTTP をサポートします。また、各ブローカーのコンポーネントの認証およびアクセス制御メカニズムも組み込まれています。
RabbitMQ の実際の使用例
RabbitMQ の最も重要な使用例は、アプリケーション間の非同期性の保証、アプリケーション間の結合の軽減、アラートの配布、バックグラウンドでのジョブのキューの制御を可能にすることです。
ただし、RabbitMQ の実際の使用例は e コマースであり、販売注文を操作、処理し、流通や請求書の発行など、他の分野のシステムに転送するために使用されます。
注文を処理するときに、販売メッセージを配送センターと請求書エリアに転送できます。このスキームでは、メッセージ送信の非同期パターンに従ってすべてが水平方向に動作しますが、多くの場合、アクションを複数のキューに送信することが可能です。
前の例に続いて、この機能は、顧客が購入し、製品の流通、輸送、請求書の準備が必要な場合に非常に役立ちます。
これらの各セクターは異なるシステムであるため、RabbitMQ の目標は、これらすべてのメッセージを対応するシステムに転送することです。
Rabbit MQ の代替手段:
RabbitMQ は見た目よりもはるかに単純で、次のような代替手段がいくつかあります。
#1. 鉄MQ
IronMQ は、超高速のメッセージ キュー ソフトウェアです。可用性が高く、設計が耐久性があり、できれば 1 回限りの配信が可能です。 IronMQ は、最新のアプリケーション アーキテクチャにとって最も強力なクラウドネイティブ ソリューションです。
プッシュ キュー、プル キュー、およびポーリング リクエストをより長くオープンにしておくロング ポーリングをサポートしています。さらに、複数の高可用性データセンターを使用できるため、拡張性が向上します。
クラウド、共有ハードウェアまたは専用ハードウェア、あるいはオンプレミスに導入できます。また、読みやすいドキュメントを備えたさまざまなクライアント ライブラリも備えています。
#2. アパッチ カフカ
Kafka は、 分散イベント ストリーミングにおいて強い存在感を示すプラットフォームです。 Kafka の核心は、複製され、分散され、永続的なコミット ログとして設計されています。
その最大の使いやすさは、イベント駆動型のマイクロサービスや大規模なストリーム処理アプリケーションを強化し、クラスター内でイベントを非同期に自動的にレプリケートしてフォールト トレランスと高可用性を実現することです。
#3. Apache ActiveMQ
ActiveMQ は 、Java ベースのマルチプロトコル メッセージ ブローカーです。これにより、アプリケーション層で AMQP メッセージ キュー プロトコルを使用してアプリケーションを統合できます。
これは、JMS (ネイティブ Java) や Stomp (PHP アプリケーションで使用可能) など、統合用のいくつかのプロトコルを実装します。
さらに、Amazon には Amazon MQ と呼ばれる「マネージド」バージョンがあり、サービスの使用がはるかに簡単になります。
最後の言葉
メッセージング ブローカーは伝統的に、組織のアーキテクチャ内の重要な部分でした。それでも、さまざまなチャネルを通じて企業システムにアクセスするユーザーが増加しているため、低コストで水平方向に拡張できる製品が必要です。 1 秒あたりに大量のメッセージを処理できるようになります。
ここで、RabbitMQ などの新世代のブローカーが、クライアントに高レベルの可用性、信頼性、相互運用性、パフォーマンスを提供しようとする最新のアプリケーションでの関連性が高まっています。
アプリケーション用の信頼できる RabbitMQ ホスティング プラットフォームをいくつか検討することもできます。