目前,我们有一项基于各种获取参数创建 XML 页面的服务。随着参数数量的增加,不同组合的数量也在增加,这意味着我们的清漆缓存中的命中率下降了。我们增加了 TTL,因此命中率也增加了,但我正在考虑以下想法:
我刚刚遇到 Edge Side Includes 并在想.. 如果我每次生成包含 50 个元素的 XML 页面,我是否可以生成一个包含 50 个 ESI 的页面,然后清漆将合并到一个文档中?
为什么要问 50 个 ESI 元素?因为每个 XML 元素本身很容易被一个 URL 缓存,但是过滤器的组合会导致生成大量不同的完整 XML 文档。
因此,即使一个请求过滤掉了前 10 个 XML 元素(因为它们没有确认获取参数),因为使用了 ESI,每个元素都将从缓存中获取。
这在服务器上会有多重?这样做有意义吗?ESI 是否非常昂贵,在这种情况下它没有意义。
更新
首先,我们从未耗尽内存,Nuke 为零。我们目前的命中/未命中率为 0.4,ttl 为 4 小时,在我看来这很糟糕……由于所有这些组合(国家、地区等)。更糟糕的是,tomcat 已达到 100% 的利用率并挂起,而 varnish 则停留在 1-3% 的研究中。我的直觉说,用清漆缝合 ESI,并记住子文档将更好地保护 tomcat 并增加我们的容量。我们从来没有奇怪地 Nuke 项目,这意味着在缓存条目过期之前它永远不会填充 ~ 1GB 缓存。我敢肯定,如果我们缓存每个子文档,我们可能会达到内存限制并开始核对项目......但是清漆不使用某种最近最少使用的算法吗?