我对Varnish很新,但在阅读documentation后,在我看来ESI功能消除了对memcached服务器的大部分需求:一个网页可以从几个ESI动态构建每个都将被Varnish适当地缓存(例如,主页可以构建一个相当静态的布局,将被缓存很长一段时间,一个更动态的部分与今天的新闻,缓存只有几个小时)
我认为使用Varnish而不是App服务器(使用memcached)从几个部分构建网页的性能优势可能会很好,尽管我还没有测试过。
我错过了什么吗?在什么情况下,您会建议仍然使用memcached进行网页生成?也许作为数据库缓存,如果多个Web页面使用相同的繁重数据库请求但不以相同的方式呈现结果?还有其他想法吗?
感谢您的见解。
答案 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;
}
}