分散キューの問題の解決策は何ですか?


23

分散キューの問題を解決するさまざまな方法について、もっと詳しく学ぼうとしています。それで、私はすでにどんな製品、サービス、実装と研究論文があるかについて知りたいです。

実装は多くの課題に直面し、トレードオフを余儀なくされます。

  • 順序が強いですか、緩いですか?
  • べき等を入れていますか?
  • 単一のマシンに収まるものよりも多くのキューを使用できますか?
  • 単一のマシンに収まるデータよりも多くのデータをキューに入れることができますか?
  • データを失う可能性がある前に、何台のマシンがクラッシュする可能性がありますか?
  • ネットスプリットを許容できますか?
  • ネット分割が修正されると、自動的にデータを調整できますか?
  • クライアントがクラッシュした場合に配信を保証できますか?
  • 同じメッセージが複数回配信されないことを保証できますか?
  • ノードは任意の時点でクラッシュし、戻ってきて、ジャンクを送信できませんか?
  • ダウンタイムなしで実行中のクラスターにノードを追加、またはノードからノードを削除できますか?
  • ダウンタイムなしで実行中のクラスターのノードをアップグレードできますか?
  • 異種サーバーで問題なく実行できますか?
  • サーバーのグループにキューを「固定」できますか?(例:「これらのキューはヨーロッパのデータセンターでのみ許可されています」)
  • 可能であれば、少なくとも2つのデータセンターにデータレプリカを配置することを確認できますか?

私は、どの実装でもそのすべてに「はい」と言うことができるという幻想は持っていません。さまざまな実装について聞いてみたいだけです。それらがどのように機能するか、どのようなトレードオフを行ったか、そしておそらく彼らが特定のトレードオフのセットを決定した理由。

また、上記のリストで見逃したかもしれない課題がある場合。

回答:


13

基本的なキューイングシステムの作成は非常に簡単ですが、すべての課題について前述したように、正しく実行することは別の問題です。ソースコード、サードパーティシステム、およびさまざまなJMSプロバイダーを記述した自作のシステムを使用しました。JMS(Java Messaging Service)は、これまでに出会った中で最も完全なソリューションです。あなたが求めるものの多くはJMSで利用可能です。私のお気に入りのJMSプロバイダーはActiveMQです。無料で、パフォーマンスが高く、インストールが簡単で、さらに重要なことに、Springを使用してアプリに簡単に組み込むことができます。JMSプロバイダーは、要求されたすべてをすぐに提供するわけではありませんが、アプリケーションで必要になったときに必要なものの多くを処理するためのツールセットを提供します。あなたがリストしたすべてのものを必要とする多くのアプリケーションは見つかりませんでした。順序は重要ではないかもしれません(そうでない場合は最適です)。

http://activemq.apache.org/what-open-source-integration-solution-works-best-with-activemq-.html

それは強いか、順序を失いますか?はい。プログラムのニーズに応じて両方があります。ここでは詳細は以下のとおりです。http://activemq.apache.org/total-ordering.html

べき等を入れていますか?いいえ。ただし、これが必要な場合、アプリケーション層に実装するのは簡単です。

単一のマシンに収まるものよりも多くのキューを使用できますか?はい。サーバーをクラスター化でき、異なるキューを使用して複数のマシンをセットアップしたい場合は、どちらからでもプルできます。

単一のマシンに収まるデータよりも多くのデータをキューに入れることができますか?はい。ほとんどのJMSプロバイダーは、JMSプロバイダーがダウンした場合にメッセージがドロップまたは失われないように、何らかのDB /永続ストレージを使用する必要があります。

データを失う可能性がある前に、何台のマシンがクラッシュする可能性がありますか? これはタイミングに関連しているため、答えるのが少し難しくなります。ただし、JMSプロバイダーをクラッシュさせることができ、ディスクが破損していない場合は、ディスクが復旧し、最後のコミットを受け取った場所から開始します。これは、メッセージが2回配信される可能性があることを意味しますが、これを処理するようにアプリをコーディングすれば問題はありません。各タイプ(プロデューサー、コンシューマー、またはJMSサーバー)が少なくとも1つあれば、完了します。ディスクが使用できなくなった場合の冗長性のために、ロード/バランス/フェイルオーバーを使用することもできます。

ネット分割を容認できますか?「ネット分割」の意味は理解できていると思いますが、完全にはわかりません。JMSサーバーがクラスター化されていて、サーバーの1つとの接続が失われた場合、別のサーバーにジャンプし、中断したところからピックアップすることになります。はい。ただし、このような状況でも、クライアントが接続を失った時点に応じて、メッセージが重複する可能性があります。

ネット分割が修正されると、自動的にデータを調整できますか?トランザクションセッションを使用している場合は、コミットされているメッセージのみが、稼働中の既存のクライアントに再配信されます。

クライアントがクラッシュした場合に配信を保証できますか?はい、これはJMSの主要な目標の1つです。配信の保証とは、メッセージがキューに入れられた場合、クライアントによる処理が保証されることを意味します。

同じメッセージが複数回配信されないことを保証できますか?トランザクションセッションが使用されている場合は、はい。これは、クライアントがメッセージを受け入れ、コミット/ロールバックを呼び出したことを意味します。コミットが呼び出されると、メッセージは再配信されません。

ノードは任意の時点でクラッシュし、戻ってきて、ジャンクを送信できませんか?永続的なクラスター化されたキューがある場合。はい、クラスタ内の他のノードがメッセージを配信した場合、「ジャンク」を吐き出しません。まだ承認されていないものはすべて再配信できます。

ダウンタイムなしで実行中のクラスターにノードを追加、またはノードからノードを削除できますか? はい。

ダウンタイムなしで実行中のクラスターのノードをアップグレードできますか?これは答えるのが少し難しいですが、そうすることができると信じています。

異種サーバーで問題なく実行できますか?これはどういう意味ですか?ほとんどのJMSプロバイダーは、異なるハードウェア、OSなどを使用する環境で実行するのが非常に簡単であることがわかりました。パフォーマンスを意味する場合、それはまったく別のことです。分散処理システムは、遅いノードによって悪影響を受ける可能性があります。キューとコンシューマーを実行している2 8コアIntelサーバーがありました。これは16コアで、これら2つのボックスのみを使用することで、シングルコアマシンをコンシューマとして追加したときよりもパフォーマンスが向上しました。そのシングルコアマシンは非常に低速であったため、グリッド全体の速度が2倍に低下しました。これはJMS自体とは関係ありません。

サーバーのグループにキューを「固定」できますか?短い答えはい。欧州のデータセンターにのみあるクラスターを実行し、そこでキューを構成する方法を考えることができます。次に、spring configで、そのキューと他のクラスターの他のキューを消費するようにコンシューマーをセットアップします。次のドキュメントを参照してください。

http://activemq.apache.org/clustering.html

可能であれば、少なくとも2つのデータセンターにデータレプリカを配置することを確認できますか?繰り返しになりますが、クラスタリングのドキュメントを参照することをお勧めします。

繰り返しますが、JMSには、必要に応じて微調整できる多くのオプションがあります。トランザクションセッションと永続キューを使用すると、パフォーマンスコストが発生します。すべての添え字をオンにすると、パフォーマンスに10倍も影響することがわかりました。JBossMQを使用してこれらの機能の一部をオフにした場合、約10,000メッセージ/秒を取得できましたが、それらをオンにすると1000メッセージ/秒になりました。大きなドロップ。


この回答にご協力いただきありがとうございます。ネット分割とは、クラスター内の一部のノードが残りのノードと通信できなくなった場合です。異種サーバーとは、主に異なる量のRAMを意味します-一部の分散システムは、サーバーが似ている場合にそれを好みます。
クリスベスト

それからnetsplitsで確かにyesです。消費者がダウンしたり、通信できない場合は、接続を試行し続けます。コミットを受け取らなかったジョブは、後で他のコンシューマーに再配信されます。JMSプロバイダーがダウンし、クラスターの他のメンバーがいる場合は、メッセージが失われないように、クラスター全体にメッセージを複製できます。
チャブソンダブ

RAM、ハードウェア、OSのいずれであっても、マシンが同一であることに関する要件はありません。必要に応じて、マシンの混合バッグを実行できます。唯一の懸念は、同じではないマシンが異なるレートでメッセージを処理し、スループットの低下につながる可能性があるという点で、パフォーマンスに関連するものです。ただし、JMSモデルは、プッシュモデルではなくプルであるという事実により、これを多少緩和します。プッシュモデルは、これらのタイプの問題に対してより敏感です。
チャブソンダブ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.