自建CDN技术选型:Squid Varnish Nginx

运维 系统运维
CDN系统能够实时地根据网络流量和各节点的连接、负载状况以及到用户的距离和响应时间等综合信息将用户的请求重新导向离用户最近的服务节点上。其目的是使用户可就近取得所需内容,解决 Internet网络拥挤的状况,提高用户访问网站的响应速度。本文总结了自建CDN技术选型那些事儿。

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

使用CDN有3个好处

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

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

  • Akamai (全球***)
  • chinacache
  • webluker
  • cloudflare
  • chinacache

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

  1. squid
  2. varnish
  3. nginx+memcache

典型用户

存储共享

对于大规模网站的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性能 要好很多

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

[[72915]]

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

推荐CDN方案

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

不建议使用varnish

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

责任编辑:黄丹 来源: 博客
相关推荐

2012-04-02 17:46:08

缓存对比

2014-12-30 15:37:39

DevOps听云CDN

2016-09-12 15:48:06

Nginxvarnish缓存

2015-03-27 09:52:06

腾讯CDN/CDN

2017-05-24 16:38:21

CDN融合自建

2020-06-17 15:44:47

技术研发架构

2012-06-11 16:10:56

CDN互联网

2012-02-13 16:00:35

内网安全技术选型安全产品

2023-09-15 14:37:55

2012-11-05 10:33:40

IBMdw

2018-06-28 09:06:27

DNS技术CDN

2015-06-25 18:54:17

varnish降级系统

2012-04-02 14:25:12

squid缓存

2012-04-02 15:29:00

httpvarnish

2013-10-28 13:48:10

技术选型

2012-11-14 09:42:16

Pikacode技术选项项目

2022-05-06 15:38:21

鸿蒙App开发技术

2011-09-14 10:08:07

Beanstalkd

2019-12-12 10:58:37

Docker容器引擎

2024-09-03 13:59:37

点赞
收藏

51CTO技术栈公众号