Memcache(d)vs. Varnish用于加速3层Web架构

时间:2010-12-20 13:38:09

标签: memcached varnish

我正在尝试加快我的基准测试(3层Web架构),并且我有一些与Memcache(d)和Varnish相关的一般性问题。

  • 有什么区别?
    在我看来, Varnish 是Web服务器的后面,缓存网页,不需要更改代码,只需配置。
    另一方面, Memcached 是通用缓存系统,主要用于缓存数据库中的结果,并且需要更改get方法(第一次缓存查找)。

  • 我可以同时使用吗?前面的Web服务器和Memcached中的Varnish用于数据库缓存?

  • 什么是更好的选择?

    (方案1 - 主要是写,
    方案2 - 主要是阅读,
    场景3 - 读写类似)

2 个答案:

答案 0 :(得分:265)

  • Varnish在网络服务器前面;它可以作为缓存的反向http代理。
  • 您可以同时使用它们。
  • 主要是写 - 清漆需要清除受影响的页面。这将导致修改页面的开销和收益很小。
  • 大部分时间阅读 - 清漆可能会涵盖大部分内容。
  • 类似的读物&写 - Varnish将为您提供很多页面,Memcache将为包含已知数据和新数据的页面提供信息,以便您更快地生成页面。

可以应用于stackoverflow.com的示例:添加此注释使页面缓存无效,因此必须从Varnish(以及我的配置文件页面)清除此页面,这可能不值得缓存开始。记住使所有受影响的页面无效可能有点问题)。但是,所有注释仍然在Memcache中,因此数据库只需编写此注释。数据库无需其他任何操作来生成页面。所有的评论都是由Memcache提取的,页面会被记录下来,直到有人再次影响它(也许是通过投票我的答案)。同样,数据库写入投票,所有其他数据都从Memcache中提取,生命很快。

Memcache使您的数据库不会进行大量的读取工作,Varnish通过减少频繁生成页面来保存动态Web服务器免受CPU负载的影响(如果不是Memcache,也可以稍微减轻数据库负载)。

答案 1 :(得分:31)

我的经验来自于使用Varnish和Drupal。用尽可能简单的术语,我就是这样回答:

通常,Varnish适用于未经身份验证(通过cookie)的流量,而memcached将缓存经过身份验证的流量。

所以使用两者。