Как удерживать одинаковые запросы, поступающие в серверную часть в varnish4.0.3, пока не ответит первый

#varnish #varnish-vcl #varnish-4

#varnish #varnish-vcl #varnish-4

Вопрос:

На моем веб-сайте поток запросов приведен ниже-

AWS CloudFront -> ELB -> Varnish 4.0.3 -> NginX (обратный прокси) -> ELB -> Drupal7

Работает: Обычный поток работает так, как ожидалось.

Проблема: когда я запускаю нагрузочное тестирование на своем сайте, один и тот же запрос поступает на сервер Drupal несколько раз. например, мой JMeter засыпал 500 обращениями к http://website/index.php , ~ 50% запросов попадают на сервер Drupal.

Ожидание: Varnish должен удерживать все тот же запрос, пока не ответит первый.

Наблюдение: Varnish отправляет все те же запросы на серверную часть, пока не придет ответ на первый запрос

Если кто-нибудь реализовал такую функциональность, пожалуйста, поделитесь

Ответ №1:

Это странно, потому что Varnish должен содержать эти запросы, как указано в документе:https://www.varnish-cache.org/docs/4.0/users-guide/vcl-grace.html

Возможно, первый запрос, который поступает на серверную часть, заканчивается некэшируемым ответом, который получает «HIT-FOR-PASS» (последующие те же запросы не попадут в кэш, а будут извлечены непосредственно из серверной части).

Каков вывод из varnishlog, вы отправляете специальный заголовок, который предотвращает кэширование?

Комментарии:

1. Спасибо за быстрый ответ! Мой _hit ниже-

2. sub vcl_hit { if (obj.ttl >= 0s) { # Чистое, неподдельное попадание, доставить его обратно (deliver); } if (std.healthy(req.backend_hint)) { if (obj.ttl 10 секунд > 0 секунд) { return (deliver); } else { return (fetch); } } else { if (obj.ttl obj.grace > 0 секунд) { return (deliver); } else { return (fetch); } } return (fetch); } ——- 1. Правильно ли это 2. Как проверять запросы, которые находятся на удержании, пока Varnish получает ответ из серверной части

3. Это ваш vcl (конфигурация varnish), я хотел бы увидеть журналы varnish. Это первое, на что следует обратить внимание при устранении неполадок в varnish. Вы можете видеть их в режиме реального времени с помощью varnishlog или истории с помощью varnishlog -d . Смотрите varnish-cache.org/docs/4.0/users-guide/operation-logging.html