Re[6]: Проблема: upstream buffer is too small
Илья Винокуров
ilvin на mail.ru
Пн Сен 27 16:56:33 MSD 2010
> Либо я не понял что вы хотите, либо непонятно, где вы тут видите противоречие.
>
> Есть какой-то server, в нём есть location с proxy_pass и proxy_cache.
>
> curl дёргает урл, nginx лезет на бекенд, забирает ответ, ответ попал в кеш.
> Теперь второй бекенд (точно так же как curl) дёргает этот же урл,
> nginx отдаёт ответ из кеша.
>
Текущая схема:
Запрос
|
v
nginx
|
v
backend -----------------> service
Запрос приходит на nginx, mod_perl овый backend идет за контентом к service.
Если service тормозит, то на backend'е выстраиваются толпы апачей и всем плохо.
Но дело в том, что nginx знает с какими параметрами backend будет вызывать service
И вызов service можно сделать из nginx. А бекенд возьмет данные из кеша nginx'а
Запрос
|
v
nginx -----------------> service
| ^
| |
v |
backend
В этом случае при торможении service бекенду плохо не будет - все "зависшие" соединения останутся на nginx, который справляется со множеством соединений гораздо лучше апача...
Схема словами:
1) Приходит запрос на nginx.
2) Nginx знает из запроса с какими параметрами должен сходить backend к service.
3) Nginx прокачивает свой кэш нужным запросом
4) Nginx передает запрос backend'у
5) Backend идет за контентом не к service, а к nginx в его кэш.
6) Если в кэше не оказалось данных от service, схема вырождается в первую и фатальных ошибок не происходит.
Вот, что мне хочется.
Надеюсь, я смог донести Вам свою мысль.
С почтением,
Илья Винокуров.
Подробная информация о списке рассылки nginx-ru