1

私は6台のサーバーを使用してクラスターを作成していますが、それらはすべてディスクノードです。ウェブサイトのログファイルの収集にはrabbitmqを使用しています。現在、ピーク時に、公開速度は1秒あたり約30kメッセージです。2つの主要なコンシューマー(hdfsとelasticsearch)があり、それぞれがすべてのメッセージを処理する必要があるため、配信速度は1秒あたり約60kに達します。

私のシナリオでは、1台のサーバーで10kの配信率を維持でき、6ノードを使用して圧力の負荷を分散します。私の解決策は、各ノードに2つのキューを作成することです。各メッセージには、すべてのノードに圧力を分散するためのランダムなルーティングキー(message.0、message.1など)が付いています。

私を混乱させたのは:

すべてのメッセージは1つのノードに送信されます。この公開圧力の負荷分散にHAProxyを使用する必要がありますか?

  1. 耐久性のあるキューと一時的なキューの間にパフォーマンスの違いはありますか?
  2. メモリノードとディスクノードの間にパフォーマンスの違いはありますか?私が知っているのは、メモリノードとディスクノードの違いは、キュー構成などのメタデータのみです。
  3. 公開コードと配信コードのパフォーマンスを向上させるにはどうすればよいですか?私は調査しましたが、いくつかの方法を知っています。
    • 確認メカニズムを無効にします(公開コードで?)
    • HiPEを有効にします(私はそれを行いました、そしてそれは大いに役立ちました)
  4. たとえば、入力は1w mps(メッセージ/秒)であり、すべてのメッセージを消費する2つのコンシューマーがあります。その場合、出力は2wmpsです。サーバーが1wmpsを処理できる場合、2w-mps-pressureを処理するために2台のサーバーが必要です。今、新しい消費者もすべてのメッセージを消費する必要があります。その結果、出力は3w mpsに達するので、もう1台のサーバーが必要です。結論として、すべてのメッセージに対してもう1つのコンシューマー、もう1つのサーバー?
4

1 に答える 1

0

「すべてのメッセージは 1 つのノードに送信されます。HA プロキシを使用して、このパブリッシュ プレッシャーの負荷を分散する必要がありますか?」

この記事では、RabbitMQ で負荷を分散することを目的としたいくつかの設計について概説します。

「Durable Queues と Transient Queues の間にパフォーマンスの違いはありますか?」

はい。Durable Queue はディスクにバックアップされるため、サーバーの再起動などで元に戻すことができます。これにより、わずかなオーバーヘッドが追加されますが、実際のプロセスは非同期で発生します。

「メモリノードとディスクノードで性能差はありますか?」

私が知っているわけではありませんが、それはマシン自体に依存します。

「発行および配信コードのパフォーマンスを改善するにはどうすればよいですか?」

これを試してみてください。

于 2014-11-17T16:35:56.450 に答える