Наши партнеры

UnixForum





Библиотека сайта 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 можно использовать для поддержки популярных динамических веб-сайтов. Мы получали более высокую производительность на реальном оборудовании, в частности по производительности ввода/вывода и по доступу к базе данных.


Продолжение статьи: Заключение.