Проблемы с кешем 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, однако я бы не стал этого делать, так как это оказало довольно большое влияние на производительность.
Я чувствую, как будто должен быть лучший способ справиться с несоответствиями в кеше между клиентом и сервером, чтобы не дать людям идти слишком долго или выполнять большое количество обновлений страниц, чтобы увидеть рабочую страницу.
Я могу предоставить фрагменты конфигурации, если они кому-нибудь понадобятся.
Если вы хотите проверить сайт, источник, заголовки или что-то еще, попробуйте следующие адреса:
Заранее спасибо!
2 ответа
Вы писали о промывке лака. На самом деле есть два разных способа сделать это:
- удалить конкретный документ (HTML-страницу, изображение, файл CSS и т. д.) на основе определенного URL-адреса и его вариантов (обычно это разные языковые версии или сжатые / несжатые версии) - это обычно называется продувкой
- аннулировать группу документов (HTML-страницу, изображение, файл CSS и т. д.) на основе регулярного выражения - это называется запретом
В вашем случае хорошей идеей может быть запрет всех файлов HTML, CSS и JS.
Для получения дополнительной информации перейдите по этой ссылке или спросите: https://www.varnish-cache.org/docs/3.0/tutorial/purging.html
Просто чтобы убедиться, что я понимаю проблему, похоже, что вы модифицируете файлы, которые были обработаны до mod_pagespeed, из лака с заголовками expires, которые сохраняют его в кэше после того, как он был изменен в бэкэнде.
У вас есть несколько вариантов здесь, если это так. Вы можете настроить свой бэкэнд (лак) так, чтобы он отправлял более короткие заголовки. Или вы можете настроить свои не кэшированные ресурсы так, чтобы они связывались с кэшированными версиями с номерами исправлений, которые можно увеличивать при внесении изменений. Так они становятся:
http://site.com/asset.gif?p=930024982afb191
Также похоже, что есть другие ручки, которые вы можете настроить в mod_pagespeed, чтобы изменить время истечения для определенных файлов:
http://code.google.com/speed/page-speed/docs/filter-cache-extend.html
Также в отношении клиентской части, здесь есть больше информации о том, как они действуют, что поможет настроить и лак, и mod_pagespeed:
http://code.google.com/speed/page-speed/docs/filter-cache-extend.html