Squid处理并发缓存未命中的方法

4
我们正在使用Squid缓存来卸载我们的Web服务器流量,也就是说,它被设置为反向代理,响应入站请求,然后再将它们发送到我们的Web服务器之前。
当我们同时收到针对未在缓存中的相同请求的并发请求时,Squid会将所有请求都代理到我们的Web(“源”)服务器上。对我们来说,这种行为并不理想:我们的源服务器会因尝试同时满足N个相同请求而变得非常繁忙。
相反,我们希望第一个请求通过代理传递到源服务器,其余请求排队在Squid层,等到源服务器响应第一个请求后,由Squid全部完成。
有人知道如何配置Squid来实现这一点吗?
我们已经多次阅读了文档,并彻底搜索了这个主题,但无法弄清楚如何做到这一点。
我们也使用Akamai,有趣的是,这是它的默认行为。(但是,即使启用了Akamai的超级节点功能,在某些流量峰值场景下仍会看到大量并发请求。)
对于其他一些缓存,例如Ehcache,这种行为显然是可以配置的,文档提供了选项“Concurrent Cache Misses: A cache miss will cause the filter chain, upstream of the caching filter to be processed. To avoid threads requesting the same key to do useless duplicate work, these threads block behind the first thread.”
一些人将这种行为称为“阻塞式缓存”,因为后续并发请求会在第一个请求被满足或超时之前阻塞。
感谢您查看我的问题! Oliver
1个回答

9

谢谢,马克!就是这样。而且,你的直觉是正确的,我们也更喜欢stale-while-revalidate这种行为,所以我们会进行一些研究,然后希望尝试一下! - Oliver H-H
仍然不明白为什么人们在评论中说谢谢,而只是标记它为正确会更有益于每个人。 - Rudiger
如果您想知道如何配置ATS以实现类似的行为,请查看以下链接:减少源服务器请求Collapsed Forwarding不起作用 - brutuscat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接