web cache

linux运维中,web cache server方案的部署是一个很重要的环节,选择也有很多种比如:varnish、squid、nginx。

常用web cache server(varnish、squid、nginx)对比:

varnish和squid是专业的cache服务,而nginx的cache功能是由第三方模块完成。要做cache服务的话,肯定是要选择专业的cache服务,优先选择squid和varnish。
1)Varnish 可以认为是内存缓存,速度一流,但是内存缓存也限制了其容量;varnish没有专门的存储引擎。varnish本身的技术上优势要高于squid,它采用了“Visual Page Cache”技术,在内存的利用上,Varnish比Squid具有优势,它避免了Squid频繁在内存、磁盘中交换文件,性能要比Squid高。varnish是不能cache到本地硬盘上的。Varnish可以使用正则表达式快速、批量地清除部分缓存。varnish的内存管理完全交给内核,当缓存内容超过内存阈值时,内核会自动将一部分缓存存入swap中让出内存。以挪威一家报社的经验,1台varnish可以抵6台squid的性能。varnish用来做网站和小文件的缓存,相当给力的,做图片cache之类的合适。
2)squid是功能最全面的比较传统的web cache server,有自己的存储引擎,但是架构太老,性能不怎样。squid可以用于缓存更多更大的内容,属于专业用于缓存的server,比如尤其适合缓存图片、文档等;squid可以说是越俎代庖自己实现了一套内存页/磁盘页的管理系统,但这个虚拟内存swap其实linux内核已经可以做得很好,squid的多此一举反而影响了性能。squid支持正向代理缓存,而这方面varnish、nginx cache做不到。
3)nginx本来是反向代理/web服务器,用第三方模块memcache做的缓冲,其性能基本达到varnish,现在静态文件用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的好处

1)优化跨ISP网络访问速度,在国内大联通和大电信之间是世界上最远的距离,在国外,中国和其他地区很平行,用cdn可以优化全球响应速度
2)节约流量成本,CDN机房都一般都放在带宽便宜的小城市,带宽成本大概是BGP机房的1/3
3)快速提升性能,对于结构复杂的系统,部署CDN可以在不改动代码段情况提升网站整体性能,立竿见影

搭建CDN系统,有三种主流方案可以选择: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。

转载:https://www.cnblogs.com/kevingrace/p/6188123.html

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,539评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,594评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,871评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,963评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,984评论 6 393
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,763评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,468评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,357评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,850评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,002评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,144评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,823评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,483评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,026评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,150评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,415评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,092评论 2 355

推荐阅读更多精彩内容