我在 Varnish 实例前使用负载均衡器 (LB)。只需说 LB 正在侦听 Port: 80 并且在不同的端口号上有多个 Varnish 实例。
即我有一个连接到 4 个清漆实例的 LB,并且 LB 以循环方式执行。
现在,我如何清除 Varnish 上的对象并保持不同 Varnish 实例之间的一致性。
我在 Varnish 实例前使用负载均衡器 (LB)。只需说 LB 正在侦听 Port: 80 并且在不同的端口号上有多个 Varnish 实例。
即我有一个连接到 4 个清漆实例的 LB,并且 LB 以循环方式执行。
现在,我如何清除 Varnish 上的对象并保持不同 Varnish 实例之间的一致性。
对此的简单解决方案是对您知道需要清除的内容使用低 TTL。使用 10 秒的 TTL,可能根本不需要发送清除。以一些后端请求为代价解决了问题。除非您的后端非常慢,或者您的流量水平在每秒 100/1000 秒,否则这将正常工作。
考虑到您的 LB 实际上是在进行循环,另一个稍微肮脏的解决方案就是让清除进程发送 PURGE 请求 n 次。其背后的每个清漆都有一个请求。这当然有点脆弱,因为您可能(/将)在添加更多服务器时忘记调整它。
如果你真的想让它变脏,你可以在 VCL 中重新启动并链接进程。让 Varnish #1 在清除自己的缓存后,使用 Varnish #2 作为 PURGE 请求的后端。#2 做同样的事情并将其传递给 #3,冲洗并重复。这里是龙,除非你对 VCL 非常熟悉,否则不要这样做。