自建CDN技术选型: squid varnish nginx

标签: cdn 技术 squid | 发表时间:2013-05-14 11:19 | 作者:con@lutaf.com (鲁塔弗)
出处:http://lutaf.com

CDN的全称是Content Delivery Network,即内容分发网络。其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳定。

使用CDN有3个好处

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

市面上有很多CDN供应商,比较著名有

  • Akamai (全球最大)
  • chinacache
  • webluker
  • cloudflare
  • chinacache

如果需要自己搭建CDN系统,有3种主流方案可以选择

  1. squid
  2. varnish
  3. nginx+memcache
软件 存储模式 性能 配置复杂度 purge效率 共享存储
squid 硬盘 较高 简单 可以并联,但是配置复杂
varnish 硬盘/内存 比较简单 不能
nginx 内存 需要编程 可以,支持一致性存储

典型用户

存储共享

对于大规模网站的CDN,存储共享是个强需求。为了消除单点,不可能只使用一台CDN服务器,如果只是简单做负载均衡,每个CDN server 上需要存储全部数据,存储利用率太低了

  • squid支持几个实例并联,实际使用的人不多
  • varnish 只能用单实例
  • nginx+memcache 天然的分布式存储

当然,采用squid/varnish 也有解决办法: 需要在它们前面部署一个支持url hash的负载均衡设备(硬件,软件均可,比如说haproxy)

内存存储的代价

如果CDN把缓存放在内存当中,固然性能会有提升,但是当服务遭遇故障重启之后,全部数据都会丢失需要重建,这个时候

  1. 会给后端应用服务器带来很大的短时压力
  2. 服务需要较长的时间才能完全恢复

而实际运行当中,由于各种原因,CDN服务重启的概率相当高

一个很悲剧的事实

对动态网页使用CDN,无论squid还是varnish都不能直接用,都需定制代码。

例如 varnish 会判断response的header,如果发现里面有set-cookie项,它就认为这个页面不应该被缓存。对于规模庞大/OOP封装严密的网站,普通程序员根本意识不到调用哪一个fucntion会输出set-cookie,这个会导致CDN命中率急剧降低。但你也无力去对每行代码做code review,没有办法,只能去修改varnish代码了,这又引入一个新的维护成本. Squid也有这个问题

purge效率

purge就是CDN删除缓存项的接口,国内的UGC网站,因为严厉的内容检查制度和泛滥的垃圾广告,删帖子删图片特别频繁,某些网站可能高达40%(发100个贴,有40个帖子可能被删除或者修改),所以对purge的效率有要求。

squid和varnish purge效率都达不到国内这种强度要求,nginx+memcache purge性能 要好很多

遇到突发事件,你要不及时删除指定的链接,你的老板就可能会去拍下面这种相片

老板入狱拍照

某门户网站曾经发生过,某个链接怎么也删不掉,一慌张把CDN所有缓存都删了重启,导致内网流量瞬间暴涨,各业务线的服务器全线报警,集体骂娘。

推荐CDN方案

  1. 中小型网站直接买服务就好,现在CDN已经进按需付费的云计算模式了,性价比是可以准确计算的
  2. 外地部署单点,推荐用squid
  3. 准备在公司内部实施私有云战略,推荐nginx+memcache

不建议使用varnish

以前的工作中,我力主把一个CDN集群从squid迁移到varnish,持续运行了2年,就是如上感受,严重不推荐.

相关 [cdn 技术 squid] 推荐:

自建CDN技术选型: squid varnish nginx

- - 鲁塔弗的博客
CDN的全称是Content Delivery Network,即内容分发网络. 其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳定. 优化跨ISP网络访问速度,在国内大联通和大电信之间是世界上最远的距离,在国外,中国和其他地区很平行,用cdn可以优化全球响应速度.

CDN技术的发展历程

- - 酷勤网-挖经验 [expanded by feedex.net]
酷勤网 � 程序员的那点事. 在互联网上,悄然生长出一张时刻为人们服务的网络,它像一位隐形的快递员,将各种各样的内容交付给用户,这就是内容分发网络(CDN,Content Distribute Network). CDN的基本概念和产生背景. Content Distribute Network,直译成内容分发网络,或者也有人写成Content Delivery Network,内容交付网络.

stunnel + squid 过墙

- - 移动开发 - ITeye博客
一台国外的Linux服务器. 软件介绍:  squid 高性能代理服务器  stunnel  TSL加密工具,因为我们的http都是明文传输的,所以必须使用工具对内容进行加密,才能躲过嗅探.  修改 stunnel.conf 默认位置  /etc/stunnel/. 只需修改 cert  位置为刚才 生成  stunnel.pem 的位置.

CDN(内容分发网络)技术原理

- - 博客 - 伯乐在线
Internet的高速发展,给人们的工作和生活带来了极大的便利,对Internet的服务品质和访问速度要求越来越高,虽然带宽不断增加,用户数量也在不断增加,受Web服务器的负荷和传输距离等因数的影响,响应速度慢还是经常抱怨和困扰. 解决方案就是在网络传输上利用缓存技术使得Web服务数据流能就近访问,是优化网络数据传输非常有效的技术,从而获得高速的体验和品质保证.

网络视频技术问答(11):CDN如何为视频网站服务?

- - 钛媒体TMTpost
CDN是Content delivery network的缩写,即内容分发网络,它具有下图所示的结构. 而随着网站规模的扩大,自建CDN也是一种选择. 问:CDN如何为视频网站服务. 答:CDN是Content delivery network的缩写,即内容分发网络. 如上图所示,CDN由两种服务器组成:.

三类型CDN厂商对比分析 技术创新型独领风骚

- - 业界
        随着视频直播的爆发、短视频的兴起、OTT电视的快速增长以及互联网视频的迅猛发展带来了CDN市场超过40%以上的增长速度,大家对于技术的需求也变得越加苛刻. 与此同时CDN技术切入门槛的降低,给厂商们带来了大举入局的机会,一时之间CDN市场群魔乱舞,好不热闹. 随着CDN市场逐渐趋于成熟状态,已呈现三足鼎立之局面.

Google宣布Google CDN

- way - Solidot
Google宣布了最新的帮助加快互联网速度的工具Page Speed Service,加快静态网页的载入速度,不支持动态网页. 在开发者注册该服务之后,可将网站的DNS入口记录指向Google,然后Page Speed Service从服务器上抓取内容,采用最佳的Web性能方案重写网页,通过Google在全球部署的服务器将内容展示给终端用户,加快网页载入速度.

CDN缓存策略

- - 开心平淡对待每一天。热爱生活
   CDN这个东西,当然是个好东西. 所以看到有FAQ就理所当然的复制下来,其实,最近我突然想到一件事情,中国的地区域名还有一个很有意思的地域域名,那就是js.cn,所以,我悄悄的申请了两个域名,cache.js.cn和cdn.js.cn,就是想用来做这种CDN转发,当然,只是简单的. 我最初的想法是(有一小部分),如果我的服务器里有N多人装了DZ论坛,那么这些JS和CSS其实都是共用的.

金山面试CDN

- - CSDN博客互联网推荐文章
今天去金山网络面试的时候,被问到 性能优化,我说了几个,最后说到了 CDN,我说要尽量把静态的内容放置到CDN,但是为什么呢. 面试官说既然你说到CDN,你就说说它的原理. 按我个人理解来说它是遵循就近原则,给用户找到最近的服务器来提供用户的静态内容,比如CSS文件、图像等,来提高用户访问网站的响应速度.

CDN缓存策略

- - 互联网 - ITeye博客
CDN这个东西,当然是个好东西……. 所以看到有FAQ就理所当然的复制下来,其实,最近我突然想到一件事情,中国的地区域名还有一个很有意思的地域域名,那就是js.cn,所以,我悄悄的申请了两个域名,cache.js.cn和cdn.js.cn,就是想用来做这种CDN转发,当然,只是简单的. 我最初的想法是(有一小部分),如果我的服务器里有N多人装了DZ论坛,那么这些JS和CSS其实都是共用的.