最近粗略地读完了《CDN技术详解》这本书。书中有一部分几乎完全是只看得懂文字而看不懂意思,附录的技术实操部分也直接跳过。尽管如此,读完了还是很有收获,不仅仅对CDN的理解更深了一些,对网络相关的内容如DNS协议、SSL协议等也顺带地了解了一些。

本文根据该书的阅读笔记整理而成,简要地介绍了CDN的作用、原理和类型等。

CDN是什么

CDN,英文名Content Distribute Network或者Content Delivery Network,中文名内容分发网络。顾名思义,就是协助网络内容的分发。CDN本质上是服务器集群和一套调度系统。通过服务器集群,覆盖更广的用户;通过调度系统分配最合适的服务器给用户访问,从而能够让最广大的用户群体更快地访问到网络内容。

为什么需要CDN

网站A的服务器架在广州电信机房,如果没有CDN,全国各地的用户都会直接向这台服务器请求内容,就有可能出现以下几个问题:

  1. 同时访问量大了,网站的服务器性能不足或者带宽不足。
  2. 从较远的物理位置(比如哈尔滨电信)来请求,经过大量中间节点造成延时。
  3. 如果用户不是电信网络,那么可能又会有延迟发生,因为不同宽带运营商互联互通的带宽有限,是经常发生拥堵的地方。
  4. 这种直接访问会占用中心节点带宽,造成拥堵,同样可能会影响体验。

这些都是体验上的问题,同样还有成本上的考量。假如网站A想要自己动手搭建更多遍布全国的服务器来解决问题的话,成本非常高。除非网站A是流量巨大的网站,否则自建都不划算。

在CDN出现之前,解决这些问题的办法有:自建服务器集群、镜像技术和缓存技术。而CDN就是缓存技术的发展,可以认为是缓存技术的分布式集群实现。

CDN的加速原理

CDN将网站的内容分发到(缓存到)遍布全部各个城市和地区的边缘节点上,同时通过调度系统(负载均衡系统)将不同地区不同运营商的用户合理调度到最适合的边缘节点以及节点内的服务器。

这样,CDN承载了网站的大部分流量,降低了网站压力;同时利用边缘节点,不走骨干网络减少骨干网络拥堵;而CDN的调度又避开了不同运营商互联互通;大量的分布全国的边缘节点实现了就近访问;同时,网站不需要承载巨量的CDN建设成本,只需要按照带宽付费即可。

网站接入CDN

以下是网站接入CDN的典型步骤:

  1. 将需要加速的域名,添加一个由CDN提供的CNAME。这样用户在访问加速域名时,实际上会访问到这个CNAME。
  2. CNAME在解析时会使用CDN的权威域名服务器。在那里根据DNS,去判断用户的物理位置和运营商情况等,然后返回边缘节点服务器ip客户端。
  3. 客户端再次请求返回的ip,边缘节点服务器由本地负载均衡服务器根据用户请求内容、节点服务器状态等动态因素去判断哪台服务器可以提供服务,通过302重定向到那台服务器。

CDN的架构

CDN从组成架构上主要由四个部分组成:分发系统、负载均衡系统、网络管理系统和运营系统。分发系统,就是由各级节点组成;负载均衡系统,就是根据节点情况和用户请求情况按照既定负载均衡策略进行合理调度的系统;网络管理系统,是给运维进行操作,同时也会收集各个节点的信息,为负载均衡系统的运行提供依据;运营系统,则是CDN商业化所需,提供各类查询服务。

CDN在以上组成部分中,又有多级架构,即:中心层-区域层-边缘层。每层的每个节点都有对应的分发系统、负载均衡系统和网络管理系统。设置多级架构的初衷是,减少向源站请求的次数。

CDN的一大作用就是降低源站的压力,尤其是视频网站,因为流量巨大。采用多级架构,则在每个层级都有所请求内容的缓存,如果边缘没有,就去查询区域层,如果有,就取回来;如果区域层也没有,就去中心层;如果中心层也没,就去源站请求,然后缓存在中心层。这种架构可以有效地降低需要去源站请求(回源)的频次。当然了,缓存本身也是有存储成本的,实际也不会把全部内容都缓存,即使缓存也不会每个边缘节点都缓存。这方面会综合性能和成本做平衡的考量。

负载均衡策略

负载均衡分为基于四层和基于七层的,基于四层的不了解请求内容,基于七层的可以根据请求内容解析结果更为精准地完成调度。

负载均衡需要考虑的因素有:

  • 物理距离(基于本地DNS判断,如果DNS配置错误,则会调度不合理)
  • ip地址
  • 服务器健康状况
  • 会话保持:相同客户的连贯业务解析到相同服务器
  • 响应时间
  • 会话能力阈值
  • 服务器本身权重:比如费用
  • 往返时间
  • 其他信息:比如服务器当前可用会话数,最少选择次数

基于以上因素,可以有静态策略和动态策略。静态策略是实现就固定的策略,动态策略则会考虑用户请求内容以及服务器状态等因素。一般情况下,会是两类策略的结合。

CDN加速类型

CDN加速类型,基本上分为静态内容加速和动态内容加速。静态内容,就是大家访问时看到的都一样,比如视频、图片、网页等;而动态内容,就是不一样的,比如社交网站的时间线、购物网站的搜索结果等动态网页。

静态内容加速,又分为了:网页加速、流媒体加速、文件传输加速和应用协议加速。应用协议加速,指的是企业应用在局域网和广域网传输的加速,也包括HTTPS的SSL加速。

不同加速类型的特点不同,所使用的服务器配置也不同,因此一般针对不同加速类型都是配置独立的系统,一般不共用。

不同加速类型的实现原理

这里特别要说的是SSL加速和动态加速。

HTTPS的实现方式要求在请求期间有较大量的计算,因此实现SSL加速一般是通过硬件来实现的。通过在服务器上添加SSL加速版或者将SSL加速板加在专用的SSL加速设备上来实现。

动态网页,一般包括4个部分:网页表现层(静态)、业务逻辑层、业务数据层、用户数据层。要想实现部分或者全部的动态网页加速的话,就要在边缘节点服务器中复制业务逻辑层来实现“边缘计算”,以及业务数据层和用户数据层。这样,用户在边缘节点就可以完成动态页面的访问。不过,这个方式要注意边缘节点数据库与中心节点的同步与一致。

流媒体加速原理

流媒体,分为直播和点播加速。点播的话,基本上是将点播文件切成小块,然后根据实际情况分散缓存到边缘节点。

直播的话,内容无法提前缓存,在实际请求中,边缘节点会向上级节点去请求然后分发。虽然这个过程中没有了提前缓存带来的效率,但同样可以降低源站的压力,同样可以将用户调度到最合适的节点来提升效率。

CDN未来的发展

CDN与云计算在混搭产生新的业务,比如云主机直接搭载CDN服务,比如未云主机服务的CDN等。 CDN与P2P技术也可以进行融合,来实现降低成本与提高效率。

相对于外国的顶尖CDN公司,国内CDN公司的增值较低,基本上就是转卖IDC资源。在CDN行业已成蓝海的情况下,为长尾用户推出特色服务,增加更多服务特色才有服务增值的可能。

这本书读起来挺难的,里面有很多偏技术的内容,无法理解;还有一些,只能熟悉下相关的名词;好一点的,就是能够理解其表达的逻辑。

即使是如此,这个依然是CDN行业的必读书,其他介绍CDN的一般性书籍基本上就不用读了。