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