Как стать автором
Обновить

C10k (Проблема 10000 соединений) на разных языках/платформах

Время на прочтение2 мин
Количество просмотров39K


UPD. Вторая версия бенчмарка тут: eric.themoritzfamily.com/websocket-demo-results-v2.html


Предупреждение: если у вас есть претензии к бенчмарку и/или к коду, бенчмарк выложен на Гитхабе, что позволяет вам править баги самим или сообщить о багах автору.

Подробнее о проблеме 10000 соединений: ru.wikipedia.org/wiki/Проблема_10000_соединений

Как с проблемой 10000 соединений через вебсокеты справятся Erlang, Go, Haskell (Snap), Java (Webbit), Node.js (websocket) и Python (ws4py)?



Во время бенчмарка каждую миллисекунду запускается новый клиент. Раз в секунду каждый клиент отсылает сообщение с текущим временем на сервер, а сервер отсылает это сообщение назад.

Реализация Время на подсоединение (среднее) Задержка (средняя) Сообщений Соединений Таймаутов соединения
Erlang 865ms 17ms 2849294 10000 0
Haskell (Snap) 168ms 227ms 1187413 4996 108
Java (Webbit) 567ms 835ms 1028390 4637 157
Go 284ms 18503ms 2398180 9775 225
Node.js (websocket) 768ms 42580ms 1170847 5701 4299
Python (ws4py) 1561ms 34889ms 1052996 4792 5208


Реализации на Питоне и Node.js падали на примерно половине соединений.

Несмотря на то, что ожидалось, что Go порвет Erlang по производительности, задержка была намного выше и на 225 соединениях сервер запрос не обработал.

Java Webbit была темной лошадкой, но в итоге показала результаты лучше, чем Go (157 необработанных подсоединений).

Самое удивительное, что gevent (Python) и node.js перестали работать после 5001 и 4792 соединений соответсвенно, несмотря на то, что и тот и другой были реализованы специально для решения проблемы C10k.

Более детальное описание, код и сырые данные — на GitHub'е: github.com/ericmoritz/wsdemo/blob/master/results.md

UPD. В сравнения включается все больше и больше людей, появились тесты для Tornado (Python)



UPD. Вторая версия бенчмарка тут: eric.themoritzfamily.com/websocket-demo-results-v2.html

Теги:
Хабы:
Всего голосов 94: ↑78 и ↓16+62
Комментарии258

Публикации

Истории

Работа

Ближайшие события

19 августа – 20 октября
RuCode.Финал. Чемпионат по алгоритмическому программированию и ИИ
МоскваНижний НовгородЕкатеринбургСтавропольНовосибрискКалининградПермьВладивостокЧитаКраснорскТомскИжевскПетрозаводскКазаньКурскТюменьВолгоградУфаМурманскБишкекСочиУльяновскСаратовИркутскДолгопрудныйОнлайн
3 – 18 октября
Kokoc Hackathon 2024
Онлайн
24 – 25 октября
One Day Offer для AQA Engineer и Developers
Онлайн
25 октября
Конференция по росту продуктов EGC’24
МоскваОнлайн
26 октября
ProIT Network Fest
Санкт-Петербург
7 – 8 ноября
Конференция byteoilgas_conf 2024
МоскваОнлайн
7 – 8 ноября
Конференция «Матемаркетинг»
МоскваОнлайн
15 – 16 ноября
IT-конференция Merge Skolkovo
Москва
25 – 26 апреля
IT-конференция Merge Tatarstan 2025
Казань