Как максимизировать использование сервера Fluentd?

У меня есть свободный сервер, который обрабатывает в среднем 1000 запросов в секунду. Этот сервер состоит из 32 процессоров. На этом сервере запущено 32 док-контейнера Fluentd с одинаковой конфигурацией. Точкой входа сервера является nginx как балансировщик нагрузки, настроенный с помощью алгоритма циклического перебора и отправляющий его в разные контейнеры. Оба контейнера и nginx слушают 24224/tcp.

Входные данные этих узлов - 6 приложений C#, которые используют https://github.com/zoetrope/fluent-logger-csharp для отправки на сервер fluentd. Таким образом, для каждого приложения открывается одно подключение к серверу Fluentd, и из-за большого трафика приложение сохраняет сокет открытым. Это приводит к тому, что только 6 из 32 докеров обрабатывают запросы.

Как вы могли бы лучше использовать использование сервера без изменения клиента C#?

1 ответ

Решение

Во-первых, я бы проверил, какие узкие места:

Если ваше приложение не перегружает fluentd сервис, то зачем вообще использовать 32 ядра?

Если fluentd выход является узким местом, вы можете использовать многопоточность с num_thread вариант; таким образом, вы можете использовать как 5 потоков на 6 fluentd экземпляры, добавляющие до 30 ядер вместо 32 отдельных экземпляров, где используется только 6.

Что касается ввода, если ваши серверы поддерживают открытые соединения, то это действительно ваше узкое место, и тогда вы можете захотеть развернуть больше этих сервисов, чтобы увеличить количество выходов журналирования для ваших свободно используемых входов.

Другие вопросы по тегам