Библиотека сайта rus-linux.net
Фреймворк Zotonic
Глава 9 из книги "Производительность приложений с открытым исходным кодом".
Оригинал: Zotonic
Авторы: Arjan Scherpenisse и Marc Worrell
Перевод: Н.Ромоданов
Бенчмарки, статистика и оптимизации
Мы не доверяем сильно бенчмаркам, поскольку часто они проверяют только небольшие части системы и не отражают производительность всей системы. Тем более, что в системе много работающих частей, а в Zotonic неотъемлемой частью архитектуры системы являются система кэширования и обработка шаблонов общего доступа.
Упрощенный бенчмарк
То, что может сделать бенчмарк, это показать, что в системе вы должны оптимизировать в первую очередь.
С учетом этого мы протестировали Zotonic при помощи бенчмарка TechEmpower JSON, который тестировал в основном диспетчер запросов, кодер JSON, обработку запросов HTTP и стек TCP/IP.
Тестовые испытания проводились на Intel i7 Quad Core M620@2.67 GHz. Выполнялась команда wrk -c 3000 -t 3000 http://localhost:8080/json
. Полученные результаты приведены в таблице 9.1.
Платформа | x1000 запросов/сек |
Node.js | 27 |
Cowboy (/Erlang) | 31 |
Elli (/Erlang) | 38 |
Zotonic | 5,5 |
Zotonic без журнала доступа | 7,5 |
Zotonic без журнала доступа, с пулом диспетчеризации | 8,5 |
Таблица 9.1. Результаты бенчмарка
При таком микротестировании более низкие баллы получили динамический диспетчер Zotonic и абстракция протокола HTTP. Это то, что решается относительно легко и решения уже были подготовлены:
- Замена стандартного журнала регистрации в webmachine на более эффективный
- Компиляция правил диспетчеризации в модуль языка Erlang (вместо отдельного процесса, интерпретирующего список правил диспетчеризации)
- Замена обработчика MochiWeb HTTP на обработчик Elli HTTP
- Использование массивов байтов в Webmachine вместо нынешних символьных списков
Производительность в реальных условиях
С использованием фреймворка Zotonic был создан сайт национального голосования об отречении голландской королевы и последующей инаугурацией нового голландского короля в 2013 году. Заказчик просил обеспечить 100% доступность и высокую производительность, а также возможность обрабатывать 100 000 голосов в час.
Решение представляло собой систему с четырьмя виртуальными серверами, каждый с 2 Гб оперативной памяти и работающий со своей собственной независимой системой Zotonic. Три узла обрабатывали голосование, а один узел был для администрирования. Все узлы были независимыми, но каждый голос обрабатывался совместно по меньшей мере на двух узлах, поддерживающих голосование, так что в случае, если узел выходил из строя, не был потерян ни один голос.
На один голос требовалось приблизительно 30 запросов HTTP - для динамического HTML (на нескольких языках), Ajax и статических составляющих, например, css и javascript. Несколько запросов требовалось для выбора одного из трех вариантов голосования и заполнения информации о голосующем.
Когда проводилось тестирование, мы, не нагружая систему по максимуму, легко выполнили требования заказчика. Моделирование голосования был остановлено при выполнении 500 тысяч полных процедур голосования в час, при этом ширина канала была около 400 Мбит/сек и 99% запросов обрабатывались за время, меньшее 200 миллисекунд.
Из сказанного выше ясно, что фреймворк Zotonic можно использовать для поддержки популярных динамических веб-сайтов. Мы получали более высокую производительность на реальном оборудовании, в частности по производительности ввода/вывода и по доступу к базе данных.
Продолжение статьи: Заключение.