Можно ли запустить лак как с памятью, так и с диском?

8

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

Можно ли это сделать с помощью одного экземпляра лака? В документах описывают «файл» и «таНос» хранение в качестве отдельных опций.

user67641
источник

Ответы:

9

Используйте mallocметод. Он попытается поместить все в оперативную память, а ядро ​​при необходимости выгрузит его. Таким образом, вы используете память и диск вместе.

В то же время fileработает намного лучше, чем mallocкогда вы начинаете ударять по диску. Для получения дополнительной информации см .:

Самир
источник
Спасибо, это работает. Я думаю, что я просто использую метод malloc с доступной оперативной памятью и полагаюсь на сервер для кэширования диска (например, apache mod_disk_cache).
user67641
1
Есть ли способ подключить Varnish к другим основам памяти?
CMCDragonkai
1
Обратите внимание, что вы можете сделать наоборот: использовать только fileбэкэнд и полагаться на кэширование диска Linux, которое по умолчанию использует всю доступную память. Да, вы всегда записываете на диск (что может быть проблемой, если вы не используете твердотельные накопители), но при многократном чтении одних и тех же файлов вы будете много читать только из памяти.
Бенджамин
7

Вам нужно соответственно назвать хранилище следующим образом, и в vcl вы указываете, какое хранилище бэкэнда вы хотите использовать beresp.storage = storage_name. ,

Лак 3. * Варианты процесса

DAEMON_OPTS="-a :80 \
             -T localhost:6082 \
             -f /etc/varnish/default.vcl \
             -S /etc/varnish/secret \
             -s foo=malloc,512m \
             -s bar=file,/var/lib/varnish/varnish_storage.bin,512m"

vcl v3

sub vcl_fetch {
    if (req.url ~ "html") {
       set beresp.storage = "foo";
       set beresp.http.x-storage = "foo";
    } else {
       set beresp.storage = "bar";
       set beresp.http.x-storage = "bar";
    }
    return (deliver);
}

Для Varnish v4 вы можете следовать инструкциям официального блога https://info.varnish-software.com/blog/partitioning-your-varnish-cache

колчан
источник
Что делает if (req.url ~ "html")условие? Я думаю, что OP хочет использовать оба бэкэнда хранилища наиболее эффективным способом для всех запросов.
kontextify