私は平均1000req/sを処理しているFluentdサーバーを持っています。このサーバーは32CPUで構成されています。このサーバーでは、同じ構成で32個のfluentddockerコンテナーを実行しています。サーバーのエントリポイントは、ラウンドロビンアルゴリズムで構成されたロードバランサーとしてのnginxであり、さまざまなコンテナーに送信します。コンテナとnginxの両方が、24224/tcpでリッスンします。
このノードの入力は、 fluent-logger-csharp を使用してfluentdサーバーに送信する6つのC#アプリケーションです。そのため、アプリごとにFluentdサーバーへの接続を1つ開くと、トラフィックが大きいため、アプリはソケットを開いたままにします。これにより、32個のDockerのうち6個だけがリクエストを処理します。
C#クライアントを変更せずにサーバー使用率をより有効に活用するにはどうすればよいですか?
まず、ボトルネックを確認します。
アプリがfluentd
サービスをオーバーロードしていないのなら、なぜ32コアを使用するのでしょうか。
fluentd
出力がボトルネックである場合は、num_thread
オプションを使用してマルチスレッドを使用できます。そうすれば、6つだけが使用される32の単一インスタンスの代わりに、6つのfluentd
インスタンスで5つのスレッドのように使用し、最大30のコアを追加することができます。
入力に関しては、サーバーが接続を開いたままにしている場合、これがボトルネックになります。これらのサービスをさらにデプロイして、Fluent入力へのロギング出力の数を増やすことをお勧めします。