Websocket хорош, но сможет ли он обрабатывать 1000000 одновременных подключений?
Сколько системных ресурсов потребуется для поддержания 1 000 000 веб-узлов?
Обновленный ответ
Краткий ответ : да, но это дорого.
Длинный ответ :
Этот вопрос не является уникальным для WebSockets, поскольку WebSockets по сути своей являются долгоживущими TCP-сокетами с HTTP-подобным рукопожатием и минимальным фреймом для сообщений.
Реальный вопрос: может ли один сервер обрабатывать 1 000 000 одновременных подключений к сокетам и какие ресурсы сервера это потребляет? Ответ усложняется несколькими факторами, но 1000000 одновременных активных подключений к сокетам возможны для системы надлежащего размера (много ЦП, ОЗУ и быстрая сеть), а также с настроенной серверной системой и оптимизированным серверным программным обеспечением.
Количество подключений не является основной проблемой (это в основном вопрос настройки ядра и достаточного количества памяти), это обработка и отправка / получение данных в / из каждого из этих подключений. Если входящие соединения распределены в течение длительного периода, и они в основном простаивают или нечасто отправляют небольшие фрагменты статических данных, то вы, вероятно, можете получить намного больше, чем даже 1000000 одновременных подключений. Однако даже в этих условиях (медленные соединения, которые в основном простаивают) вы все равно будете сталкиваться с проблемами с сетями, серверными системами и серверными библиотеками, которые не настроены и не предназначены для обработки большого количества подключений.
См. Ответ Алессандро Алиноне о приблизительном использовании ресурсов для 500 000 подключений.
Вот несколько старых, но все еще применимых ресурсов, чтобы прочитать о том, как настроить сервер и написать серверное программное обеспечение для поддержки большого количества подключений:
В современных системах обработка 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 миллион одновременных сокетов. Требуемый ЦП зависит от необходимой вам пропускной способности данных.
источник