【发布时间】:2012-04-30 03:18:30
【问题描述】:
我正在研究使用带有 ESI 的 Varnish 来缓存高流量论坛类网站的页面内容。
上下文:我只想为访问者缓存内容(连接的用户将有一个非常不同的显示,并且需要绝对新鲜的内容)。尽管如此,对于访问者来说,页面的某些部分需要是动态的: - 不可缓存,例如对于依赖于访问者的模块(想想一个“建议”小部件,它通过信标对查看的页面进行实时分析) - 可缓存 1500 万的小 TTL,例如用于“最新帖子”小部件或非常变化的广告活动。
目前我们正在使用 Apache/PHP/symfony/memcache 来缓存页面并具有类似 ESI 的内部机制:解析来自缓存的页面并解释一些特定标签(包括对 Web 服务和/或数据库的调用) .这还不够性能,因为服务器时间大约是 700 毫秒。
我们可以使用 Varnish+ESI 来代替这个解决方案。一个页面中包含的 ESI 总数可以达到 15 个。要获取的 ESI 的实际数量将少于此数量,但考虑到 ESI 的 TTL,实际数量不会那么多。关键问题是 Varnish 按顺序而不是并行获取 ESI,这是不可接受的。此功能在 Varnish 的路线图中处于后期阶段。
所以,
您对 Varnish 和 ESI 有何经验?有多少 ESI,您有多少响应时间?
您知道解决方法或其他具有并行 ESI 提取的严重且可配置(VCL 很好)的反向代理吗?
如果不是,您对等效用例使用哪种好的缓存策略?
谢谢, P.
【问题讨论】:
-
15 ESI 包括?这是一个相当疯狂的数字。您不能将它们重新排列成较少数量的组并使用 CSS 定位它们吗?
-
并非如此,页面有很多来自不同数据源的动态内容,具有不同的 TTL(想想几个广告区、推荐、用户模块……)
-
再看这个问题(现在你戳我了):对于 Stack Overflow 来说,这个问题太开放和模糊了(参见FAQ);收紧以专注于特定方面,它可能是关于服务器故障的主题(但请先查看他们的常见问题解答)。
标签: caching memcached reverse-proxy varnish esi