什么时候在Varnish + ESI架构中使用memcached是有意义的?

时间:2013-03-16 16:58:11

标签: architecture memcached varnish

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

我认为使用Varnish而不是App服务器(使用memcached)从几个部分构建网页的性能优势可能会很好,尽管我还没有测试过。

我错过了什么吗?在什么情况下,您会建议仍然使用memcached进行网页生成?也许作为数据库缓存,如果多个Web页面使用相同的繁重数据库请求但不以相同的方式呈现结果?还有其他想法吗?

感谢您的见解。

1 个答案:

答案 0 :(得分:2)

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

是否使用memcached或其他类型的缓存(例如文件缓存)几乎是一种品味问题。与往常一样,在开始缓存内容之前,您需要对查询进行概要分析,优化它们,并确保索引正常工作。如果某些查询仍然过重并导致第一页加载出现严重延迟,则可能需要将它们移动到将结果存储在摘要表中的计划任务,并从App中提供内容。 / p>

在任何情况下,您都可以(并且应该)使用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;
    }
}