Мы используем кеш Squid для разгрузки трафика с наших веб-серверов, т.е. он настроен как обратный прокси-сервер, отвечающий на входящие запросы до того, как они попадут на наши веб-серверы.
Когда мы сталкиваемся с параллельными запросами на тот же запрос, которого нет в кэше, Squid перенаправляет все запросы на наши веб-серверы ("origin"). Для нас это поведение не идеальное: наши серверы-источники зависают, пытаясь одновременно выполнить N одинаковых запросов.
Вместо этого мы бы хотели, чтобы первый запрос передавался через прокси на исходный сервер, остальные запросы помещались в очередь на уровне Squid, а затем все выполнялись Squid, когда исходный сервер ответил на этот первый запрос.
Кто-нибудь знает, как настроить Squid для этого?
Мы несколько раз прочитали документацию и тщательно просмотрели эту тему в Интернете, но не можем понять, как это сделать.
Мы также используем Akamai, и, что интересно, это стандартное поведение. (Однако Akamai имеет так много узлов, что мы все равно видим много параллельных запросов в определенных сценариях скачка трафика, даже с включенной функцией супер-узлов Akamai.)
Это поведение явно настраивается для некоторых других кешей, например. документация по Ehcache предлагает опцию «Одновременные пропуски в кеше: промах в кеше приведет к обработке цепочки фильтров перед кеширующим фильтром. Чтобы избежать потоков, запрашивающих один и тот же ключ для выполнения бесполезной дублирующей работы, эти потоки блокируются за первым потоком. «
Некоторые люди называют это поведение «блокирующим кэшем», поскольку последующие параллельные запросы блокируют первый запрос до тех пор, пока он не будет выполнен или истек тайм-аут.
Спасибо за просмотр моего вопроса о нубе!
Оливер