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


111

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

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

  • 我可以同时使用吗?在前端Web服务器上使用Varnish,在数据库缓存中使用Memcached?

  • 有什么更好的选择?

    (方案1-主要是写入,
    方案2-主要是读取,
    方案3-读取和写入是相似的)

Answers:


269
  • Varnish在Web服务器的前面;它用作缓存的反向http代理。
  • 您可以同时使用。
  • 通常写-Varnish将需要清除受影响的页面。这将导致开销,并且对修改后的页面几乎没有好处。
  • 通常阅读-Varnish可能涵盖了大部分内容。
  • 类似的读写-Varnish将为您提供很多页面,Memcache将为包含已知数据和新数据的页面提供信息,从而使您能够更快地生成页面。

一个可能适用于stackoverflow.com的示例:添加此注释会使页面缓存无效,因此必须从Varnish(以及我的个人资料页面)中清除此页面,这可能不值得一开始进行缓存。记住要使所有页面均无效受影响的页面可能有点问题)。但是,所有注释都仍在Memcache中,因此数据库只需编写此注释。数据库无需执行任何其他操作即可生成页面。所有评论都由Memcache提取,页面被重新缓存,直到有人再次影响它为止(也许通过投票赞成我的答案)。同样,数据库进行表决,所有其他数据都从Memcache中提取,并且寿命很快。

Memcache使您的数据库免于进行大量读取工作,Varnish通过减少生成页面的次数来节省动态Web服务器的CPU负载(如果不是对于Memcache,则可以减轻数据库的负载)。


3
这:“(也许通过投票回答我的问题)”使我投票支持你的回答
Cesc

因此,不建议像stackoverflow这样的网站(或带有活动提要页面的Facebook这样的网站)使用清漆。是吗?
Mohammad Reza Esmaeilzadeh

@jbferland在您的示例中,我的问题是,页面顶部有一张我的照片,上面有我收到的积分,我们该如何使用Varnish进行缓存,但显示该区域动态?
Hossj '16

@Hossj使用ESI标签。
约翰尼·派

Varnish可能在Web服务器之前,但也可能在Web服务器之后。它也可以同时位于同一Web服务器的前面和后面;-)例如Varnish不支持SSL,因此在Varnish前面有一个Web服务器来处理HTTPS并不少见。然后将流量代理到Varnish,Varnish然后与应用程序Web服务器进行通信-该服务器可能与处理HTTPS通信的服务器位于同一服务器。
马特

32

我的经验来自将Varnish与Drupal结合使用。用尽可能简单的术语,这就是我的回答:

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

因此,请同时使用。


5
您钉了钉子,顺便说一句,我认为Varnish在缓存匿名用户方面效果更好...
Allan Jikamu 2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.