Назад | Перейти на главную страницу

Как обрабатывать 1M подключений через веб-сокеты (Nginx / HAProxy / Amazon / Google)

какой nginx или haproxy предлагается настройка для цели 100 тыс. одновременные подключения к веб-сокетам? Я думаю, что ни один nginx не сможет принимать такой трафик, как и одновременные соединения. Как следует разделить трафик на nginx / haproxy (DNS lvl или любой доступный вариант Amazon / Google)? Сколько одновременных веб-сокетов сможет обработать один nginx?

Пытался собрать соответствующую информацию из поиска Google и сообщений SO.

Есть люди, которые запускают чат-серверы за балансировщиками нагрузки haproxy при еще более высоких нагрузках. Наибольшая нагрузка, о которой мне сообщили в частной электронной почте (с копией страницы статистики), составляла около 300 тыс. Соединений на процесс (отсюда 600 тыс. Сокетов). Обратите внимание, что в Linux по умолчанию процесс ограничен 1 млн файловых дескрипторов (следовательно, 500 тыс. Сквозных соединений), но это можно настроить в / proc.

Самое важное, что нужно учитывать при таких нагрузках, - это необходимый вам объем оперативной памяти. Буферы сокетов на стороне ядра всегда будут требовать не менее 4 КБ на направление на каждую сторону, следовательно, минимум 16 КБ на сквозное соединение. HAProxy 1.5 и ниже будет иметь два буфера на каждое соединение (например, для веб-сокета достаточно буфера размером 4 КБ). 1.6 может работать без этих буферов и выделять их только для редких соединений с данными. По крайней мере, это 16 ГБ ОЗУ на миллион подключений, или около 24 ГБ в старых версиях. Возможно, стоит распределить это по нескольким процессам на SMP-машинах, чтобы уменьшить задержку. Имейте в виду, что для простого установления 1M соединений может потребоваться 10 секунд при 100 000 соединений в секунду. Все эти соединения требуют некоторой работы для каждого из нескольких байтов, а работа с 1M активных соединений определенно вызовет важную работу и высокую нагрузку на систему.