如今,我们的 Web 层已向全世界开放。我们希望在 Web 层前面添加 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)?
对于重大更改,我们只需清除缓存,而对于较小的更改,我们只需让其过期。