如何利用 Varnish 进行 A/B 测试和功能推出?

如何利用 Varnish 进行 A/B 测试和功能推出?

如今,我们的 Web 层已向全世界开放。我们希望在 Web 层前面添加 Varnish,以加速网站并减少对后端的调用。但是,我们有一些顾虑,我想知道大多数人如何处理它们:

  1. A/B 测试 - 如何测试每个页面的两个“版本”并进行比较?我的意思是,Varnish 如何知道要提供哪个页面?如果是,如何在每个页面上保存单独的版本?

  2. 功能推出 - 如何设置简单的功能推出机制?假设我想向 10% 的流量开放一个新功能/页面...然后将其增加到 20%?

  3. 您如何处理代码部署?每次部署时,您都会清除整个 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)?

对于重大更改,我们只需清除缓存,而对于较小的更改,我们只需让其过期。

相关内容