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