web cache server方案比较:varnish、squid、nginx

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。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏aCloudDeveloper

CPU 虚拟化

前面 虚拟化技术总览 中从虚拟平台 VMM 的角度,将虚拟化分为 Hypervisor 模型和宿主模型,如果根据虚拟的对象(资源类型)来划分,虚拟化又可以分为计...

39960
来自专栏李想的专栏

使用腾讯云无服务器云函数(SCF)分析天气数据

无服务器云函数(SCF)是腾讯云提供的Serverless执行环境,也是国内首款FaaS(Function as a Service,函数即服务) 产品。其核心...

1.1K70
来自专栏网络

摸金Redis漏洞

摘要:漏洞可以参考乌云案例 ? 1.Redis漏洞基本信息漏洞名称:Redis服务器远程执行漏洞漏洞详情:Redis因配置不当可以无密码登录,导致未授权访问。 ...

33450
来自专栏织云平台团队的专栏

自研路由如何解决运维六大挑战?

腾讯内部一些基础服务比如统一鉴权登录、社交关系链、支付被内部很多其他业务调用,调用方往往横跨几个事业群,几十个部门,有数百个模块,上万台设备。

518120
来自专栏企鹅号快讯

系统方案合集-系统备份方案

导读 | 精选 一、方案特点 此方案是基于批处理脚本和任务计划技术,针对系统特有文件结构和数据库结构的特点,而形成的系统备份方案。该方案特点: 1.易用性好,通...

46370
来自专栏企鹅号快讯

你了解你的数据吗

0x00 前言 你了解你的数据吗? 前几天突然来了点灵感,想梳理一下自己对数据的理解,因此便有了这篇博客或者说这系列博客来聊聊数据。 数据从业者有很多,比如说数...

250100
来自专栏mini188

缓存遇到的数据过滤与分页问题

遇到的问题 1、最初阶段 系统中做了一个监控功能,用于记录所有的请求数据,数据插入频繁,量非常大,比如一天1000万条。考虑到数据插入的效率,就使用内存KV缓存...

57650
来自专栏企鹅号快讯

回顾2017年的github社区,纵览软件世界的风云变幻

数百万开发人员使用GitHub来共享代码和建立业务。 你在这里做你的工作,学习新的技术,贡献开源项目,等等。 您已经证明,当好奇的人们有空间共同工作时,伟大的事...

19660
来自专栏企鹅号快讯

神级程序员教你如何写代码——十年编程内功心法

写代码就是学一门语言然后开始撸代码吗?看完了我一系列文章的同学或者本身已经就是老鸟的同学显然不会这么认为。编程是一项非常严谨的工作!虽然我们自嘲为码农,但是这工...

24450
来自专栏企鹅号快讯

应用系统性能优化的几个思路

最近遇到一个互联网金融应用系统的性能问题,看了开发的优化方案,觉得还不够深入。结合之前看到一些互联网企业分享的方案,今天从运维角度整理一下比较理想的应用系统性能...

31190

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励