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

Как использовать Varnish для A / B-тестирования и развертывания функций?

Сегодня наш веб-слой открыт для всего мира. Мы хотели бы добавить Varnish перед нашим веб-слоем, чтобы ускорить работу сайта и уменьшить количество обращений к серверной части. Однако у нас есть некоторые опасения, и мне было интересно, как к ним подходит большинство людей:

  1. A / B-тестирование - как вы тестируете две «версии» каждой страницы и сравниваете их? Я имею в виду, как лак узнает, какую страницу обслуживать? Если и как вы сохраняете отдельные версии на каждой странице?

  2. Развертывание функций - как бы вы настроили простой механизм развертывания функций? Допустим, я хочу открыть новую функцию / страницу только для 10% трафика ... а затем увеличить это количество до 20%?

  3. Как вы справляетесь с развертыванием кода? Вы очищаете весь кеш от лака при каждом развертывании? (У нас есть развертывания ежедневно). Или вы просто даете ему медленно истечь (используя TTL)?

Любые идеи и примеры по этим вопросам сильно оценил!

A / B-тестирование - как вы тестируете две «версии» каждой страницы и сравниваете их? Я имею в виду, как лак узнает, какую страницу обслуживать? Если и как вы сохраняете отдельные версии на каждой странице?

У вас есть несколько вариантов:

  • Просто выставляйте их по разным URL.
  • Обойти кеш для определенного URL. Вы можете сделать это, вернув pass в vcl_recv. Что-то вроде этого:

    sub vcl_recv {
        if (req.url ~ "^/path/to/document") {
            return (pass);
        }
    }
    
  • Явно очищайте кеш, когда открываете новую версию.

Внедрение функции - как бы вы настроили простой механизм развертывания функции? Допустим, я хочу открыть новую функцию / страницу только для 10% трафика ... а затем увеличить это количество до 20%?

Я не уверен, что есть «простой» способ сделать это. Поскольку вы можете поставить произвольные C код в вашем .vcl файлов, вы, вероятно, могли бы добавить некоторую логику для выбора случайного числа, а затем выбрать соответствующий путь к бэкэнду на основе результата.

Как вы справляетесь с развертыванием кода? Вы очищаете весь кеш от лака при каждом развертывании? (У нас есть развертывания ежедневно). Или вы просто даете ему медленно истечь (используя TTL)?

Для серьезных изменений мы просто очищаем кеш, а для небольших изменений просто позволяем сроку действия.