0

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

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

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

感谢您的见解。

4

1 回答 1

2

通常它是页面的动态部分,即您将通过 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-03-17T09:54:45.180 回答