Squid处理并发缓存未命中

时间:2010-04-09 15:50:55

标签: architecture caching cdn squid high-traffic

我们正在使用Squid缓存从我们的Web服务器卸载流量,即。它被设置为反向代理,在入站请求到达我们的Web服务器之前响应它。

当我们对同一个不在缓存中的请求的并发请求进行浏览时,Squid会将所有请求代理到我们的Web(“origin”)服务器。对我们来说,这种行为并不理想:我们的原始服务器陷入困境,试图同时满足N个相同的请求。

相反,我们希望第一个请求代理到源服务器,其余的请求在Squid层排队,然后当源服务器响应第一个请求时,Squid都会完成所有请求。

有谁知道如何配置Squid来执行此操作?

我们已多次阅读文档,并对该主题进行了网络搜索,但无法弄清楚如何操作。

我们也使用Akamai,有趣的是,这是它的默认行为。 (但是,Akamai拥有如此多的节点,即使启用了Akamai的超级节点功能,我们仍然会在某些流量峰值情况下看到大量并发请求。)

对于其他一些缓存,此行为显然是可配置的,例如。 Ehcache文档提供了选项“并发缓存未命中:缓存未命中将导致缓存过滤器上游的过滤器链被处理。为了避免线程请求相同的密钥执行无用的重复工作,这些线程阻塞第一个线程。 “

有些人将此行为称为“阻塞缓存”,因为后续并发请求会阻止第一个请求,直到它完成或超时为止。

查看我的菜鸟问题!

奥利弗

1 个答案:

答案 0 :(得分:9)

您正在寻找折叠转发:   http://www.squid-cache.org/Versions/v2/2.7/cfgman/collapsed_forwarding.html

可在2.6和2.7中使用,但尚未在3.x中使用。

当缓存中存在某些内容但过时时,您可能也会对stale-while-reavlidate感兴趣:   http://www.mnot.net/blog/2007/12/12/stale