proxy_cache, особенности
Anton Yuzhaninov
citrin at citrin.ru
Mon May 18 13:58:51 MSD 2009
Alex Mizrahi wrote:
> 1. если приходят несколько запросов на один и тот же url, оно отправит
> их всех на backend или дождётся пока получит один ответ?
>
> более подробно, что я имею в виду, ситуация такая: некоторые запросы
> нужно кэшировать на очень небольшое время, ну положим, 10 секунд, т.к.
> информация в них постоянно обновляется, и в то же время на них может быть
> большой "спрос", положим 50 запросов в секунду и backend вычисляет
> ответ довольно долго, положим, 1 секунду. (понятное дело, если отправить
> все запросы на backend, он загнётся, ну, для этого мы и кэшируем.)
> значит каждые 10 секунд или вроде того объект устаревает и запрос идёт
> на backend.
>
> вопрос: в течении той секунды что вычисляется ответ на запрос,
> пошлёт ли nginx остальные 49 запросов на backend, или будет ждать пока
> не прийдёт ответ на первый запрос и отошлёт всем 49 что накопилось за
> это время кэшированный ответ?
nginx будет посылать все запросы на бэкенд, пока первый ответ не закэшируется.
Workaround - задать на бэкенде небольшое ограничение на количество параллельных запросов на
один URL и при превышении отдавать ошибку 503.
Например если бэкенд может быстро обрабатывать не более 5 параллельных запросов, то на 6-й
выдавать 503.
В кэширующем nginx прописать proxy_cache_use_stale http_503 ...
Если появляется новый URL (для которого в кэше нет никакого ответа, в том числе устаревшего),
то делать принудительный prefetch для заполнения кэша.
--
Anton Yuzhaninov
More information about the nginx-ru
mailing list