🔗 特性:折叠转发
- 状态:已在 2.6、2.7 版本中完成,并移植到 Squid-3.5
- 版本:2.6+ 和 3.5+
- 开发者:HenrikNordstrom、AlexRousskov
- 更多:Bug 1614 和 3495
🔗 详细信息
此性能增强功能使对同一 URI 的多个客户端请求可以作为一个请求处理到后端服务器。通常禁用此功能以避免动态内容延迟增加,但在 Web 服务器是瓶颈但可靠且返回大部分可缓存信息的情况下,启用此功能可能会带来好处。
由于时间和稳定性限制,该功能被排除在 Squid-3.0 之外。此功能中的 max_stale 部分已添加到 Squid-3.2,collapsed_forwarding 部分已添加到 Squid-3.5,refresh_stale_hit 仍有待重新实现。
原始 Squid-2.6 功能中的 *stale-while-revalidate* 部分自那时以来已通过 RFC 5861 成为官方 HTTP/1.1 扩展。现在应使用协议头代替 squid 配置选项。
🔗 文档
在加速器设置中,尽量减少到后端 Web 服务器的连接数是可取的。然而,Squid 主要设计用于前向代理操作,并不考虑这一点。因此,如果一个非常频繁访问的对象从缓存中过期,或者添加了一个新的非常频繁访问的对象,后端服务器可能会出现请求风暴。
为了解决这种情况,此功能向 squid.conf 添加了一个新的调优开关(SquidConf::collapsed_forwarding),使 Squid 在缓存重新验证或缓存未命中得到解决之前延迟进一步的请求。这会牺牲一般的代理延迟以换取加速器性能,因此除非您正在运行加速器,否则不应启用它。
Squid-2.6 和 Squid-2.7 还包含 refresh_pattern 上的一个 **stale-while-revalidate** 选项,用于在缓存重新验证频繁访问的对象时进行快捷处理,使后续请求在缓存重新验证待处理时立即返回缓存命中。这可能会暂时向客户端提供轻微过时的信息,但同时允许在频繁访问的对象被重新验证时获得最佳响应时间。这也是一项仅用于加速器的优化,并且仅适用于最小化请求延迟比内容新鲜度更重要的加速器。
🔗 配置
Squid-2.6、Squid-2.7 和 Squid-3.5+
collapsed_forwarding on
此选项支持折叠多个相同 URI 的请求,将它们作为单个请求处理。通常禁用此功能以避免出现请求挂起的极端情况,但在后端服务器可靠的加速器设置中启用此功能可以带来巨大好处。
refresh_stale_hit interval (default 0)
此选项通过在对象过时前一段时间发起重新验证请求来降低折叠转发的延迟。这避免了多个客户端等待重新验证完成。
🔗 已知问题和不足
- 30 秒的窗口应该是可调的;请参阅 Bug 2504。
- 至少在 2.6 的实现中,非成功响应不会被折叠,这可能导致后端服务器不堪重负;请参阅 Bug 1918。
- 甚至可能适用于一般的互联网代理情况,而不仅仅是反向代理。
- 当使用纯内存缓存且不存在 cache_dir 时,此功能不起作用。
类别:功能
导航:站点搜索,站点页面,类别,🔼 向上