Дата публикации: 01/06/2023
Многие заказчики с приходом облачных сервисов продолжают разворачивать и поддерживать собственные решения. В некоторых случаях это обусловлено требованиями к безопасности, а в некоторых с целью экономии денежных средств. На первый взгляд может показаться, что поддерживать собственные решения не так сложно, например, один из наших заказчиков решил реализовать собственный кластер узлов NGINX для балансировки нагрузки на кластер с бэкендом.
Кластер серверов NGINX показался для заказчика простым в конфигурации решением, однако с увеличением загрузки NGINX терял возможность обрабатывать трафик. При изучении лог-журнала обнаружилась очевидная причина: не хватало свободных worker_connections, что привело к сбросу пакетов. Но что всех удивляло, так это то, что кол-во worker_connections * кол-во worker процессов было в 4 раза больше количества запросов клиентов, что должно быть очевидно достаточно.
На этом этапе заказчик обратился к нашей компании для диагностики данной проблемы. В ходе диагностики мы обнаружили, что NGINX имеет архитектурные особенности, из-за которых распределение запросов пользователей между worker процессами происходит неравномерно. По этой причине на одном из worker процессов из-за бОльшей нагрузки и истощался резерв worker_connections.
Заказчик был весьма удивлен таким результатом, но и одновременно оценил наши технические изыскания.