Существует ли способ иметь Лак 4, игнорируют какие-либо объекты хита для передачи в кэше, если все бэкенды были отмечены как "больные"?
Вот сценарий отказа, который я пытаюсь улучшить:
vcl_backend_response
.vcl_hit
-- "if (obj.ttl + obj.grace > 0) ....
)Одно обходное решение, которое я придумал, должно сократить TTL объектов хита для передачи, если бы они произошли из состояния 500 ответов:
sub vcl_backend_response {
if (beresp.ttl <= 0s && beresp.status == 500) {
set beresp.ttl = 10s;
set beresp.uncacheable = true;
# return inside this if statement to allow builtin vcl_backend_response to run
return (deliver);
}
}
Другие возможности корректируют интервал и порог проверок состояния, или придумывают лучшую проверку состояния.
Но кроме этого, там способ явно сказать Лак "да, у Вас есть хит для передачи, но взгляд - все бэкенды больны! Не беспокойтесь, переключайтесь на льготный режим теперь".
Если вы хотите такое поведение, вам следует избегать создания объектов «попадание-пропуск», когда вы получаете 500 ответов от бэкэнда .
Предположим, что (1) вы всегда запрашиваете один и тот же кешируемый URL / объект X; и (2) объект X в настоящее время хранится в хранилище Varnish с TTL 1 час и периодом отсрочки 24 часа. Предположим теперь следующую временную шкалу:
Решением здесь было бы избегать создания объектов «хит за прохождение», когда вы получаете 500 ответов от бэкэнда. Вместо этого просто откажитесь от запроса. Таким образом, на t = 3603 и t = 4000 вы отправите остановленную копию объекта на клиентскую сторону.