詳細設計と使用メッセージキュー

まず、メッセージキューは何ですか

私たちは、メッセージが自分自身の使用のために取り外すことができ、メッセージを使用する必要がある場合、メッセージキューは、貯蔵容器のメッセージで比較することができます。メッセージキューは、分散システムの重要な構成要素であり、メッセージの使用は、非同期処理及びピーククリッピングすることによって、システムのパフォーマンスを向上させる結合システムを減らすために主にキューイングします。現在、より多くのメッセージキューは、ActiveMQの、RabbitMQの、カフカ、RocketMQを持って使用して、我々はこれらのメッセージキューを比較する11後になります。

加えて、我々はそれがFIFOキューキューのデータ構造である知っているので、メッセージを消費する際にも消費するために従ってください。このよう1,2,3などのプロデューサーは...順序1,2,3 ...消費になり、消費者にメッセージを送信します。しかし、メッセージは消費の注文の場合は、ニュース、消費者が失敗したか、メッセージキューはまた、より多くの消費者支出につながることができる場合として、発生しませんたまにあるためではない、我々はメッセージが消費の正しい順序であることを確認する必要があります。

上記に加えて、消費命令メッセージの問題は、メッセージキューを使用して、我々はメッセージが消費を繰り返さないことを確実にする方法を検討する必要があると述べましたか?どのように(どのように失われたメッセージの問題に対処するために)メッセージの送信の信頼性を確保するには?......というように。だから、メッセージキューの使用は完璧ではない、それはまた、システムの可用性を利用し、複雑さの増大を抑制、加えて、我々は一貫性やその他の問題を保証する必要があります。

第二に、なぜべきメッセージキュー

(ピーククリッピング、必要な応答時間を減少させる)、システム性能を改善するために、非同期処理により1; 2結合システムを減らすために:私は、メッセージキューを使用して、2つの主要な利点があると思います。あなたがインタビューしている場合はインタビュアーがこの質問をし、そして、一般的に、あなたの履歴書上のこの領域であなたのメッセージキューの内容に関連している、あなたをお勧めするには、この時間は答えるために、独自のプロジェクトを兼ね備えています。

(1)非同期処理によって(必要な応答時間を短縮するピーククリッピング)システム性能を向上させます

上記のように、ないときにサーバ・メッセージ・キューを使用する、その応答速度が遅くなるように、高圧サージ同時データベースの場合、データベースに直接ユーザデータを要求します。ただし、メッセージキューを使用した後、ユーザデータは、消費者のプロセスメッセージキューでメッセージキューから取得したデータは、非同期データベースに書き込ま直前にキューに送信された要求メッセージの後に戻りました。応答速度が大幅に改善されるように、メッセージ・キュー・データベース・サーバの処理速度ので、(メッセージ・キューは、データベースよりも良好なスケーラビリティを有します)。

上記の分析を通して、私たちは、と結論付けることができますメッセージキュー機能をクリッピングの良い効果を持っている -つまり、非同期処理を経て、短期性の高い同時トランザクションメッセージが生成されますは、このように同時トランザクションのピークを平坦化、メッセージキューに格納されています。 たとえば:電子商取引、プロモーション活動のスパイクのいくつかは、効果的にプロモーションに抵抗することができますメッセージキューの使用の合理化は、システムへの影響の受注の多数の流入を開始しました。

ので、ユーザーはすぐに戻って、ユーザーにメッセージキューを書き込んだ後、データを要求したが、その後のサービスのリクエストデータは、検証失敗の書き込みや、データベース内の他の操作可能だから、非同期処理のためにメッセージキューを使用した後、必要にビジネスプロセスを適切に変更し、たとえば、ユーザーが注文を送信した後、注文データをメッセージキューに書き込まれ、順序はすぐに正常に送信され、ユーザーに返すことができない、あなたは本当に消費者のプロセスのメッセージキューで順番に対処する必要がありますオーダー完了後、でも図書館の後、その後、成功した電子メールまたはSMS注文を介してユーザに通知する貿易紛争を避けるために、。これは、我々は通常のチケットや映画のチケットを訓練携帯電話に似ています。

(2)連結システムを減らします

私たちは、システムのスケーラビリティは間違いなく優れているように、その後、他のモジュールに小さな影響をモジュール上のモジュールを追加または変更は、モジュールの間には直接呼び出す場合は存在しないことを知っています。

私たちの最も一般的なイベント駆動型アーキテクチャ生産者-消費者モデルと同様に、大規模なサイトでは、通常、イベント駆動型アーキテクチャとメッセージキューを使用しています。下図のように:

メッセージキューの使用が公開-モデルの仕事をサブスクライブ、メッセージの送信者(プロデューサー)は、その1つまたは複数のメッセージの受信者(消費者)のサブスクリプションのメッセージを発表しました。 図からいることがわかるメッセージ送信者(プロデューサ)とメッセージ受信者(消費者)との間に直接結合が存在しない、分散されたメッセージキューにメッセージを送信するメッセージ送信者がメッセージの処理を終了し、分布から受信者のメッセージその後の処理メッセージキューの後に、メッセージを取得し、そのメッセージが来る知っている必要はありません。新規事業のために、限りニュースのそのタイプに興味のように、あなたがこのメッセージを購読することができ、拡張性の高いビジネスのウェブサイトのデザインを可能にする既存のシステムやサービス、上の影響はありません

メッセージの新しいタイプとして構成されたメッセージは、処理されたパッケージ化され、ろ過メッセージの受信者は、他のメッセージの受信者がメッセージにサブスクライブするのを待ち、メッセージを送信し続けます。したがって、イベント(メッセージオブジェクト)を駆動ビジネスアーキテクチャに基づいて一連の処理です。

また、メッセージの損失によるメッセージキューサーバーのダウンタイムを回避するためのメッセージは、メッセージを削除するには、実サーバの処理された後、メッセージが正常にメッセージサーバプロデューサーに保存されているメッセージのキュー、および他の消費者に送信されます。メッセージキューサーバーのダウンタイムの後、サーバーのメーカーは、メッセージキューサーバークラスタのポストメッセージを配布し、他のサーバーを選択します。

注意:  メッセージキューは唯一の公開に使用できることを考えてはいけない-サブスクライブ・モデルの仕事を、この特定のビジネス環境で公開使用して分離されている-サブスクライブ・モデルを。出版に加えて-モデルをサブスクライブだけでなく、アドホックサブスクリプションモデル(1つのメッセージのみのコンシューマ)、より一般的に使用され、私たちは解放される-サブスクリプションモデルを。 さらに、2つのJMSメッセージ・モデルが提供され、AMQPプロトコルは、5つのメッセージ・モデルを提供します。

第三に、メッセージキューに起因する問題のいくつかの使用

  • システムの可用性を削減:  ある程度まで減少し、システムの可用性を、なぜあなたは言うのですか?MQに入社する前は、MQメッセージの場合を考慮していない失われたり、ハングアップなどが、MQの導入後、あなたはそれについて考える必要があります!
  • システムの複雑性の増加:  MQを追加した後、あなたはメッセージがメッセージの損失の取り扱い、消費を繰り返さないようにする必要があり、その上の整然としたメッセージングを保証して!
  • コヒーレンス:  私はおよそ上記の話を実際に高速なシステム応答性をもたらすことができる非同期メッセージキュー、非同期メッセージキューを実現することができます。メッセージが本当に正しいの消費者ニュースの消費者ではない場合は、どのように行うには?これは、データの矛盾になります!

四、JMS VS AMQP

SIMILAR 4.1

4.1.1 JMSの紹介

JMS(Java Message Serviceの、Javaのメッセージングサービス)はJavaのメッセージングサービスで、メッセージは、クライアントの間でJMS JMSサービスを介して非同期的に送信することができます。JMS(Java Message Serviceの、Java Message Serviceの)APIの標準的なメッセージサービスや仕様です JavaEEのプラットフォームに基づいてアプリケーションコンポーネントがメッセージを作成、送信、受信、および読み取ることができます。これは、結合、分散、通信、ならびに、より信頼性の高いサービスのメッセージの非同期の低い程度を可能にします。

ActiveMQのは、JMSベースの仕様の実装です。

4.1.2 JMSの両方のメッセージング・モデル

①ポイントツーポイント(P2P)モデル

使用待ち行列(キュー)メッセージ通信ベアラとして、満たすプロデューサとコンシューマモデルメッセージが消費者によってのみ使用することができ、消費者は、メッセージがキュー内の消費者又はタイムアウトまで保持されません。例えば:私たちは、生産者が消費者の独自の半分のメッセージを送信するために、2人の消費者を過ごすために100件のメッセージ、2人の一般消費者を送っている(つまり、あなたは私の消費者です。)

②パブリッシュ/サブスクライブ(パブ/サブ)モデル

モデル(パブ/サブ)を使用してサブスクライブパブリッシュトピック(トピック)と同様の通信ベアラメッセージとしてブロードキャストモードを、パブリッシャがメッセージをパブリッシュし、メッセージは、テーマを介してすべての加入者に送信されるだけブロードキャストメッセージのユーザの加入した後に記事には、メッセージが表示されていません

4.1.3 JMSメッセージ本体5つの異なるフォーマット

JMSは5つのメッセージ本体のフォーマットを定義し、コールのメッセージタイプは、既存のメッセージ・フォーマットとの互換性のいくつかのレベルを提供するために、いくつかの異なる形態でデータを送受信することができます。

  • StreamMessageの - フローデータのJavaの元の値
  • MapMessage--名前 - 値のペア
  • TextMessage--文字列オブジェクト
  • ObjectMessage--直列化されたJavaオブジェクト
  • バイトストリームBytesMessage--

4.2 AMQP

AMQP、すなわち、アドバンスト・メッセージ・キューイングプロトコルは、ユニファイドメッセージングサービスアプリケーション層を提供するために、標準的な  アドバンストメッセージキュープロトコル(バイナリアプリケーション層プロトコル)がJMSと互換性のあるメッセージ指向ミドルウェアの設計のためのオープン標準のアプリケーション層プロトコルです。メッセージを配信することができ、クライアントのメッセージングミドルウェアで、この合意に基づき、同じ製品、異なる開発言語やクライアント/ミドルウェアの他の条件に限定されるものではありません。

RabbitMQのAMQPは、プロトコルに基づいています。

AMQP対4.3 JMS

コントラスト方向 ETC. AMQP
定義 Java API 合意
クロスランゲージ ノー それはあります
クロスプラットフォーム ノー それはあります
サポートメッセージの種類 ;②Pub/サブ①Peer-2-ピア:メッセージは、次の2つのモデルを提供します ;②fanout交換;③topic変更;④headers交換;⑤system交換①direct為替:それは5つのモデルのメッセージを提供しています。本質的に、後者の4およびJMSパブ/サブモデルは、ルーティングメカニズムに関するより詳細な内訳を行うために、大きな違いはありません。
サポートメッセージの種類 複数のメッセージ・タイプのサポートは、我々は、上記の バイト[](バイナリ)

要約:

  • AMQPは、配線層(配線レベルのプロトコル)のためのプロトコルメッセージを定義し、JMS APIの仕様が定義されています。Javaシステムでは、複数のクライアントとの対話、JMSによってなし、アプリケーション・コードの変更が、クロスプラットフォームのためのその貧しいサポートすることができます。AMQP自然クロスプラットフォーム、クロス言語機能。
  • JMSはのTextMessage、MapMessageの他の複雑なメッセージ・タイプをサポートし、AMQPは、バイト[]メッセージ・タイプをサポートする(複合型のシリアル化の後に送信されても​​よいです)。
  • アルゴリズム取引のオファーをルーティングするので、AMQPルーティングは、メッセージキューにメッセージを配信するためのさまざまな方法を提供し、唯一のJMSキューおよびトピック/方法をサブスクライブをサポートすることができます。

第五に、共通メッセージキューのコントラスト

コントラスト方向 概要
スループット RocketMQとカフカの10万あるいは百万桁以上のActiveMQやRabbitMQのスループット(ActiveMQの最悪のパフォーマンス)の万。
可用性 あなたは、高可用性を実現することができます。ActiveMQのとRabbitMQのは主からの高可用性を実現するためのアーキテクチャをベースにしています。分散型アーキテクチャに基づいてRocketMQ。カフカはまた、マシンのダウンタイムの数が少ない、データが失われない、使用不能にならない、データの複数のコピーを配布し
即時性 RabbitMQのerlang開発なので、同時能力を基に、パフォーマンスが非常に良い、低遅延、マイクロ秒です。他の3つはミリ秒レベルです。
サポート機能 カフカに加えて、他の三つの機能が比較的完全です。カフカの機能が比較的単純で、フィールド内の主支持シンプルMQ機能、リアルタイムシステムや大規模なデータのログ収集は、大規模な使用でデファクトスタンダードであります
メッセージの損失 ActiveMQの損失のRabbitMQの可能性は非常に低く、RocketMQとカフカは、理論的には失われません。

ます。https://juejin.im/post/5d0b97565188255fc6384ecfで再現

おすすめ

転載: blog.csdn.net/weixin_33739523/article/details/93183988