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

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

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

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

решение1

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

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

Связанный контент