Eu tenho um servidor fluentd que está processando uma média de 1000 req/s. Este servidor é composto por 32 cpus. Neste servidor estão rodando 32 containers docker fluentes com a mesma configuração. O ponto de entrada do servidor é um nginx como balanceador de carga configurado com algoritmo round-robin e enviado para os diferentes contêineres. Ambos, contêineres e nginx, escutam em 24224/tcp.
A entrada desses nós são 6 aplicativos C# que usam fluent-logger-csharp para enviar ao servidor fluentd. Assim, para cada app abre uma conexão com o Fluentd Server e devido ao grande tráfego, o app mantém o socket aberto. Isso faz com que apenas 6 de 32 dockers estejam processando solicitações.
Como você poderia usar melhor a utilização do servidor sem modificar o cliente C#?
Primeiro, eu verificaria quais são os gargalos:
Se o seu aplicativo não está sobrecarregando o
fluentd
serviço, por que usar 32 núcleos?Se
fluentd
a saída for o gargalo, você pode usar multithreading com anum_thread
opção; dessa forma, você pode querer usar 5 threads em 6fluentd
instâncias, adicionando até 30 núcleos, em vez de 32 instâncias únicas onde apenas 6 são usadas.Quanto à entrada, se seus servidores mantêm as conexões abertas, esse é realmente o seu gargalo e você pode querer implantar mais desses serviços para aumentar o número de saídas de log para suas entradas fluentes.