Pull to refresh

Comments 7

А все-таки, зачем нужен Varnish при наличии кэша в nginx? Не сарказм, правда интересно, в чем разница

Я nginx как прокси кеш еще ни разу не использовал, поэтому практического опыта не имею. В конкретной ситуации, для которой я разбирался с Drupal 8 + Varnish, меня просто попросили посмотреть со словами «вот, что-то сайт тупит» :) И там уже было HAproxy (ssl termination) -> Varnish (proxy caching) -> Apache -> mod_fcgi (php).

Я немног покопался сейчас, и похоже, что по производительности они оба очень похожи. Но на сайте Nginx я нашел следующее (https://www.nginx.com/blog/nginx-caching-guide/):

Does NGINX Support Cache Purging?

NGINX Plus supports selective purging of cached files. This is useful if a file has been updated on the origin server but is still valid in the NGINX Plus cache (the Cache-Control:max-age is still valid and the timeout set by the inactive parameter to the proxy_cache_path directive has not expired). With the cache‑purge feature of NGINX Plus, this file can easily be deleted. For more details, see Purging Content from the Cache.

Получается, что как раз главный конек, на котором построена выборочная инвалидация по кеш тегам, отсутствует в Nginx. Не возмусь со 100% уверенностью сказать, что опен-сорсный nginx дейсвтительно никак не может инвалидировать по заголовкам, но похоже на то.

А в чем проблема кэшировать с etag?
Страница изменилась, создали новый кэш и выдали в заголовках новый etag. Nginx прекрасно это умеет

Про etag согласен. Но как тогда проактивно инвалидировать кеш Nginx'a из Друпала? В схеме, как описано в этой статье, когда какая-то нода изменилась, то Друпал отправит запросы на HTTP proxy о том, что такую-то, такую-то и такую-то страницы (страницы, где эта нода в том или ином виде присутствует), нужно выкинуть из кеша.

Без этой проактивной инвалидации, нам либо сознательно отдавать потенциально устаревший контент либо nginx должен чуть ли не каждый раз перепроверять свой кеш против друпала (сверять etag).

Я посмотрел на вот эту (https://cgit.drupalcode.org/nginx_cache_clear/tree/nginx_cache_clear.module) реализацию под Nginx + Drupal 7, и там довольно топорный метод — удаление файла кеша из файловой системы.
Есть тесты (графики) производительности с varnish и без него?
Тестов и графиков нет =) Но у меня не вызывает сомнений, что анонимные страницы будут куда эффективнее обрабатываться Varnish'ом, чем Drupal 8 при включенном кеше анонимных страниц на последнем. Даже если этот кеш в Drupal'е положить в оперативку (Redis,Memcached).
Включение во всю формулу PHP тут же даст свой негативный результат. Concurrency тоже значительно ухудшится, т.к. потребление ОЗУ на 1 обработанный запрос будет значительно выше. У Varnish'а накладные расходы по памяти на обработку 1 запроса минимальные, а у PHP интерпретатора уже будут исчисляться мегабайтами, может быть парой десяток мегабайт памяти на 1 запрос.
Sign up to leave a comment.

Articles

Change theme settings