CDN 简介(一)

这个系列的文章主要参考《CDN 技术详解》,作为大陆第一本介绍 CDN 的,写的确实比较烂,根本就谈不上『详解』,但是『介绍』的性质已经达到了。因此,我会结合这本书以及自己的经验感受,皮毛的总结下 CDN 技术,因为很多具体的原体我也不是很清楚。

第 1 章 引言
用户访问网络,会遇到下面四个地方的瓶颈。
1. 第一公里,也就是网站接入互联网提供的带宽,访问量越大,带宽消耗也就越多,如果在某个时间段内,超过了预计的带宽使用,会造成网络拥塞,严重的直接丢包,用户无法访问。
2. 最后一公里,就是用户接入互联网的那段链路,也就是用户的接入带宽,早期家庭的带宽比较小,近几年光纤发展,10M 甚至 20M 的带宽成为了可能。
3. 运营商之间的互联互通,这个是大陆的特色,跨运营商的带宽非常的小,而且结合的点比较少,因此电信要访问联通的资源就会比较慢。
4. 骨干带宽拥塞,这个不单单是大陆的问题,骨干网络的核心节点一般承载的压力都比较大,路由饱和也时有发生,造成的结果就是排队或者直接丢包。
大家可以看《中国电信2009年chinanet网络优化方案交流》这个幻灯片,感谢 @yangzhe1990 同学提供,省与省之间的带宽大的也不过就几十 G 的样子。看看现在 IDC 的建设,动不动就是 10G 的网络,40G 也早就实现了。

对于互联网来说,时间就是金钱,一个网站,如果用户等待的时间超过 8s 就会流失 30% 的用户。每增加 1s 的等待时间,转化率就会降低 7%。
通过 CDN,对用户来说,可以提高访问的速度,对网站来说,通过将访问压力分散到各个边缘节点,避免了网站的某个或者某几个节点压力过大的问题,同时可以节约宝贵的双线或者多线的的带宽成本,从而降低整个带宽成本,明显是个三赢的局面。

最早开始商业化运作的,也是目前全球最大的 Akamai,目前占据整个互联网 20% 的流量,由 World Wide Wait 变成了 World Wide Web。大陆做的比较好的也就那么几家,蓝汛,帝联,网宿,还有个前段时间被收购的快网。

第 2 章 CDN 技术概述
CDN 其实是个很庞大的系统,可以分为几个大的部分:
分发服务系统:静态内容、动态内容、流媒体、应用协议加速等以及日志的采集
负载均衡系统:域名解析、全局/区域/本地负载均衡、流量管理
运营系统:客户管理、计费、数据展示等
网络管理系统:设备管理、链路监控、故障处理恢复等

主要就上面的这些,其他的大同小异,灵活变通就好了。

CDN 的最终目的是为了减少用户的等待时间,因此需要在 POP(point of presence)节点、区域或者中心节点部署大量的 cache 设备。CDN 系统中负责管理调度的设备组成中心节点,其保存了最多的副本,当 POP 设备未命中时,会向中心节点请求,如果中心的仍未命中,则出现了回源,也就是向源站取数据。
对于一个节点来说,其 cache 设备以及 LB 的设备部署大体有两种方式,一个是旁路,一个是穿越,其实就类似 LVS 着哦你活该的 DR 以及 Nat 方式了,但是安全性方便显然是 nat 好些,但是从扩展的角度来说,DR 方式更好。
一般商业的 CDN 也会根据不同业务,划分了普通的网页加速、流媒体加速、大文件加速、动态加速、应用协议加速,前面几个比较好理解,动态加速最大的问题就是要保证各个节点与源站之间副本一致的问题,尤其涉及到 DB 的更新时;应用协议大部分时候是指 HTTPS 协议,这个要耗大量的 cpu 资源,因此可以通过专门的 SSL 硬件来实现加解密,同样的,单节点访问量大了即使有 SSL 硬件也撑不住,这个交给 CDN 做比较好。