【问题标题】:Varnish & ESIs : Fetching in parallel and possible workaroundsVarnish & ESI:并行获取和可能的解决方法
【发布时间】: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


【解决方案1】:

目前我在一个高流量网站工作,性能就是我们的一切。在几个页面上,我们使用了很多(20 多个)ESI,例如在我们的搜索结果列表中。结果列表是 JSON 响应,其中的每个结果块都是一个单独的 ESI。好的,我们进行缓存预热。但是我们在这方面没有遇到任何性能问题。如果后端请求真的很慢,那么 ESI 的数量将是一个问题。

并行 ESI 获取在 Varnish 的功能请求列表中,但我认为它在 4.1 版本中没有。

【讨论】:

    猜你喜欢
    • 2011-08-23
    • 2012-01-18
    • 1970-01-01
    • 2012-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多