私は6台のサーバーを使用してクラスターを作成していますが、それらはすべてディスクノードです。ウェブサイトのログファイルの収集にはrabbitmqを使用しています。現在、ピーク時に、公開速度は1秒あたり約30kメッセージです。2つの主要なコンシューマー(hdfsとelasticsearch)があり、それぞれがすべてのメッセージを処理する必要があるため、配信速度は1秒あたり約60kに達します。
私のシナリオでは、1台のサーバーで10kの配信率を維持でき、6ノードを使用して圧力の負荷を分散します。私の解決策は、各ノードに2つのキューを作成することです。各メッセージには、すべてのノードに圧力を分散するためのランダムなルーティングキー(message.0、message.1など)が付いています。
私を混乱させたのは:
すべてのメッセージは1つのノードに送信されます。この公開圧力の負荷分散にHAProxyを使用する必要がありますか?
- 耐久性のあるキューと一時的なキューの間にパフォーマンスの違いはありますか?
- メモリノードとディスクノードの間にパフォーマンスの違いはありますか?私が知っているのは、メモリノードとディスクノードの違いは、キュー構成などのメタデータのみです。
- 公開コードと配信コードのパフォーマンスを向上させるにはどうすればよいですか?私は調査しましたが、いくつかの方法を知っています。
- 確認メカニズムを無効にします(公開コードで?)
- HiPEを有効にします(私はそれを行いました、そしてそれは大いに役立ちました)
- たとえば、入力は1w mps(メッセージ/秒)であり、すべてのメッセージを消費する2つのコンシューマーがあります。その場合、出力は2wmpsです。サーバーが1wmpsを処理できる場合、2w-mps-pressureを処理するために2台のサーバーが必要です。今、新しい消費者もすべてのメッセージを消費する必要があります。その結果、出力は3w mpsに達するので、もう1台のサーバーが必要です。結論として、すべてのメッセージに対してもう1つのコンシューマー、もう1つのサーバー?