2013-07-18 34 views
6

私のアプリケーションでは、キューが潜在的に非常に大きくなる可能性があります。 マシンにスペースがないことが判明したらどうなりますか? キューを複数のマシンに分割するにはどうすればよいですか? たぶんRabbitMQの考え方が違うので、私は1つの大きなキューの代わりに複数のキューを作成する必要があります。RabbitMQキューの設計とスケーリング

ベスト、 フラビオ

答えて

1

RabbimMQは、箱から出してすぐclusteringhigh availability featuresを提供し、あなたは自分のニーズにそれらを設定する必要があります。

実際には、AMQPは任意のサイズのメッセージを保持できますが、ほとんどの場合、メッセージは99%で最大32KBです。見積もりリソースの使用量(最小/最大/平均)を計算し、さらにクラスタリングを行うかどうかを決定したり、クラスタ化したりすることはできません。

+2

は、単一のキューは、単一のノード(その単一のキューが拡張することができないだけに居住しましたあまりにも)..私は間違っていますか? – user2539645

+0

これは正しいことです。単一のノードにライブでキューを作成します(ただし、別のノードにミラーリングすることもできます)。あなたのメッセージはサイズと流量を見積もっていますか? – pinepain

+0

実際は非常に翌日に評価されるものです。何時間ものテラバイトのデータが届くと思いますので、非常に重いシステムが必要になるはずです。もっと良い解決策は、キューを追加し、負荷が増加するにつれてキューを追加します(クラスタに要求します)。あなたはどう思いますか? 問題は次のとおりです。交換機はノード上で均等に新しいキューを作成しますか(ラウンドロビンなど)? – user2539645

1

RabbitMQメーリングリストのスレッドhttp://rabbitmq.1065348.n5.nabble.com/RabbitMQ-scalability-design-question-td28323.htmlで読めるように、私が考案した解決策は、競合するコンシューマパターン(ストップフラグをオンにした)が検出されたときにSTOPトピック交換へのメッセージ。

この停止メッセージは、zakkeerの子孫がすべて削除されるまで(この場合はZookpeerをキュー消費者のレジストリとして使用して)Zookeeperを(キュレーター経由で)ポーリングするキューの「マスター」コンシューマによって受信されます。 )。すべてのコンシューマが停止フェーズを終了すると、「マスタ」コンシューマが何らかのタスクを実行し、元のキューコンシューマを再起動してトピック交換(各コンシューマが専用キューでリッスンしている)にRESTARTメッセージを送信します。私は、これは他の誰か(「鼓舞」または)助けることを願っ

..私はキューが異なるマシン間で分割さすることはできません理解し何から

関連する問題