
Сегодня наш веб-слой выставлен на всеобщее обозрение. Мы хотели бы добавить Varnish перед нашим веб-слоем, чтобы ускорить сайт и сократить количество вызовов на бэкенд. Однако у нас есть некоторые опасения, и мне было интересно, как большинство людей подходят к ним:
A/B-тестирование - Как вы тестируете две "версии" каждой страницы и сравниваете? Я имею в виду, как Varnish узнает, какую страницу показывать? Если и как вы сохраняете отдельные версии на каждой странице?
Развертывание функций - как бы вы настроили простой механизм развертывания функций? Допустим, я хочу открыть новую функцию/страницу всего для 10% трафика... а затем позже увеличить это до 20%?
Как вы обрабатываете развертывания кода? Вы очищаете весь кэш Varnish при каждом развертывании? (У нас развертывания происходят ежедневно). Или вы просто позволяете ему медленно истекать (используя TTL)?
Любые идеи и примеры относительно этих вопросовв значительной степениоценено по достоинству!
решение1
A/B-тестирование - Как вы тестируете две "версии" каждой страницы и сравниваете? Я имею в виду, как Varnish узнает, какую страницу показывать? Если и как вы сохраняете отдельные версии на каждой странице?
У вас есть несколько вариантов:
- Просто разместите их по разным URL-адресам.
Обойти кэш для конкретного URL. Вы можете сделать это, вернувшись
pass
вvcl_recv
. Что-то вроде этого:sub vcl_recv { if (req.url ~ "^/path/to/document") { return (pass); } }
Обязательно очищайте кэш при публикации новой версии.
Развертывание функций - как бы вы настроили простой механизм развертывания функций? Допустим, я хочу открыть новую функцию/страницу всего для 10% трафика... а затем позже увеличить это до 20%?
Я не уверен, что есть "простой" способ сделать это. Поскольку вы можете поместить произвольный C
код в свои .vcl
файлы, вы, вероятно, могли бы добавить некоторую логику для выбора случайного числа, а затем выбрать соответствующий путь бэкенда на основе результата.
Как вы обрабатываете развертывания кода? Вы очищаете весь кэш Varnish при каждом развертывании? (У нас развертывания происходят ежедневно). Или вы просто позволяете ему медленно истекать (используя TTL)?
В случае крупных изменений мы просто очищаем кэш, а в случае небольших изменений просто ждем, пока данные устареют.