У меня есть fluentd-сервер, который обрабатывает в среднем 1000 запросов / с. Этот сервер состоит из 32 процессоров. На этом сервере работают 32 контейнера fluentd docker с одинаковой конфигурацией. Точкой входа на сервер является nginx в качестве балансировщика нагрузки, настроенного с циклическим алгоритмом и отправляющего его в разные контейнеры. И контейнеры, и nginx слушают 24224 / tcp.
На вход этих узлов поступают 6 приложений C #, которые используют свободный регистратор-csharp отправить на fluentd server. Итак, для каждого приложения открывается одно соединение с Fluentd Server, и из-за большого трафика приложение сохраняет открытый сокет. Это приводит к тому, что только 6 из 32 докеров обрабатывают запросы.
Как можно лучше использовать использование сервера без модификации клиента C #?
Во-первых, я хотел бы проверить, в чем заключаются узкие места:
Если ваше приложение не перегружает fluentd
service, тогда зачем вообще 32 ядра?
Если fluentd
выход является узким местом, вы можете использовать многопоточность с num_thread
вариант; таким образом вы можете использовать как 5 потоков на 6 fluentd
экземпляров, добавляя до 30 ядер вместо 32 отдельных экземпляров, где используется только 6.
Что касается ввода, если ваши серверы поддерживают соединения открытыми, то это действительно ваше узкое место, и тогда вы можете развернуть больше этих сервисов, чтобы увеличить количество выходных журналов для ваших входов fluentd.