Скільки системних ресурсів буде проведено, щоб 1 000 000 веб-розетки були відкритими? [зачинено]


122

Websocket хороший, але чи зможе він обробити 1 000 000 одночасних з'єднань?
Скільки системних ресурсів буде проведено, щоб 1 000 000 веб-розетки були відкритими?

Відповіді:


65

Оновлений відповідь

Коротка відповідь : так, але це дорого.

Довга відповідь :

Це питання не характерне для WebSockets, оскільки WebSockets - це принципово довговічні TCP-сокети з HTTP-подібним рукостисканням і мінімальним обрамленням для повідомлень.

Справжнє питання: чи міг би один сервер обробляти 1 000 000 одночасних підключень сокет і які серверні ресурси споживає це? Відповідь ускладнюється кількома факторами, але 1 000 000 одночасних активних підключень сокета можливі для системи належного розміру (багато процесора, оперативної пам’яті та швидкої мережі) та налаштованої серверної системи та оптимізованого серверного ПЗ.

Кількість з'єднань не є основною проблемою (це здебільшого лише питання налаштування ядра та достатня кількість пам'яті), це обробка та відправка / отримання даних в / з кожного з цих з'єднань. Якщо вхідні з'єднання поширюються протягом тривалого періоду, і вони в основному простоюють або нечасто надсилають невеликі шматки статичних даних, то, ймовірно, ви можете отримати набагато вище, ніж навіть 1 000 000 одночасних з'єднань. Однак навіть за таких умов (повільні з’єднання, які в основному простоюють), ви все одно будете стикатися з проблемами з мережами, серверними системами та серверними бібліотеками, які не налаштовані і розроблені для обробки великої кількості з'єднань.

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

Ось декілька старих, але все ще застосовних ресурсів, щоб прочитати, як ви налаштували сервер і записали серверне програмне забезпечення для підтримки великої кількості з'єднань:


1
Одночасно 12 мільйонів підключень розеток можливі на одному JVM. Подивіться, як вони це зробили mrotaru.wordpress.com/2013/10/10/…
Жак Коортс

@JacquesKoorts thx
BG BRUNO

159

У сучасних системах обробка 1 млн одночасних TCP-з'єднань не є проблемою.

Я можу підтвердити це, спираючись на наші власні тести (повне розкриття: я - CTO у Lightstreamer).

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

Ми встановили Lightstreamer Server (який, серед іншого, є сервером WebSocket) на екземплярі m2.4xlarge. Це означає 8 ядер і 68,4 ГБ пам’яті.

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

Сервер ніколи не використовував більше 13 гігабайт оперативної пам’яті, а процесор стабільно становив близько 60%.

Принаймні 30 гігабайт оперативної пам’яті ви можете працювати з 1 мільйоном одночасних розеток. Необхідний процесор залежить від необхідної пропускної здатності даних.


7
Я припускаю, що це був якийсь смак Linux. Не могли б ви поділитися додатковою інформацією про налаштування ядра? максимум дескрипторів файлів / розміри вікна tcp тощо?
кіксвер

14
Це була ванільна Amazon Linux. Максимальні дескриптори файлів збільшені. Буфер передачі TCP було скорочено до 1600 байт (зроблено за замовчуванням Lightstreamer, хоча він може бути налаштований вручну). MSS був за замовчуванням.
Алессандро Аліноне

Цей м'який повністю безкоштовний або потрібна певна плата, щоб використовувати його?
Автанділ Каврелішвілі

@AvtandilKavrelishvili: Є і безкоштовне видання, і платне видання.
Алессандро Аліноне

Чи буде легше на сервері, якби замість вебсокетів я використовував регулярне опитування?
mFeinstein
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.