开发者社区> 知与谁同> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

自建CDN技术选型: squid varnish nginx

简介:
+关注继续查看

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

使用CDN有3个好处

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

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

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

如果需要自己搭建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年,就是如上感受,严重不推荐.

 

原文发布时间为:2013-05-15

本文来自云栖社区合作伙伴“Linux中国”


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
nginx负载均衡及配置
nginx负载均衡及配置 1 负载均衡概述 负载均衡由来是因为当一台服务器单位时间内的访问量很大时,此时服务器的压力也会 验,就诞生了负载均衡来分担服务器压力.
1255 0
Nginx的负载均衡方案详解
版权声明:本文为博主chszs的原创文章,未经博主允许不得转载。 https://blog.csdn.net/chszs/article/details/43203465 Nginx的负载均衡方案详解 作者:chszs,转载需注明。
802 0
nginx 负载均衡示例
一、nginx   nginx是一个轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,以开源形式发布。nginx的性能稳定,功能丰富,配置简单,且占用系统资源低。可支持多个系统平台,nginx的下载地址如下:http://nginx.org/en/download.html 。
618 0
解析nginx负载均衡
摘要:对于一个大型网站来说,负载均衡是永恒的话题。随着硬件技术的迅猛发展,越来越多的负载均衡硬件设备涌现出来,如F5 BIG-IP、Citrix NetScaler、Radware等等,虽然可以解决问题,但其高昂的价格却往往令人望而却步,因此负载均衡软件仍然是大部分公司的不二之选。nginx作为webserver的后起之秀,其优秀的反向代理功能和灵活的负载均衡策略受到了业界广泛的关注。本文
1597 0
Nginx负载均衡如何进行配置
Nginx负载均衡是一个很神奇的技术,很多人都不能很好的掌握这个技术,今天在这里我们向大家详细的介绍下有关Nginx负载均衡的问题。今天小试了一下Nginx负载均衡,真是爽啊!Nginx是什么? Nginx (”engine x”) 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器。
762 0
NGINX常用负载均衡设置
    当前比较流行的负载均衡前端服务器主要有apache(with mod_proxy),nginx,lighttpd,squid,perlbal,pound,或者如果你的域名服务商提供DNS级别的负载均衡,也可以(就是一个域名随机指向多个IP,定制性不高)。     以前自己常用pound作为前端,它专注于负载均衡,支持https协议,配置还算简单,不过渐渐发现功能不够强大,转而研究其他
1128 0
+关注
10071
文章
2994
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载