Namdak Tonpa (maxim) wrote,

Erlang Haskell OCaml 23K socket conns на i7640M

Спасибо lionet, levgem, thesz, nponeccop, thedeemon, gds которые показали нам следующее:

1. Все функциональные языки не базирующиеся на JVM подходят для сайтостроительства.
2. Все они показывают сравнимый результат.
3. Веб сервера в среднем в 10 раз быстрее чем веб-фрейморки, значить есть что оптимизировать.
4. Колоичество сокет соединений который могут обслужить решения не равняются их теоретическому пределу. Сокет соединения самое узко веб серверов.

Я это делал что бы посмотреть какие есть альтернативы. Они есть и на них можно вполне писать. Очень понравился Ocsigen и действительно думаю что это мне подходит больше чем Хаскель и что либо другое. Конечно на Окамле и Хаскеле нету такой инфраструктуры как на Эрланге, но зато там есть все что нужно для работы. Если брать "Только Сайты" то функциональные языки готовы и могут заменить PHP, Ruby on Rails, Python для сайтостроительства. К сожелению моя брезгливость не позволит нарисовать графики сравнения с ПХП Руби и Питона, однако смысла в этом нет, они проиграют. Зачем выбирать лучшего из худших когда можно наслаждаться лучшими из лучших :)

Full Stack Web Site С1К Keep Alive Off
Лидер OCaml (даже на одном ядре)
теоретический синтетический тест не имеющий практического смысла


Хочу напомнить в этом соревновании учавствуют не перекладыватели байтов типа нгникса и веб-серверов используемые в приложения, а полноценные сайты с типизироваными страницами, модулями для парсинга урлов и т.д. с размерами страниц до 3КБ.

OCaml/Lwt/Ocsigen: make test.opt
wrk -c1000 -r10K -t4 http://rigdzin.cc:8080/
Requests/sec: 3429.36 single node (5163.73 on nginx balanced pair)

Erlang/Cowboy/Nitrogen: start.sh
wrk -c100 -r5K -t4 http://rigdzin.cc:8000/
Requests/sec: 2042.07

Haskell/Warp/Yesod: ./dist/build/yeso/yeso production +RTS -N4 -A10000000
wrk -c100 -r2K -t4 http://rigdzin.cc:3000/
Requests/sec: 1668.60

Raw Web Server C1K Keep Alive On
с референсным NGINX
теоретический максимум при 800 сокет соединениях
Intel® Core™ i7 CPU M 640 @ 2.80GHz × 4
теоретический синтетический тест


Максимальная теоритечиская пропускную способность которую можно зафиксировать на моем ноутбуке и те вызовы с помощью которых они были получены (количество сокет соединений 800).

ServerCommandMax RPS
Warpwrk -c 800 -r100k -t 4 -k http://localhost:3000/35K
Cowboywrk -c 800 -r100k -t 4 -k http://localhost:8080/36K
ACME-HTTPwrk -c 800 -r100k -t 4 -k http://localhost:8000/60K
NGINXwrk -c 800 -r 100k -t 4 -k http://rigdzin.cc/70K


Придется делать сравнительную таблицу инструментов тестирования wrk, httperf, ab, siege, erlbench, потому что все они выдают разные максимумы для разных учасников эксперимента.

Raw Web Server С30K Keep Alive On
при миллионах сообщений
Все прошли барьер 23К
практический результат близкий к реальности


К сожаления получить стабильные показатели для Warp было трудно как как иногда wrk для него выдавал 0 RPS с большим количеством таймаутов. Очевидно что у Warp существуют проблемы стабилизации. Cowboy в то же время показывл безошибочные результаты со "smooth" поведением. OCaml уперся во что-то и показал плато в 4К. Хваленый Acme-http (Haskell) показал потолок в 7К несмотря на то, что в С1К показал сумашедшие цифры.



Картинка сделана и использованием перлового скрипта lionet, который я переделал для работы с wrk. Исходники тут: https://github.com/maxlapshin/fpbenchmark
Tags: cs
Buy for 10 tokens
Buy promo for minimal price.
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 263 comments