<div dir="ltr">Здравствуйте.<div><br></div><div><a href="http://nginx.org/ru/docs/http/ngx_http_proxy_module.html#proxy_cache_lock">http://nginx.org/ru/docs/http/ngx_http_proxy_module.html#proxy_cache_lock</a><br></div></div>
<div class="gmail_extra"><br><br><div class="gmail_quote">24 августа 2013 г., 14:29 пользователь stitrace <span dir="ltr"><<a href="mailto:nginx-forum@nginx.us" target="_blank">nginx-forum@nginx.us</a>></span> написал:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Опишу некоторые, особенности работы модуля PURGE nginx, с которыми я<br>
столкнулся и которые затрудняют его использование в hi-load:<br>
<br>
Как известно, механизм purge в nginx призван для управления кэшем,<br>
единственным его предназначением является очистка кэша для необходимого урла<br>
на сайте.<br>
<br>
Мы могли бы закэшировать страницу с урлом http:://<a href="http://mysite.ru/main/" target="_blank">mysite.ru/main/</a>, к<br>
примеру, на сутки и реализовать в форме отправки сообщения нашего сайта<br>
инициацию запроса http:://<a href="http://mysite.ru/purge/main/" target="_blank">mysite.ru/purge/main/</a>, который, при должной<br>
конфигурации, очистит кэш для страницы /main/. На первый взгляд, всё<br>
выглядит идеально и придраться не к чему, но если разобраться, то не так всё<br>
гладко, когда дело касается hi-load. Дело в том, что nginx производит<br>
очистку кэша в таком порядке:<br>
<br>
a) После выполнения PURGE запроса он удаляет закэшированную копию страницы<br>
из хранилища.<br>
б) Ждёт сгенерированную, новую страницу от бэкэнда.<br>
в) Отдаёт её пользователю и кладёт в кэш, далее продолжая раздавать её<br>
пользователям.<br>
<br>
Всё шикарно, но при выполнении пункта "б" он, если к нему обращается клиент,<br>
не находя страницу у себя в кэше, пропускает все запросы к фронтэнду.<br>
<br>
Теперь допустим сценарий, ваша страница /main/ генерируется на бэкэнде 1<br>
секунду и он настроен таким образом, что максимальное количество клиентов на<br>
нём не должно превышать 300. Посещаемость /main/ - 600 запросов в секунду,<br>
каждый новый клиент увеличивает время отработки запроса к фронтэнду на 0.3%.<br>
Мы видим, что, количество клиентов, которые пройдут на бэкэнд, превышает в<br>
два раза разрешённый лимит, а время выполения запроса, в первые полсекунды,<br>
будет расти по экспоненте и скрипт, в лучшем случае, завершит работу через<br>
несколько секунд, а в худшем, бэкэнд вернёт 502 ошибку, из-за ограничений на<br>
время выполнения кода на фронтэнде, то есть, фактически, уронит ваш проект.<br>
<br>
Точно такая же ситуация будет, если элемента ещё нет в кэше и на него<br>
внезапно начинают обращаться пользователи (допустим произошла публикация<br>
новой страницы).<br>
<br>
Posted at Nginx Forum: <a href="http://forum.nginx.org/read.php?21,242182,242182#msg-242182" target="_blank">http://forum.nginx.org/read.php?21,242182,242182#msg-242182</a><br>
<br>
_______________________________________________<br>
nginx-ru mailing list<br>
<a href="mailto:nginx-ru@nginx.org">nginx-ru@nginx.org</a><br>
<a href="http://mailman.nginx.org/mailman/listinfo/nginx-ru" target="_blank">http://mailman.nginx.org/mailman/listinfo/nginx-ru</a></blockquote></div><br><br clear="all"><div><br></div>-- <br><div dir="ltr">Best Regards,<br>
<div>Vadim Lazovskiy</div></div>
</div>