nginx-1.1.12
Maxim Dounin
mdounin на mdounin.ru
Ср Дек 28 16:21:27 UTC 2011
Hello!
On Wed, Dec 28, 2011 at 06:04:28PM +0400, Михаил Монашёв wrote:
> Здравствуйте, Maxim.
>
> >> > *) Добавление: директивы proxy/fastcgi/scgi/uwsgi_cache_lock,
> >> > proxy/fastcgi/scgi/uwsgi_cache_lock_timeout.
> >>
> >> А где можно почитать по эти новые директивы?
>
> > Пока тут:
>
> > http://trac.nginx.org/nginx/changeset/4386/nginx
>
> > Скоро опишем в документации. In short: если включена директива
>
> > proxy_cache_lock on;
>
> > то при наличии нескольких запросов к конкретному незакешированному
> > ресурсу - на бекенд пойдёт только первый, остальные будут ждать
> > вплоть до proxy_cache_lock_timeout каждый.
>
> Полезная вещь.
>
> Почитал http://mailman.nginx.org/pipermail/nginx-devel/2011-December/001576.html
> Странная реализация. Зачем на каждый ожидающий запрос вешать отдельный
> таймаут, если достаточно одного на первый запрос, пошедший к бэкенду?
Таймаута - одного недостаточно, т.к. proxy_cache_lock_timeout
ограничивает время, которое *один конкретный запрос* может провести
в ожидании лока (т.е. дополнительное время ожидания, которое
увидит клиент). У каждого запроса начальное время ожидания своё
(да и сам таймаут теоретически может быть не таким, как у других).
Если ты про таймер, который сейчас зовётся раз в 500ms, то по
хорошему его там вообще не должно быть: запросы должны подниматься
из очереди по снятию лока. Но сейчас этого нормально сделать
нельзя, т.к. рабочих процессов может быть много, а лок - общий. И
нет механизмов, чтобы сообщить в другой рабочий процесс о том, что
вот такие запросы можно поднимать. Так что для начала было
выбрано максимально простое решение. В дальнейшем оно, вероятно,
будет усовершенствовано.
Maxim Dounin
Подробная информация о списке рассылки nginx-ru