设为首页 收藏本站
查看: 980|回复: 0

[经验分享] web cache server方案比较:varnish、squid、nginx-Allen

[复制链接]

尚未签到

发表于 2018-10-19 09:49:51 | 显示全部楼层 |阅读模式
  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。


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-623467-1-1.html 上篇帖子: Windows Server 2012 克隆修改SID 下篇帖子: PL\SQL中对数据库操作后没有改变
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表