Websocket хорош, но сможет ли он обрабатывать 1 000 000 одновременных соединений?
Сколько системных ресурсов будет храниться для хранения 1 000 000 открываемых веб-карт?Сколько системных ресурсов будет храниться для хранения 1 000 000 открываемых веб-карт?
ответ
Обновлено Ответ
Короткий ответ: да, но это дорого.
Длинный ответ:
Этот вопрос не является уникальным для WebSockets, поскольку WebSockets принципиально долгоживущие TCP сокеты с HTTP-как рукопожатиями и минимальным обрамлением для сообщений.
Реальный вопрос: может ли один сервер обрабатывать 1 000 000 одновременных соединений сокетов и какие ресурсы сервера будут потреблять? Ответ усложняется несколькими факторами, но для системы с надлежащим размером (много процессора, оперативной памяти и быстрой сети) возможно использование 1 000 000 одновременных подключений сокетов, а также настроенная серверная система и оптимизированное серверное программное обеспечение.
Количество соединений не является основной проблемой (это в основном вопрос о настройке ядра и достаточном объеме памяти), это обработка и отправка/получение данных в/из каждого из этих соединений. Если входящие соединения распространяются в течение длительного периода времени, и они в основном неаккуратно или редко посылают небольшие фрагменты статических данных, то вы, вероятно, можете получить намного больше, чем даже 1 000 000 одновременных соединений. Однако даже в таких условиях (медленные соединения, которые в основном не работают) вы все равно столкнетесь с проблемами сетей, серверных систем и серверных библиотек, которые не настроены и не предназначены для обработки большого количества подключений.
См. Ответ Алессандро Алиноне о приблизительном использовании ресурсов для 500 000 подключений.
Вот некоторые старые, но до сих пор применяемые ресурсы, чтобы прочитать о том, как вы бы настроить сервер и написать программное обеспечение сервера для поддержки большого числа соединений:
В современных системах обработка 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 миллион параллельных сокетов. Необходимый процессор зависит от требуемой пропускной способности.
- 1. 1 000 000 000 вычислений на микросекунду?
- 2. 000 000 000 000 000-й номер
- 3. Строка 999999999.9999999999 округлена до 1 000 000 000 BigDecimal
- 4. Фильтр потока # Испускает память для 1 000 000 предметов
- 5. 125 000 000 элементов массива?
- 6. Сколько GB выделено для 3D-массива размером 10 000 x 10 000 x 10 000?
- 7. preg_replace конвертировать 1 000 000 слов в слово 1 миллион
- 8. Последовательная работа через таблицу MYSQL с 1 000 000 записей?
- 9. Поиск целочисленной суммы в массиве из 1 000 000
- 10. Как отформатировать 1000000 до 1 000 000 и т. Д.
- 11. сортировка 50 000 000 номеров
- 12. 000 000 000,00 больше нуля?
- 13. Альтернативные методы хранения 1 000 000 строк символов в программировании на языке С
- 14. Номер показывает 1e + 06 вместо 1 000 000
- 15. Почему я не могу зарезервировать 1 000 000 000 в моем векторе?
- 16. Подтверждение MVC для номера телефона США (000) -000-0000 или 000-000-0000
- 17. Программа не работает после ввода 1 000 000 номеров?
- 18. Почему эта реализация слияния составляет 1 000 000, так долго?
- 19. Каков наилучший диапазон чисел для использования отношений идентификационных номеров в PowerPivot: от 1 до 500 000 или от 1 000 000 до 1 500 000?
- 20. Javascript regex: создавать разные пространства в зависимости от длины: 1 000, 10 000, 100 000
- 21. Лучшая практика архивирования огромного стола из более чем 1 000 000 000 строк
- 22. Сбой списка C++ STL с номерами более 1 000 000 000
- 23. Как конвертировать 10 000 000 из 1 000 000 в SQL oracle или (конвертировать миллион в lac)?
- 24. Как достичь формата номера телефона C++: (000) -000-000?
- 25. Hex - сколько в серии 000 до FFF?
- 26. Вставьте 10 000 000+ строк в графы
- 27. Какой тип данных можно использовать для хранения значения факториала 100 000 000?
- 28. Xcode. Неявное преобразование из длинного длинного в длинное изменение значения от 10 000 000 000 000 000 до 1 575 856 128
- 29. Почему 1..99,999 == "1" .. "99,999" в R, но 100 000! = "100 000"?
- 30. Запуск цикла 29 000 000 итераций, быстрее в lua
Я предполагаю, что это был какой-то вкус linux. Не могли бы вы поделиться дополнительной информацией о настройке ядра? максимальные файловые дескрипторы/размеры окна tcp и т. д.? – quixver
Это был ванильный Amazon Linux. Максимальные дескрипторы файлов были увеличены. Буфер TCP-отправки был уменьшен до 1600 байт (по умолчанию выполняется Lightstreamer, хотя его можно настроить вручную). MSS был по умолчанию. –
Является ли эта мягкая полностью бесплатной или нужна определенная плата за ее использование? –