linux运维中,web cache server方案的部署是一个很重要的环节,选择也有很多种比如:varnish、squid、nginx。
下面就对当下常用的这几个web cache server做一对比:

1)从功能上说:varnish和squid是专业的cache服务,而nginx的cache功能是由第三方模块完成。
2)要做cache服务的话,肯定是要选择专业的cache服务,优先选择squid和varnish。
Varnish 可以认为是内存缓存,速度一流,但是内存缓存也限制了其容量,缓存页面和图片一般是挺好的;
varnish本身的技术上优势要高于squid,它采用了“Visual Page Cache”技术,在内存的利用上,Varnish比Squid具有优势,它避免了Squid频繁在内存、磁盘中交换文件,性能要比Squid高。
varnish是不能cache到本地硬盘上的。
Varnish可以使用正则表达式快速、批量地清除部分缓存
varnish的内存管理完全交给内核,当缓存内容超过内存阈值时,内核会自动将一部分缓存存入swap中让出内存。以挪威一家报社的经验,1台varnish可以抵6台squid的性能。
varnish用来做网站和小文件的缓存,相当给力的,做图片cache之类的合适
varnish没有专门的存储引擎
3)squid是功能最全面的比较传统的web cache server,有自己的存储引擎。,但是架构太老,性能不怎样。
squid可以用于缓存更多更大的内容,属于专业用语缓存的功能,比如尤其适合缓存图片、文档等;
squid可以说是越俎代庖自己实现了一套内存页/磁盘页的管理系统,但这个虚拟内存swap其实linux内核已经可以做得很好,squid的多此一举反而影响了性能
squid支持正向代理缓存,而这方面varnish、nginx cache做不到
4)nginx本来是反向代理/web服务器,用了插件可以做做这个副业,但是本身不支持的性能比较多。
nginx是用第三方模块ncache做的缓冲,其性能基本达到varnish,但在架构中nginx一般作为反向(静态文件现在用nginx的很多,并发能支持到2万+)。
在静态架构中,如果前端直接面对的是CDN活着前端了4层负载的话,完全用nginx的cache就够了。
nginx Cache是为了提供访问最频繁资源的缓存而已,适合缓存纯文本体积较小的内容,缓存少量页面资源,主业是提供Web服务与代理的作用,若是Cache内容过多容易造成性能瓶颈与负载过大.
nginx也没有专门的存储引擎,nginx可以认为是已个七层LB,再加上可以嵌入各种脚本语言,实现WAF规则和七层的定制开发策略非常容器,但要是作为专门的web cache server还要差不少。

如何构建一个高性能的缓存服务器,需要考虑的几个关键的技术因素:
1)计算:需要考虑异步高并发,多核优化,cpu cache友好,需要构造一些精巧的技术结构,比如阿里swift就用到了后缀树;
2)网络:zero copy发包(理论上说DPDK也可以用,sendfile;tcp内核协议栈策略定制;套接字的多路复用、port reuse等;
3)存储:linux磁盘文件系统是通用的存储系统,天生对于海量小文件的IO不够友好;因此对于基于磁盘的缓存服务器来说,必须自己实现一个高性能的存储引擎,需要针对小数块的随机IO优化(主要随机读),另外分级存储,cache置换等也需要考虑。缓存服务器的存储引擎的技术复杂度不太高,没有关键字排序、ACID等要求,不说RDBMS的存储引擎,比基于LSMtree(例如leveldb)的KV存储引擎也要简单些。
4)软件上,则考虑 DNS、tcp、http等协议特性,比如DNS缓存,回源切换,http内容压缩,失效时间等等。

针对CDN方案的实现:如何选择squid、Varnish、Nginx+memcache??
CDN的全称是Content Delivery Network,即内容分发网络。
其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳定。
1.使用CDN有3个好处
1)优化跨ISP网络访问速度,在国内大联通和大电信之间是世界上最远的距离,在国外,中国和其他地区很平行,用cdn可以优化全球响应速度
2)节约流量成本,CDN机房都一般都放在带宽便宜的小城市,带宽成本大概是BGP机房的1/3
3)快速提升性能,对于结构复杂的系统,部署CDN可以在不改动代码段情况提升网站整体性能,立竿见影
2.市面上有很多CDN供应商,比较著名有:
Akamai (全球最大)
webluker
cloudflare
chinacache(蓝汛)
网宿CDN
帝联CDN
阿里CDN(web cache server 叫swift)
腾讯CDN
七牛云融合CDN
3.如果需要自己搭建CDN系统,有3种主流方案可以选择:squid、varnish、Nginx+memcache.
1)对于大规模网站的CDN,存储共享是个强需求。为了消除单点,不可能只使用一台CDN服务器,如果只是简单做负载均衡,单台CDN server上需要存储全部数据,存储利用率太低了。
squid支持几个实例并联,实际使用的人不多;
varnish 只能用单实例;
nginx+memcache 天然的分布式存储;
当然,采用squid/varnish 也有解决办法: 需要在它们前面部署一个支持url hash的负载均衡设备(硬件,软件均可,比如说haproxy)
2)内存存储的代价
如果CDN把缓存放在内存当中,固然性能会有提升,但是当服务遭遇故障重启之后,全部数据都会丢失需要重建,这个时候会给后端应用服务器带来很大的短时压力服务需要较长的时间才能完全恢复.
而实际运行当中,由于各种原因,CDN服务重启的概率相当高.
3)一个很悲剧的事实
对动态网页使用CDN,无论squid还是varnish都不能直接用,都需定制代码。
例如varnish会判断response的header,如果发现里面有set-cookie项,它就认为这个页面不应该被缓存。对于规模庞大/OOP封装严密的网站,普通程序员根本意识不到调用哪一个fucntion会输出set-cookie,这个会导致CDN命中率急剧降低。但你也无力去对每行代码做code review,没有办法,只能去修改varnish代码了,这又引入一个新的维护成本. Squid也有这个问题
4)purge效率
purge就是CDN删除缓存项的接口,国内的UGC网站,因为严厉的内容检查制度和泛滥的垃圾广告,删帖子删图片特别频繁,某些网站可能高达40%(发100个贴,有40个帖子可能被删除或者修改),所以对purge的效率有要求。
squid和varnish的purge效率都达不到国内这种强度要求,nginx+memcache purge性能要好很多。
在当前的中国,遇到突发事件后,要是不及时删除指定的链接或内容,后果可能会很严重(小到个人被炒,大到公司被关都有可能)
某门户网站曾经发生过,某个链接怎么也删不掉,一慌张把CDN所有缓存都删了重启,导致内网流量瞬间暴涨,各业务线的服务器全线报警,集体骂娘!
5)推荐CDN方案
中小型网站直接买CDN服务就好,现在CDN已经进行按需付费的云计算模式了,性价比是可以准确计算的;
外地部署单点,推荐用squid;
准备在公司内部实施私有云战略,推荐nginx+memcache;
不太建议使用varnish。

web cache server方案比较:varnish、squid、nginx的更多相关文章

  1. varnish squid nginx比较

    linux运维中,web cache server方案的部署是一个很重要的环节,选择也有很多种比如:varnish.squid.nginx.下面就对当下常用的这几个web cache server做一 ...

  2. varnish/squid/nginx cache 有什么不同?

    SQUID 是功能最全面的,但是架构太老,性能不咋的Varnish 是内存缓存,速度一流,但是内存缓存也限制了其容量,缓存页面和图片一般是挺好的Nginx 本来是反向代理/web服务器,用了插件可以做 ...

  3. LVS+Keepalived+Squid+Nginx+MySQL主从高性能集群架构部署方案

    方案一,在tomcat的workers.properties里面配置相关条件 worker.tomcat.lbfactor= worker.tomcat.cachesize= worker.tomca ...

  4. 谈谈varnish,squid,apache,nginx缓存的对比

    总是有人在问cache用什么,有varnish,squid,apache,nginx这几种,到底是我们用什么架构cache. 1.从这些功能上.varnish和squid是专业的cache服务,而ap ...

  5. 高并发WEB网站优化方案

    一.什么是高并发在互联网时代,所讲的并发.高并发,通常是指并发访问,也就是在某个时间点,有多少个访问同时到来.比如,百度首页同时有1000个人访问,那么也就是并发为1000.通常一个系统的日PV在千万 ...

  6. 转: 三大WEB服务器对比分析(apache ,lighttpd,nginx) (2008年的旧文,仅供参考之用)

    from:  http://www.blogjava.net/daniel-tu/archive/2008/12/29/248883.html 三大WEB服务器对比分析(apache ,lighttp ...

  7. CDN之Web Cache

    1. Cache 的工作方式 Web Cache 作为一种网页缓存技术,可以在用户访问网站服务器的任何一个中间网元上实现.根据 HTTP 协议的定义,在一次网页访问中,用户从客户端发出请求到网站服务器 ...

  8. Lvs+Keepalived+Squid+Nginx负载均衡

    前言* 随着互联网IT行业的发展,越来越多的企业开始使用开源软件搭建自己的web架构,主流的LVS也得到了广泛的应用,在保证高可用的同时,用户对网站的体验速度也有了很高的要求,这时候需要我们在我们的架 ...

  9. office web apps server安装部署

    操作系统:windows 2012 软件下载地址: 链接:https://pan.baidu.com/s/1c3WWFs8 密码:4dcy NDP452-KB2901954-Web.exe(.Net ...

随机推荐

  1. NSString和SwiftString的区别和使用场景

    当下Swift项目已经越来越多,可能会经常见到  str as NSString 或者 str as String 字符串在这两者之间的来回切换,因为有些操作用OC字符串比较方便,而有些操作则相反,熟 ...

  2. Java单例模式实现的几种方式

    单例模式好多书上都是这么写的: public class SingleTon1 { private SingleTon1(){ } private static SingleTon1 instance ...

  3. android绘制view的过程

    1 android绘制view的过程简单描述  简单描述可以解释为:计算大小(measure),布局坐标计算(layout),绘制到屏幕(draw):            下面看看每一步的动作到底是 ...

  4. iOS9 HTTP 通信报错解决方案

    UIWebView *myview = [[UIWebView alloc] initWithFrame:CGRectMake(, , [UIScreen mainScreen].bounds.siz ...

  5. UIWindows 使用注意

    只有Window才有自发权利显示,其他View都需要由Window负责显示.   注:* 不能将控制器直接添加到Window上,会出现野指针错误.        * 不建议直接使用window开发(比 ...

  6. 【iOS】Mac下SVN的服务器搭建

    在协同开发中,版本控制是必备的.完全不敢想象团队都在用U盘.QQ管理代码的景象.但是svn不像git,拥有众多免费的代码库,如果在同 一局域网下,搭建svn服务端来同步代码是很有必要的.本文将详细讲解 ...

  7. YUM源的简介,配置与使用

    A.yum 简介 yum,是Yellow dog Updater, Modified 的简称,是杜克大学为了提高RPM 软件包安装性而开发的一种软件包管理器.起初是由yellow dog 这一发行版的 ...

  8. ASP.NET MVC SSO 单点登录设计与实现

    实验环境配置 HOST文件配置如下: 127.0.0.1 app.com127.0.0.1 sso.com IIS配置如下: 应用程序池采用.Net Framework 4.0 注意IIS绑定的域名, ...

  9. 14、SEO工程师要阅读的书籍 - IT软件人员书籍系列文章

    SEO工程师是Web项目中比较重要的一个角色.他主要负责网站的针对搜索引擎的优化方案的编写和实施.因为现在网站数量庞大,在全世界的这么多网站当中,想要让用户访问你的网站,就需要一些技巧性的内容.很多用 ...

  10. *MyBatis框架 在控制台打印sql语句

    在 log4j.properties  中将这段代码添加进去就好了#log4j.rootLogger=INFO, Console#Consolelog4j.appender.Console=org.a ...