Re: Мысли по поводу кэширования.

Maxim Dounin mdounin на mdounin.ru
Вс Ноя 28 14:39:26 MSK 2010


Hello!

On Sun, Nov 28, 2010 at 11:18:17AM +0300, Михаил Монашёв wrote:

> Здравствуйте.
> 
> Есть конфиг:
> 
>                 location / {
>                         ...
>                         proxy_pass              http://backend1;
>                         proxy_cache             optcache1;
> 
>                         error_page              404 500 502 503 504 = @fallback;
>                 }
> 
>                 location @fallback {
>                         ...
>                         proxy_pass              http://backend2;
>                         proxy_cache             optcache1;
>                 }
> 
> Второй  proxy_cache  совершет  лишнюю работу. От неё можно избавиться,
> если  разделить  директиву  proxy_cache на две: первая читает из кэша,
> вторая  сохраняет  в  кэш.  Или  же  не проверять дважды один и тот же
> ключик кэша внутри одного запроса.

1) Вообще говоря, для подобных конфигураций существует 
proxy_next_upstream.  Понятно, что во многих случаях он не 
применим (в частности - из за отсутствия ограничения на количество 
попыток), но проблемы с двойной проверкой в кеше у него нет.

2) Стоимость второй проверки в кеше можно ощутимо снизить с 
помощью open_file_cache.

3) Вообще говоря, пока мы ходили на первый бекенд, в кеше ответ 
мог и появиться.  Так что совсем не факт, что вторая проверка - 
лишняя.

4) Второму proxy_cache можно сказать proxy_cache_bypass.  Это и 
будет то самое "разделение на две".  Но сейчас это не работает 
из-за ошибки в реализации.

Maxim Dounin



Подробная информация о списке рассылки nginx-ru