我们正在使用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
当我们同时收到针对未在缓存中的相同请求的并发请求时,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