Просмотров: 110939
Дата последнего изменения: 21.06.2024
Сложность урока:
2 уровень - несложные понятия и действия, но не расслабляйтесь.
3
4
5
Недоступно в лицензиях:
Ограничений нет
Производительность
| Цитатник веб-разработчиков.
Антон Долганин: На данный момент кеширование Битрикса фактически совершенно, и не стоит изобретать своих велосипедов. |
При большом объеме базы данных может возникнуть проблема производительности. Связано это со следующими причинами:
- обращения к этому массиву информации на чтение или на запись порождают конкурентные запросы;
- запросы сами по себе быстрые, но их такое число, что БД начинает выстраивать из них очередь;
- запросы медленные и тяжёлые, и к тому же очень частые.
Именно для разгрузки наиболее загруженных как по ресурсам, так и по времени, мест, и применяют многоуровневое кеширование. Каждую из технологий кеширования можно применять для каждого компонента в отдельности, выбирая оптимальный вариант для конкретного случая.
Примечание: пока разработчик не определится со стратегией кеширования и тем, что он хочет получить от неё, слепое включение кеширования может не дать ощутимых результатов.
Если в качестве примера брать интернет-магазин, то для каждого товара будет создан файл в кеше, чтобы при следующем обращении покупателя сервер не напрягался с запросами к БД. Это и позволяет запускать магазины уровня Эльдорадо.
Кеширование
Кеширование - технология, позволяющая сохранять результаты работы редко обновляемых и ресурсоемких кусков кода (например, активно работающих с базой данных) в специальном хранилище для более быстрого доступа к ним.
Для реализации этого созданы классы:
- Cache - финальный класс для кеширования PHP переменных и HTML результата выполнения скрипта.
В старом ядре есть классы:
- CPageCache - класс для кеширования HTML результата выполнения скрипта;
- CPHPCache - класс для кеширования PHP переменных и HTML результата выполнения скрипта.
Система Bitrix Framework включают в себя разные технологии кеширования:
- Кеширование компонентов (или Автокеширование) - все динамические компоненты, которые используются для создания веб-страниц, имеют встроенную поддержку управления кешированием.
Для использования этой технологии достаточно включить автокеширование одной кнопкой на административной панели. При этом все компоненты, у которых был включен режим автокеширования, создадут кеши и полностью перейдут в режим работы без запросов к базе данных.
- Неуправляемое кеширование - возможность задать правила кеширования ресурсоемких частей страниц. Результаты кеширования сохраняются в виде файлов в каталоге
/bitrix/cache/
. Если время кеширования не истекло, то вместо ресурсоемкого кода будет подключен предварительно созданный файл кеша.
Кеширование называется неуправляемым, поскольку кеш не перестраивается автоматически после модификации исходных данных, а действует указанное время после создания, которое задается в диалоге Параметры компонента.
Правильное использование кеширования позволяет увеличить общую производительность сайта на порядок. Однако необходимо учитывать, что неразумное использование кеширования может привести к серьезному увеличению размера каталога /bitrix/cache/
.
- Управляемый кеш - автоматически обновляет кеш компонентов при изменении данных. Для часто обновляемого большого массива данных использование управляемого кеша неоправданно.
- HTML кеш лучше всего включить на какой-нибудь редко изменяющийся раздел с регулярным посещением анонимных посетителей. Технология проста в эксплуатации, не требует от пользователя отслеживать изменения, защищает дисковой квотой от накрутки данных и самовосстанавливает работоспособность при превышении квоты или изменении данных. (Считается устаревшей, рекомендуется использовать технологию Композитный сайт.) В плане многосайтовости поддерживает только многосайтовость на одном домене.
- Кеширование меню. Для кеширования меню применяется специальный алгоритм, который учитывает тот факт, что большая часть посетителей - это незарегистрированные пользователи.
Кеш меню управляемый и обновляется при редактировании меню или изменении прав доступа к файлам и папкам через административный интерфейс и API.
Основные настройки кеширования расположены на странице Настройки кеширования (Настройки > Настройки продукта > Автокеширование).
Блокирующий режим в системе кеширования
Что такое «блокирующий режим» кеширования
С версии main 24.0.0 в кешировании появился «блокирующий режим». В таком режиме:
- кеш создается только одним потоком (например, хиты пользователей)
- остальные потоки получают старое значение кеша, пока новое значение не будет сгенерировано
- если старого значения нет, то каждый поток генерирует данные, как обычно
В ряде случаев такой подход сильно снижает нагрузку — смотрите ниже пример нагрузочного теста.
Пример нагрузочного теста
|
Нагрузочный тест на портале: авторизация на пустой странице и открытие страницы с компонентом списков новостей с небольшим временем жизни кеша.
В обычном режиме видим пики времени генерации, низкий общий rps и пики ошибок:
В «блокирующем режиме» видим более стабильное время генерации, более высокий rps, большее количество хитов, меньшее время генерации:
|
Когда работает «блокирующий режим»
«Блокирующий режим» сработает автоматически, если выполнено хотя бы одно из условий:
Чтобы все обращения к кешу были в блокирующем режиме, укажите use_lock => true
:
// Memcache
'cache' => [
'value' => [
'type' => [
'class_name' => '\\Bitrix\\Main\\Data\\CacheEngineMemcache',
'extension' => 'memcache'
],
'memcache' => ['host' => '127.0.0.1', 'port' => '11211',],
'use_lock' => true,
// 'servers' => [
// 0 => ['host' => '127.0.0.1', 'port' => 11211, 'weight' => 1],
// 1 => ['host' => '10.100.0.59', 'port' => 11211, 'weight' => 1],
// 2 => ['host' => 'unix:///var/run/memcached/memcached.sock', 'port' => '0'],
//],
'sid' => 'bxMemcache'
]
],
Когда работает обычный механизм кеширования
Обычный механизм кеширования работает в следующих случаях:
- кеш создан или очищен без указания параметра
['actual_data' => false]
- кеш истек по времени больше, чем на заданное время
ttl * $ttlMultiplier
- кеша очищен по тегу или по папке
- кеш очищен по ключу, но с момента его удаления прошло более 60 секунд
Примечание: по умолчанию компоненты поддерживают работу в «блокирующем режиме».