Сколько системных ресурсов потребуется для поддержания 1 000 000 веб-сокетов? [закрыто]

122

Websocket хорош, но сможет ли он обрабатывать 1000000 одновременных подключений?
Сколько системных ресурсов потребуется для поддержания 1 000 000 веб-узлов?

кк лу
источник

Ответы:

65

Обновленный ответ

Краткий ответ : да, но это дорого.

Длинный ответ :

Этот вопрос не является уникальным для WebSockets, поскольку WebSockets по сути своей являются долгоживущими TCP-сокетами с HTTP-подобным рукопожатием и минимальным фреймом для сообщений.

Реальный вопрос: может ли один сервер обрабатывать 1 000 000 одновременных подключений к сокетам и какие ресурсы сервера это потребляет? Ответ усложняется несколькими факторами, но 1000000 одновременных активных подключений к сокетам возможны для системы надлежащего размера (много ЦП, ОЗУ и быстрая сеть), а также с настроенной серверной системой и оптимизированным серверным программным обеспечением.

Количество подключений не является основной проблемой (это в основном вопрос настройки ядра и достаточного количества памяти), это обработка и отправка / получение данных в / из каждого из этих подключений. Если входящие соединения распределены в течение длительного периода, и они в основном простаивают или нечасто отправляют небольшие фрагменты статических данных, то вы, вероятно, можете получить намного больше, чем даже 1000000 одновременных подключений. Однако даже в этих условиях (медленные соединения, которые в основном простаивают) вы все равно будете сталкиваться с проблемами с сетями, серверными системами и серверными библиотеками, которые не настроены и не предназначены для обработки большого количества подключений.

См. Ответ Алессандро Алиноне о приблизительном использовании ресурсов для 500 000 подключений.

Вот несколько старых, но все еще применимых ресурсов, чтобы прочитать о том, как настроить сервер и написать серверное программное обеспечение для поддержки большого количества подключений:

канак
источник
1
По всей видимости, на одной JVM возможно 12 миллионов подключений к сокетам. Посмотрите, как они это сделали mrotaru.wordpress.com/2013/10/10/…
Jacques Koorts
@JacquesKoorts thx
BG BRUNO
159

В современных системах обработка 1 миллиона одновременных TCP-соединений не является проблемой.

Я могу подтвердить это на основании наших собственных тестов (полное раскрытие: я технический директор Lightstreamer).

Нам приходилось несколько раз демонстрировать некоторым из наших клиентов, что 1 миллион соединений может быть достигнут на одном устройстве (и не обязательно на супер-монстр-машине). Но позвольте мне вспомнить конфигурацию, в которой мы тестировали 500K одновременных подключений, поскольку это гораздо более свежий тест, выполненный на Amazon EC2.

Мы установили Lightstreamer Server (который, помимо прочего, является сервером WebSocket) на экземпляре m2.4xlarge. Это означает 8 ядер и 68,4 ГиБ памяти.

Мы запустили 11 клиентских машин для создания 500 000 одновременных подключений к серверу Lightstreamer. Тест был настроен так, чтобы общая исходящая пропускная способность с сервера составляла 90 000 обновлений / с, что привело к пиковым значениям исходящей пропускной способности 450 Мбит / с.

Сервер никогда не использовал более 13 ГиБ ОЗУ, а ЦП работал стабильно около 60%.

Имея как минимум 30 ГиБ ОЗУ, вы можете обрабатывать 1 миллион одновременных сокетов. Требуемый ЦП зависит от необходимой вам пропускной способности данных.

Алессандро Алиноне
источник
7
Я предполагаю, что это был какой-то привкус Linux. Не могли бы вы поделиться дополнительной информацией о том, как настраивалось ядро? максимальные дескрипторы файлов / размеры окна TCP и т. д.?
quixver
14
Это был ванильный Amazon Linux. Увеличено максимальное количество дескрипторов файлов. Буфер отправки TCP был уменьшен до 1600 байтов (по умолчанию это делается Lightstreamer, хотя его можно настроить вручную). MSS было по умолчанию.
Алессандро Алиноне
Эта программа полностью бесплатна или для ее использования требуется некоторая плата?
Автандил Каврелишвили 06
@AvtandilKavrelishvili: Есть как бесплатная версия, так и платная.
Алессандро Алиноне
Было бы проще на сервере, если бы я вместо веб-сокетов использовал обычный опрос?
Michel Feinstein