CDN的全称是Content Delivery Network,即内容分发网络。其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳定。
使用CDN有3个好处
- 优化跨ISP网络访问速度,在国内大联通和大电信之间是世界上最远的距离,在国外,中国和其他地区很平行,用cdn可以优化全球响应速度
- 节约流量成本,CDN机房都一般都放在带宽便宜的小城市,1M的费用大概是BGP机房的1/3
- 快速提升性能,对于结构复杂的系统,部署CDN可以在不改动代码段情况提升网站整体性能,立竿见影
市面上有很多CDN供应商,比较著名有
- Akamai (全球最大)
- chinacache
- webluker
- cloudflare
- chinacache
如果需要自己搭建CDN系统,有3种主流方案可以选择
- squid
- varnish
- nginx+memcache
squid | 硬盘 | 较高 | 简单 | 低 | 可以并联,但是配置复杂 |
varnish | 硬盘/内存 | 高 | 比较简单 | 低 | 不能 |
nginx | 内存 | 高 | 需要编程 | 高 | 可以,支持一致性存储 |
典型用户
- Squid http://www.squid-cache.org,大多数CDN供应商都用squid
- varnish http://www.varnish-cache.org,用户较少,sina微博在用
- nginx+memcache 搜狐CDN集群,淘宝的部分业务
存储共享
对于大规模网站的CDN,存储共享是个强需求。为了消除单点,不可能只使用一台CDN服务器,如果只是简单做负载均衡,每个CDN server 上需要存储全部数据,存储利用率太低了
- squid支持几个实例并联,实际使用的人不多
- varnish 只能用单实例
- nginx+memcache 天然的分布式存储
当然,采用squid/varnish 也有解决办法: 需要在它们前面部署一个支持url hash的负载均衡设备(硬件,软件均可,比如说haproxy)
内存存储的代价
如果CDN把缓存放在内存当中,固然性能会有提升,但是当服务遭遇故障重启之后,全部数据都会丢失需要重建,这个时候
- 会给后端应用服务器带来很大的短时压力
- 服务需要较长的时间才能完全恢复
而实际运行当中,由于各种原因,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方案
- 中小型网站直接买服务就好,现在CDN已经进按需付费的云计算模式了,性价比是可以准确计算的
- 外地部署单点,推荐用squid
- 准备在公司内部实施私有云战略,推荐nginx+memcache
不建议使用varnish
以前的工作中,我力主把一个CDN集群从squid迁移到varnish,持续运行了2年,就是如上感受,严重不推荐.
相关推荐
如何用DNS+GeoIP+Nginx+Varnish做世界级的CDN.
动态CDN专题报告:网络直播、游戏井喷,动态加速需求爆发.pdf
来自GDG(Google Developer Group) 许海洋和张磊带来了一个有实践价值的议题:从成本、效率和具体架构设计(选型、配置、优化等)角度谈通过自建CDN来应对不同类型的DDOS攻击。 2013年1月12日由OWASP杭州区和“杭州...
CDN配置软件可帮助大中小站长或大中小企业低成本,轻松构建自己的CDN网络或服务器群,提供专业的CDN软件,更好的CDN技术在线服务! 最新更新: Timer.exe 定时清理缓存 Timer.exe 就是自动清理缓存 无人值守 真正的自动...
用DNSPod 和 Squid打造自己的cdn 构架在Linux系统上 非常详细 0基础开始 从装linux系统开始 菜鸟也能学会
├── etc squid配置文件├── libvideoreg 视频缓存动态链接库,用来解析不同视频网站URL├── squid-2.7.STABLE9-new 打过patch后的squid-2.7.STABLE9├── squid squid-2.7.STABLE9的视频缓存patch文件└──...
用bind 和squid打造自己的CDN单服务器版
CDN配置软件可帮助大中小站长或大中小企业低成本,轻松构建自己的CDN网络或服务器群,提供专业的CDN软件,更好的CDN技术在线服务! 智能CDN软件功能特性 1、运行于Win2003系统,支持vps和服务器 2、服务器或VPS必须...
构建高校安全的CDN,大纲: • 性能优化! • 安全防御! • 展望 希望对大家了解和学习CDN有所帮助
XCDNCentOS一键安装Nginx环境要求CentOS 6/7当前版本nginx/1.18已编译模块--with-stream--with-...//raw.githubusercontent.com/helloxz/ngi
当Node Sass解析@import带有以cdn:的URL时cdn:它将尝试根据以下URL解析URL。 这对于直接使用或文件很有用 @import " cdn:https://unpkg.com/normalize.css@8.0.0/normalize.css " ; 为方便起见,如果@import URL ...
自建CDN防御DDoS架构设计、成本与部署细节
varnish+cdn
Blob专案:CDN(开放原始码) 易于使用,可定制,安全,最新和简约。文献资料即将推出。入门该项目在运行。 请确保所有内容都是最新的。 重要的是,请在下面使用我们推荐的Essentials版本,以防止发生任何意外的故障...
用DNSPod和Squid打造自己的CDN doc文字教程 很详细。 linux环境下 让菜鸟也能搭建CDN 绝对的0基础起步。 从安装linux系统开始讲解。。。
· :sparkles:NGINX不仅仅是一个网络服务器。 您可能已经知道了。 我们喜欢NGINX,因为: 内存使用率低高并发异步事件驱动架构负载均衡反向代理具有缓存的FastCGI支持(PHP) 快速处理静态文件带有SNI的TLS / SSL ...
首先我们要明白一下squid在CDN中扮演的角色。squid在CDN中其实只是一个代理+缓存。跟一般的代理服务器类似,squid代替用户向真正有内容的服务器进行请求,并且缓存下来
Nginx搭建CDN服务器参考文献:Nginx 搭建伪 CDN 服务器在/usr/local/docker/nginx新建docker-compose.yml在
MathFlare CDN 由 MathFlare Co. Ltd. 提供支持 关键文件 Bootstrap.js 和 Bootstrap.css https://cdn.mathflare.tk/bootstrap.min.css https://cdn.mathflare.tk/bootstrap-grid.min.css ...