【问题标题】:When does it make sense to use memcached in a Varnish + ESI architecture?什么时候在 Varnish + ESI 架构中使用 memcached 才有意义?
【发布时间】:2013-03-05 07:47:03
【问题描述】:

我对 Varnish 很陌生,但是在阅读了 documentation 之后,在我看来 ESI 功能消除了对 memcached 服务器的大部分需求:一个网页可以从几个 ESI 包含动态构建,每个其中将被 Varnish 适当地缓存(例如,一个主页可能是从一个相当静态的布局构建的,它将被缓存很长时间,而一个更动态的部分与今天的新闻,只缓存几个小时)。

我猜想在 Varnish 中而不是在应用服务器中(使用 memcached)构建网页的性能优势可能会很大,尽管我还没有测试过。

我错过了什么吗?在什么情况下你会推荐仍然使用 memcached 来生成网页?如果多个网页使用相同的繁重的数据库请求但不以相同的方式呈现结果,也许可以作为数据库缓存?还有什么想法吗?

感谢您的见解。

【问题讨论】:

  • 我知道这个问题很老了......但最后你找到了一个理由来使用 memcached 和 varnish 吗?

标签: architecture memcached varnish


【解决方案1】:

通常是页面的动态部分,即您将通过 ESI 请求加载的部分,是页面上最重的部分。这就是为什么您很可能还需要在应用服务器上缓存页面的动态部分。即使前面没有 Varnish,应用的静态部分也可能很快加载。

是否使用 memcached 或其他类型的缓存(例如文件缓存)几乎是个人喜好问题。与往常一样,在开始缓存内容之前,您需要分析查询、优化它们并确保索引正常工作。如果某些查询仍然过于繁重并导致第一页加载出现明显延迟,则可能值得将它们移动到将结果存储在摘要表中的计划任务中,并从那里在应用程序中提供内容。

在任何情况下,您都可以(并且应该)使用 Varnish 缓存 ESI 包含的内容,如 Varnish wiki 所示:

sub vcl_fetch {
    if (req.url == "/test.html") {
        esi;  /* Do ESI processing */
        set obj.ttl = 24 h;
    } elseif (req.url == "/cgi-bin/date.cgi") {
        set obj.ttl = 1m;
    }
}

【讨论】:

    猜你喜欢
    • 2013-10-07
    • 1970-01-01
    • 1970-01-01
    • 2011-10-22
    • 1970-01-01
    • 2014-07-21
    • 1970-01-01
    • 2021-09-09
    • 1970-01-01
    相关资源
    最近更新 更多