Справка
Работа под нагрузкой
В среднем, система может справляться с 20ю запросами в секунду (речь идёт о среднем сервере и средней по нагруженности странице, например, отображение статьи).
Существует ряд инструментов, созданных для того, чтобы увеличить этот показатель.
Жёсткое кеширование
Данный вид кеша сохраняет готовую страницу в файл, а при следующем запросе из того же URL выдаёт сохранённую копию (при этом не запускается механизм рендеринга, а также не запускается ядро системы).
Можно выборочно использовать данный механизм. Для этого, на нужной странице необходимо установить код [hard_cache].
Данный вид кеш не является “живым”. Его можно удалить нажав в настройках “очистить всё”.
Такое кеширование увеличивает производительность системы в 25 раз, доводя количество запросов в секунду до 500 (для “натуральной” статики на тестируемых серверах этот показатель доходил до 800-1000 запросов в секунду).
Кеш SQL
Для медленных SQL серверов предусмотрен режим кеширования результатов запросов на диск (либо в память, если включён следующий режим).
Кеш в памяти
Используя memcached (это расширение неободимо для работы данного режима), система сохраняет в памяти основную информацию, необходимую для работы используемых модулей (структура проекта, шаблоны, настройки полей и т.д).
Кеширование можно использовать в двух режимах:
-
Структура проекта, настройки и шаблоны
-
Структура + данные
Для того, чтобы загрузка кеша не занимала много времени, существует возможность ограничить максимальный объём кеша.
При включённом кеше SQL, результаты запросов будут записываться в памяти, а не на диске.
Динамический (живой) кеш
Для каждой части или секции части (например, для секции условия или перебора) возможно применение специальных настроек кеширования.
В этом случае, результат работы части (или секции) будет записываться в файл и при следующих обращениях загружаться.
Для такого кеша есть набор условий и связанных с ними настроек.
Такой кеш перестаёт жить либо по истечении указанного времени, либо когда изменились (удалились или добавились) объекты, участвовавшие при его генерации.
Также для одного и того же участка может существовать набор кешированных данных. Например, при определённых настройках, можно сделать свой кеш для каждого отдельного пользователя. Если делать кеш для компонента, то он может зависеть от входных переменных этого компонента.
От чего ещё может зависеть динамический кеш:
-
URL
-
Текущий экземпляр модуля
-
Авторизация пользователя
-
Входящих переменных
-
Значений циклов
Подробнее о нём можно почитать на этой странице .
При правильном подходе, данное кеширование способно существенно увеличить производительность системы.
Динамический кеш работает с учётом иерархии. Так, вышестоящее кеширование унаследует все зависимости от нижестоящих кешированных блоков (от каких частей и от каких данных они зависят). При изменении любых нижестоящих кешированных блоков, задействованных в процессе рендеринга, будет также изменён и вышестоящий кеш. Такой подход позволяет оставлять кеш всегда в актуальном состоянии и сбрасывать только тот кеш, который непосредственно связан с изменяемыми данными.
Для небольших проектов возможно подключение кеширование в самом начале рендеринга проекта (например, в части “Страница”, которая отвечает за вывод всех страниц сайта, можно установить настройку ^&). В этом случае, все страницы сайта будут кешироваться, что позволит отдавать их в 5 раз быстрее (около 100 запросов в секунду).
Потоки
Для загруженных проектов система предлагает использовать потоки. В этом случае администратор определяет количество потоков, максимальное время простоя потока (0 - бесконечность) и максимальную потребляемую память потока.
После получения запроса от веб-сервера, система запускает поток, который не завершается после формирования ответа. Вместо этого он остаётся “висеть” на сервере в режиме ожидания до получения следующего запроса.
Данный подход позволяет экономить ресурсы, затрачиваемые для старта ядра системы. Кроме этого, поток хранит в себе данные для формирования следующих запросов, что позволяет экономить время на доступе к базе данных.
Эффективность использования потоков (с точки зрения производительности) зависит от настроек и каждого конкретного случая.
Перегрузка сервера
В настройках системы можно указать максимальное значение Load Average, после которого администратору системы уйдёт письмо о превышении допустимой нагрузки.
Кроме этого, можно блокировать всех пользователей (выдавать ошибку 502), если нагрузка превысила допустимую норму.
Блокирование нежелательных пользователей
В настройках системы можно заблокировать нежелательных пользователей по IP-адресу, а также ботов по их UserAgent-у.
Кроме этого, с помощью настройки зон (подробнее можно прочитать здесь ) можно запретить вход для пользователей из отдельных городов, стран и подсетей.
Дополнительные инструменты для администратора
В случаях столкновения с избыточной загрузкой системы рекомендуется воспользоваться набором инструментов, который поможет выявить её источник:
-
Статистика посещаемости (покажет IP адреса и сайты-источники, создающие избыточную нагрузку);
-
Отладка частей модуля и компонентов (показывает максимальное, среднее и суммарное время выполнения каждой части в системе);
-
Встроенный отладчик, который покажет тяжёлые запросы, а также поможет выявить узкое место в системе.
Читать далее про "Хосты"