2013-07-03 1 views

ответ

37

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

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

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

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

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

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

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

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

91

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

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

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

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

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

Сервер никогда не использовал более 13 гигабайт оперативной памяти, а процессор был стабилен около 60%.

Имея не менее 30 гигабайт RAM, вы можете обрабатывать 1 миллион параллельных сокетов. Необходимый процессор зависит от требуемой пропускной способности.

+4

Я предполагаю, что это был какой-то вкус linux. Не могли бы вы поделиться дополнительной информацией о настройке ядра? максимальные файловые дескрипторы/размеры окна tcp и т. д.? – quixver

+9

Это был ванильный Amazon Linux. Максимальные дескрипторы файлов были увеличены. Буфер TCP-отправки был уменьшен до 1600 байт (по умолчанию выполняется Lightstreamer, хотя его можно настроить вручную). MSS был по умолчанию. –

+0

Является ли эта мягкая полностью бесплатной или нужна определенная плата за ее использование? –

Смежные вопросы