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

UnixForum





Библиотека сайта rus-linux.net

Фреймворк Zotonic

Глава 9 из книги "Производительность приложений с открытым исходным кодом".

Оригинал: Zotonic
Авторы: Arjan Scherpenisse и Marc Worrell
Перевод: Н.Ромоданов

Заключение

Когда создается система или фреймворк управления контентом, то важно учитывать весь стек обработки вашего приложения, наичная от веб-сервера, системы обработки запросов, систем кэширования и вплоть до системы баз данных. Все части должны хорошо совместно работать для того, чтобы обеспечить хорошую производительность.

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

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

Еще одним вариантом оптимизации при обработке внезапных взрывов популярности является динамическое выделение аналогичных запросов, одноразовая их обработка и получение одного и того же результата. Когда этот вариант реализован хорошо, можно не использовать прокси и все страницы HTML можно генерировать динамически.

Язык Erlang хорошо подходит для создания динамических веб-систем благодаря наличию легковесных процессов, обработки отказов и возможности управления памятью.

Т.к. используется язык Erlang, фреймворк Zotonic позволяет создавать очень компетентную и хорошо работающую систему или фреймворк управления контентом, при этом нет необходимости использовать отдельные веб-серверы , кэширующие прокси-серверы, серверы с кэш памятью или средства обработки электронной почты. Это значительно упрощает задачи управления системой.

На текущем аппаратном обеспечении один сервер Zotonic может обрабатывать в секунду тысячи запросов динамических страниц, поддерживая, таким образом, во всемирной паутине работу самых быстрых веб-сайтов.

Благодаря языку Erlang, фреймворк Zotonic готов к будущему многоядерных систем с десятками ядер и многими гигабайтами памяти.

Благодарности

Авторы хотели бы поблагодарить Мишеля Клонхаммера (Michiel Klønhammer) из Maximonster Interactive Things, Андреаса Стениаса (Andreas Stenius), Маас-Маартена Зимана (Maas-Maarten Zeeman) и Атиллу Одедайя (Atilla Erdődi).

Ссылки:

  1. Тем не менее, можно поставить впереди еще один веб-сервер, например, когда на том же самом аппаратном сервере работают другие веб-системы. Но для обычных случаев это не требуется. Интересно, что типичной оптимизацией, которая используется в других фреймворках, является установка перед сервером приложений кэширующего веб-сервера, например, Varnish, предназначенного для обслуживания статических файлов, но для Zotonic это существенно не ускорит обработку таких запросов, поскольку Zotonic также кэширует статические файлы в памяти.
  2. Обратите внимание, что в Zotonic не настраивается ETag. В некоторых браузерах при каждом использовании файла проверяется ETag — для этого делается запрос к серверу. Этот подход бросает вызов самой идее кэширование и позволяет делать размер запросов меньше.
  3. Массив байтов, или двоичный массив, является в языке Erlang нативным типом данных. Если он меньше, чем 64 байта, то он копируется между процессами, более крупные массивы являются общими для процессов. Язык Erlang также позволяет совместно использовать в различных процессах части массивов — для этого используются ссылки на эти части, а не копирования самих данных, что делает такие массивы байтов типами данных, которые эффективны и просты при их использовании.
  4. Смотрите «Значения задержек, о которых должен знать каждый программист» должен знать" по ссылке http://www.eecs.berkeley.edu/~rcs/research/interactive_latency.html
  5. В дополнение к этим механизмам, сервер базы данных выполняет некоторое кэширование в памяти, но этот вопрос выходит за рамки настоящей главы.
  6. Смотрите http://www.erlang.org/doc/efficiency_guide/advanced.html#id68921
  7. В языке Erlang также можно совместно использовать отдельные части массива с помощью ссылок, указывающих на эти части, в результате чего отпадает необходимость копирования этих данных. Вставку в массив байтов можно представить как список ввода/вывода, состоящий из трех частей: ссылок на начальные символы, которые не изменяются, вставляемое значение и ссылки на неизменяемые байты, находящиеся в конце.

Вернуться к началу статьи.