Назад | Перейти на главную страницу

Проблемы с кешем Mod_pagespeed, Varnish и Apache после добавления нового кода

У меня довольно странная проблема. В моей среде мы запускаем кластер с балансировкой нагрузки из 8 серверов apache с серверной частью MySQL master-master. Перед apache у нас есть Varnish в слое кеша.

Мы запускаем Apache mod_pagespeed уже несколько недель, и по большей части он отлично работает. Проблема возникает, когда мы делаем свежие обновления кода из Git и / и все ресурсы JS / CSS меняются.

В основном проблема состоит из двух частей. Во-первых, после отправки кода мы обычно пользуемся возможностью смыть лак, перезапустить apache и перезапустить лак. При этом все объединенные / минифицированные файлы mod_pagespeed очищаются, гарантируя, что все новые ресурсы JS / CSS являются свежими. Проблема в том, что при этом имена файлов, которые mod_pagespeed создает, изменяются, но старые файлы (кажутся) все еще кэшируются для многих людей на стороне клиента, что приводит к очень неожиданным результатам. Однако, если мы не перезапустим apache, изменения в файлах могут появиться или не появиться на стороне клиента из-за кэшированных минифицированных ресурсов.

Простое решение - отключить mod_pagespeed, однако я бы не стал этого делать, так как это оказало довольно большое влияние на производительность.

Я чувствую, что должен быть лучший способ справиться с несоответствиями в кеше между клиентом и сервером, чтобы люди не слишком усердствовали или выполняли большое количество обновлений страниц, чтобы увидеть рабочую страницу.

Я могу предоставить фрагменты конфигурации, если они кому-нибудь понадобятся.

Если вы хотите проверить сайт, источник, заголовки или что-то еще, попробуйте следующие адреса:

http://wellplayed.org

http://wellplayed.org/tv

Заранее спасибо!

Вы писали о промывке лаком. На самом деле есть два разных способа сделать это:

  1. удалить определенный документ (HTML-страницу, изображение, файл CSS или что-то еще) на основе определенного URL-адреса и его вариантов (обычно разные языковые версии или сжатые / несжатые версии) - это в основном называется чистка
  2. аннулировать группу документов (HTML-страницу, изображение, CSS-файл или что-то еще) на основе регулярного выражения - это называется запретить

В вашем случае хорошей идеей может быть запрет всех файлов HTML, CSS и JS.

Для получения дополнительной информации перейдите по этой ссылке или спросите: https://www.varnish-cache.org/docs/3.0/tutorial/purging.html

Просто чтобы убедиться, что я понимаю проблему, похоже, что вы изменяете файлы, которые были обслужены до mod_pagespeed, из varnish с заголовками expires, которые сохраняют их в кэше после того, как они были изменены на бэкэнде.

У вас есть несколько вариантов, если это так. Вы можете настроить свой бэкэнд (лак) на отправку более коротких заголовков с истекающим сроком действия. Или вы можете настроить свои некэшированные ресурсы для связи с кешированными версиями с номерами исправлений, которые вы можете увеличивать при внесении изменений. Так они становятся:

http://site.com/asset.gif?p=930024982afb191

Также похоже, что есть другие ручки, которые вы можете настроить в mod_pagespeed, чтобы изменить время истечения срока действия определенных файлов:

http://code.google.com/speed/page-speed/docs/filter-cache-extend.html

Также, что касается клиентской стороны, вот дополнительная информация о том, как они действуют, что поможет настроить как varnish, так и mod_pagespeed:

http://code.google.com/speed/page-speed/docs/filter-cache-extend.html