Хранилища backends
Вступление
Varnish имеет подключаемые модули для работы с хранилищами. Он может хранить данные в различных хранилищах, которые могут иметь разные характеристики производительности. По умолчанию используется хранилище malloc с ограниченным размером. Для серьёзного развертывания Varnish, вероятно, потребуется настроить параметры хранилища.
default
синтаксис: default[,size]
Хранилище по умолчанию — это псевдоним для umem, если он доступен, иначе malloc.
malloc
синтаксис: malloc[,size]
Malloc — это хранилище, основанное на памяти. Каждый объект будет выделен из памяти. Если на системе недостаточно памяти, будет использоваться свопинг.
Обратите внимание, что ограничение размера ограничивает только фактическое хранилище, и примерно 1 КБ памяти на объект, используемой для различных внутренних структур, также включены в фактическое хранилище.
Параметр размера указывает максимальное количество памяти, которое varnishd будет выделять. Размер предполагается в байтах, если не указано одно из следующих суффиксов:
K, k Размер выражен в килобайтах.
M, m Размер выражен в мегабайтах.
G, g Размер выражен в гигабайтах.
T, t Размер выражен в терабайтах.
Размер по умолчанию — неограничен.
Производительность malloc ограничена скоростью памяти, поэтому она очень быстрая. Если набор данных больше, чем доступная память, производительность будет зависеть от способности операционной системы эффективно выполнять страничный обмен.
umem
синтаксис: umem[,size]
Umem — это лучшая альтернатива хранилищу malloc, где доступен libumem. Все остальные аспекты конфигурации считаются одинаковыми с malloc.
libumem реализует механизм выделения памяти, подобный механизму выделения памяти ядра, используемому практически во всех современных операционных системах, и считается более эффективным и масштабируемым, чем классические реализации. В частности, libumem включён в семейство операционных систем, унаследованных от OpenSolaris, где jemalloc(3) обычно недоступен.
Если libumem не используется иначе, Varnish будет использовать его только для выделения памяти и сохранит стандартный аллокатор libc для всех других целей выделения памяти Varnish.
Если libumem уже загружен при инициализации Varnish, выводится это сообщение:
notice: libumem was already found to be loaded
and will likely be used for all allocations
чтобы указать, что libumem будет использоваться не только для хранения. Вероятные причины этого:
- некоторая библиотека
varnishdбыла связана с libumem (скорее всегоlibpcre2-8, проверьте сldd) -
LD_PRELOAD_64=/usr/lib/amd64/libumem.so.1,LD_PRELOAD_32=/usr/lib/libumem.so.1илиLD_PRELOAD=/usr/lib/libumem.so.1установлено
Varnish также выведет это сообщение, чтобы порекомендовать настройки для использования libumem для всех выделений:
it is recommended to set UMEM_OPTIONS=perthread_cache=0,backend=mmap before starting varnish
Это рекомендация должна соблюдаться для достижения оптимальной конфигурации libumem для Varnish. Установка этой переменной окружения перед запуском Varnish обязательна, потому что libumem нельзя переконфигурировать после загрузки.
file
синтаксис: file,path[,size[,granularity[,advice]]]
Хранилище file хранит объекты в виртуальной памяти, поддерживаемой неподключённым файлом на диске с mmap, полагаясь на ядро для обработки страничного обмена по мере доступа к частям файла.
Это подразумевает, что необходимо иметь достаточную виртуальную память для размещения размера файла в дополнение к любой памяти, которая необходима Varnish. Традиционно, предел виртуальной памяти настраивается с помощью ulimit -v, но современные операционные системы имеют другие абстракции для этого предела, такие как группы управления (Linux) или средства контроля ресурсов (Solaris).
Параметр «path» указывает путь к файлу-источнику или к каталогу, в котором varnishd создаст файл-источник.
Параметр «size» указывает размер файла-источника. Размер предполагается в байтах, если не указано одно из следующих суффиксов:
K, k Размер выражен в килобайтах.
M, m Размер выражен в мегабайтах.
G, g Размер выражен в гигабайтах.
T, t Размер выражен в терабайтах.
Если «path» указывает на существующий файл и размер не указан, будет использован размер существующего файла. Если «path» не указывает на существующий файл, то ошибка не указать размер.
Если файл-источник уже существует, он будет усечён или расширен до указанного размера.
Обратите внимание, что если varnishd должен создать или расширить файл, он не будет предварительно выделять добавленное пространство, что приведёт к фрагментации, что может отрицательно сказаться на производительности на жёстких дисках с вращающимися пластинами. Создание файла хранилища с помощью dd(1) сведёт фрагментацию к минимуму.
Параметр «granularity» указывает зернистость выделения. Все выделения округляются до этого размера. Зернистость предполагается в байтах, если не указаны суффиксы, описанные для размера.
По умолчанию зернистость равна размеру страницы VM. Размер следует уменьшить, если у вас много небольших объектов.
Производительность файлового хранилища обычно ограничена скоростью записи устройства и, в зависимости от использования, временем поиска.
Параметр «advice» сообщает ядру, как varnishd ожидает использовать этот сопоставленный регион, чтобы ядро могло выбрать соответствующие методы предварительной загрузки и кэширования. Возможные значения — normal, random и sequential, соответствующие аргументам madvise() advice MADV_NORMAL, MADV_RANDOM и MADV_SEQUENTIAL соответственно. По умолчанию random.
В Linux большие объекты и вращающиеся диски должны выиграть от «последовательного» режима.
deprecated_persistent
синтаксис: deprecated_persistent,path,size {experimental}
Перед использованием прочитайте Сообщение о постоянном хранении!
Постоянное хранилище. Varnish будет хранить объекты в файле таким образом, чтобы обеспечить сохранение большинства объектов в случае запланированного или незапланированного завершения работы Varnish.
Параметр «path» указывает путь к файлу-источнику. Если файл не существует, Varnish создаст его.
Параметр «size» указывает размер файла-источника. Размер выражен в байтах, если не указано одно из следующих суффиксов:
K, k Размер выражен в килобайтах.
M, m Размер выражен в мегабайтах.
G, g Размер выражен в гигабайтах.
T, t Размер выражен в терабайтах.
Varnish разделит файл на логические секции и запишет в них данные, как в кольцевом буфере. Одновременно будет открыта только одна секция. Полные секции запечатываются. При запуске Varnish после завершения работы он удалит содержимое любой секции, которая не запечатана.
Обратите внимание, что отключение постоянных секций и одновременное использование запретов может вызвать проблемы. Это связано с тем, что запреты, добавленные во время отключения секции, не будут применены к секции при её повторном включении в кэш. В результате, ранее запрещённые объекты могут снова появиться.
Copyright © 2006 Verdens Gang AS
Copyright © 2006–2020 Varnish Software AS
Licensed under the BSD-2-Clause License.
https://varnish-cache.org/docs/7.4/users-guide/storage-backends.html