我们正在使用 Squid 缓存来卸载来自我们的 Web 服务器的流量,即。它被设置为在入站请求到达我们的 Web 服务器之前响应它们的反向代理。
当我们收到对不在缓存中的相同请求的并发请求时,Squid 会将所有请求代理到我们的 Web(“源”)服务器。对我们来说,这种行为并不理想:我们的源服务器在尝试同时满足 N 个相同的请求时陷入困境。
相反,我们希望第一个请求代理到源服务器,其余的请求在 Squid 层排队,然后当源服务器响应第一个请求时,所有请求都由 Squid 完成。
有谁知道如何配置 Squid 来做到这一点?
我们已经多次阅读文档并在网络上彻底搜索了该主题,但无法弄清楚如何去做。
我们也使用 Akamai,有趣的是,这是它的默认行为。(但是,Akamai 拥有如此多的节点,即使启用了 Akamai 的超级节点功能,我们仍然会在某些流量高峰场景中看到大量并发请求。)
对于其他一些缓存,这种行为显然是可配置的,例如。Ehcache 文档提供了选项“并发缓存未命中:缓存未命中将导致缓存过滤器上游的过滤器链被处理。为了避免线程请求相同的键来执行无用的重复工作,这些线程阻塞在第一个线程后面。 "
有些人称这种行为为“阻塞缓存”,因为随后的并发请求会阻塞在第一个请求之后,直到它完成或超时。
感谢您查看我的菜鸟问题!
奥利弗