CDN 简介(二)

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

第 3 章 内容缓存工作原理及实现
互联网最终的就是 cache,CDN 也不列外。在 CDN 出现之前,有如下的一些技术来解决部分的问题:
1. scale up/scale out
这个当然目前还在使用,前者是提高服务器配置,后者就是直接加机器。不过这些不能很好的解决问题,尤其对于距离较远的用户。

2. mirroring
这个目前还是有不少网站在用的,就是做一个跟源站一模一样的 mirror,然后可以通过 IP 或者 DNS 解析来定向用户的访问,不过大部分时候是用户自己选择,你得把用户都当作傻逼,因此他们选错了非但不能起到加速的效果,反而由于跨了运营商而拖了后腿。其次就是这个由于是这个资源的 mirror,需要大量的资源的堆积。

3. cache
这个已经有 CDN 的雏形在里面了,减少重复的访问,节约带宽。

下面这些问题是一个网站发展过程中都会遇到的,CDN 能够很大程度上解决这些问题。
1. 无法及时满足用户的并发需求
2. 在没有 mirror 之前,远距离访问很痛苦
3. 有了 mirror,不能及时同步
4. 一个 mirror 失效,不能及时调度
5. 部署了多套 mirror 之后,成本会显著增加
6. 中心机器的 IP 暴露,安全性问题

cache 一般都是作为 proxy 使用的,说到 proxy 也就有正向、反向和透明三种模式。
正向在公司内部使用较多,主要是控制灵活,用户需要将 GW 设置为这个 cache 的 IP。这样可以节约带宽,上网行为审计,同时也可以加速网页访问。
反向一般部署在网站前面,对于用户来说,是透明的。这样第一比较安全,第二也能起到一定的 LB 作用,这时候就可以通过 GSLB 来对全网的 cache 设备做 LB。
透明跟正向类似,但是用户不需要设置 GW 为这个代理的 IP。当用户请求一个 url 时,其请求被透明,然后他检查是 hit 了还是 miss 了,如果 miss 则帮助用户取回数据然后返回给用户。

cache 最起码有下面几个好处:
1. 减少相应延时
2. 较少带宽
3. 减轻服务器压力
Continue reading

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 做比较好。