《构建高性能Web站点》笔记:4.3 反向代理的缓存

用反向代理提供缓存:用户执行一次请求后,反向代理将请转发到后端服务器,转发应答时,反向代理将其内容缓存;下次再来同样的请求时,反向代理直接以自己的缓存应答

 

反向代理中如果不引入缓存,对性能可能会产生伤害;因为它引入了一次请求转发

提供缓存的反向代理

  1. Apache里可以mod_cache + mod_proxy联用实现代理,Nginx也有类似的模块。它们好用,但还不够强大

  2. Squid是最著名的反向代理,它很强大,但过于重量级,使用比较复杂

  3.
Varnish则比较专注于反向代理,而且比较好用

Varnish

  1.通过修改http头来决定是否缓存

  2.它的配置文件是用一套长得很像c++/java的DSL写的,所以配置非常灵活

  3.varnish的8011端口可以接受命令以清除缓存,你可以通过vinishadm工具直接向这个端口发送命令,也可以从它处向这个端口发送一个http请求

  4.varnishstat提供了监控界面,给出诸如cache hit/cache miss之类的数据; varnish还有一个web监控界面

有了反向代理缓存,还有必要搞动态内容缓存(后端服务器自己的缓存)吗? 如果你的应用会有下列情形,则搞搞也无妨。

  1. 有的请求不会通过反向代理,直接到达后端;这时后端的缓存就能发挥作用

  2. 首次访问一个页面是没有缓存的,这时反向代理缓存就会miss。如果后端服务器预先实现了静态化(严格地说,这不算缓存),就可以解决这个问题 

  3. 如果一个后端服务器前面有N个反向代理,可能会出现缓存不均匀的情况;如果有的请求落在了缓存不丰满的反向代理服务器上,性能表现就会不佳;如果后端服务器有缓存,就可以为不丰满的反向代理服务器“补位”

Leave a Comment

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.