ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: proxy_cache, особенности



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



 




Copyright © Lexa Software, 1996-2009.