Как максимизировать использование сервера 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.
Что касается ввода, если ваши серверы поддерживают открытые соединения, то это действительно ваше узкое место, и тогда вы можете захотеть развернуть больше этих сервисов, чтобы увеличить количество выходов журналирования для ваших свободно используемых входов.