CDN的全称是ContentDelivery Network,即内容分发网络。它是构建在现有网络基础之上的智能虚拟网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率。
简单来说,CDN就是为了网络内容访问速度“更快“而生的。那么如今的网络本身四通八达,为什么还需要CDN呢?
一、为什么需要CDN?
举个简单的例子,假设我们忽略网络传输的损耗、设备延时,网络传输速度接近光速,是30万公里每秒,从东京到美国硅谷的距离大概为1万公里,也就是说,如果你的服务器在东京,你上传了一张很小的图片,美国用户访问至少需要60毫秒。而且,这只是理论数据,现实世界中,网络环境是十分复杂的,跨地域、跨运营商、网络拥塞、抖动等问题,都会积少成多,使得延时成倍增加,还有可能访问失败,最终影响访问体验。
CDN的出现,正是为了解决这个问题。我们将这张图片分发并缓存在美国的CDN节点之上,美国用户就无需从东京获取数据,直接从就近的美国本地CDN节点获取到图片,这大大节省了传输时间,提升访问效率。CDN的节点通常会遍布全球,源站的文件会被被缓存到世界各地,这样全球用户都可以实现快速访问。
它有点像分布于各地的仓储物流点,很多品牌会预先在仓储物流点储备一些爆款商品(静态文件使用CDN进行缓存),当用户从电商平台下单购买货物的时候(用户发起请求),平台根据用户的收获地址就近匹配到最近的仓储物流点并直接进行派货(就近分发),让用户以最快的速度拿到快递包裹(分发的内容)。我们可以用实际的生活经验来做个对比,如果从江浙沪包邮区寄给杭州的用户,一般第二天就能到,如果是从北京、深圳发货,一般需要2-3天!
这就是CDN的缘起。简单来说,它就是一个分布式的缓存服务器,主要作用就是尽可能减少资源在转发、传输、链路抖动等情况下的时延,保障信息的连贯与极速。当下,我们生活在互联网世界,视频和直播在数据上有巨大的吞吐量,CDN扮演着护航者和加速者的角色,更快速、稳定地将信息触达每一个用户。
二、CDN的工作原理
下面,我们来进一步了解下CDN的工作原理。首先,关于CDN的那些名词,需要扫个盲
Origin Server源站:做 CDN之前的客户真正的服务器。
User:访问者,也就是要访问网站的网民。
Last Mile:最后一公里,也就是网民到他所访问到的 CDN 服务器之间的路径。
域名:域名是Internet网络上的一个服务器或一个网络系统的名字,全世界,没有重复的域名。
CNAME记录:它是一个别名记录( Canonical Name );当 DNS 系统在查询 CNAME 左面的名称的时候,都会转向 CNAME 右面的名称再进行查询,一直追踪到最后的 PTR 或 A 名称,成功查询后才会做出回应,否则失败。
CNAME域名:CDN的域名加速需要用到CNAME记录,在阿里云控制台配置完成CDN加速后,您会得到一个加速后的域名,称之为CNAME域名(该域名一定是.http://kunlun.com), 用户需要将自己的域名作CNAME指向这个.http://kunlun.com的域名后,域名解析的工作就正式转向阿里云,该域名所有的请求都将转向阿里云CDN的节点。
DNS:DNS即Domain Name System,是域名解析服务的意思。它在互联网的作用是:把域名转换成为网络可以识别的ip地址。人们习惯记忆域名,但机器间互相只认IP地址,域名与IP地址之间是一一对应的,它们之间的转换工作称为域名解析,域名解析需要由专门的域名解析服务器来完成,整个过程是自动进行的。比如:上网时输入的http://www.baidu.com会自动转换成为220.181.112.143
边缘节点:也称CDN节点、Cache节点等;是相对于网络的复杂结构而提出的一个概念,指距离最终用户接入具有较少的中间环节的网络节点,对最终接入用户有较好的响应能力和连接速度。其作用是将访问量较大的网页内容和对象保存在服务器前端的专用cache设备上,以此来提高网站访问的速度和质量。
Cache:cache高速缓冲存储器一种特殊的存储器子系统,其中复制了频繁使用的数据以利于快速访问。存储器的高速缓冲存储器存储了频繁访问的RAM位置的内容及这些数据项的存储地址。当处理器引用存储器中的某地址时,高速缓冲存储器便检查是否存有该地址。如果存有该地址,则将数据返回处理器;如果没有保存该地址,则进行常规的存储器访问。因为高速缓冲存储器总是比主RAM存储器速度快,所以当RAM的访问速度低于微处理器的速度时,常使用高速缓冲存储器。、
接下来是CDN的工作原理,最简单的CDN网络由一个DNS服务器和几台缓存服务器组成,如下图所示:
①当用户点击网站页面上的内容URL,经过本地DNS系统解析,DNS系统会最终将域名的解析权交给CNAME指向的CDN专用DNS服务器。
②CDN的DNS服务器将CDN的全局负载均衡设备IP地址返回用户。
③用户向CDN的全局负载均衡设备发起内容URL访问请求。
④CDN全局负载均衡设备根据用户IP地址,以及用户请求的内容URL,选择一台用户所属区域的区域负载均衡设备,告诉用户向这台设备发起请求。
⑤区域负载均衡设备会为用户选择一台合适的缓存服务器提供服务,选择的依据包括:根据用户IP地址,判断哪一台服务器距用户最近;根据用户所请求的URL中携带的内容名称,判断哪一台服务器上有用户所需内容;查询各个服务器当前的负载情况,判断哪一台服务器尚有服务能力。基于以上这些条件的综合分析之后,区域负载均衡设备会向全局负载均衡设备返回一台缓存服务器的IP地址。
⑥全局负载均衡设备把服务器的IP地址返回给用户。
⑦用户向缓存服务器发起请求,缓存服务器响应用户请求,将用户所需内容传送到用户终端。如果这台缓存服务器上并没有用户想要的内容,而区域均衡设备依然将它分配给了用户,那么这台服务器就要向它的上一级缓存服务器请求内容,直至追溯到网站的源服务器将内容拉到本地。
三、CDN的关键技术组件
看似复杂庞大的CDN系统,其中有几个关键技术组件:调度、缓存和安全。
1、 调度是 CDN 中的重中之重,流量接入、流量牵引、选择合适的 CDN 节点服务器等工作,都是在调度环节完成的。具体调度的解释,可以参考《CDN 之我见》系列一:原理篇(由来、调度)
2、 缓存也叫 Cache,是 CDN 领域最重要的一个组成部分,对于静态内容分发,大至视频点播、文件下载,小至 html 页面、jpg/gif/png 图片、css/js 等,都可以缓存到本地,最终用户(网民)访问时,不必回到原始服务器拿取数据,从而节省了时间、降低了源站服务器的网络带宽支出和负载。对于 CDN 来说,每台 Cache 机器每天的请求量是十分惊人的,磁盘上所存储的内容量也多得可怕,十几块 TB 级的硬盘被塞满数据也是很正常的事情,因此当一个请求到来时,能迅速检索出磁盘上的文件并读取、吐给最终用户成了一件很重要的事情。具体的缓存,可以参考《CDN 之我见》系列二:原理篇(缓存、安全)
3、 针对各类网络攻击,比如带宽饱和攻击、反射攻击等蛮力型攻击,还有XSS跨站、SQL注入、漏洞利用等技巧型攻击,CDN可以从隐藏源站、分布式架构、安全防护三个层面进行安全防护。首先,当网站接入CDN后,源站信息会被隔离,攻击者就无法直接对源站进行直接攻击,其次,CDN天然分布式架构可以当某些节点被攻击的时候,很快察觉异常并智能调度至正常节点,确保业务稳定,再次,对于技巧性攻击,在CDN边缘节点前置安全防护能力,与中心联动形成更完整、更贴近边缘的防护策略,有利于安全隐患的拦截。
四、CDN可以应用在哪些场景?
1、网站与应用加速
网站或者应用中大量静态资源的加速分发,如各类型图片、html、css、js文件等,可以通过CDN缓存到边缘节点上,当用户访问即可就近获取。网站内容也存在相当一部分动态内容,比如电子商务、游戏和企业应用类网站,会存在很多如.aspx、.asp、.jsp、.php等为后缀的动态请求加速。通常缓存对静态内容支持得较好,而当面临动态内容请求的时候,一般会回源,源站再将内容传节点,进而传给用户,传输链路步骤增多,这势必会影响传输质量与效率。所以针对动态内容,CDN也提出了新的加速方法,就是利用智能选路、传输协议优化等算法寻找最快的传输路径,自动躲避拥堵和不稳定线路,以此来提升回源效率,实现动、静混合网站的加速效果保障。
2、视频、大文件下载分发加速
CDN可以针对各类文件、在线点播视频提供下载、分发加速,比如mp4、flv视频文件或者单个文件大小在20M以上的安装包等文件,CDN可以搭配对象存储OSS使用,提升回源速度,节约近2/3回源带宽成本。
3、直播加速
在体育或者游戏赛事直播中,通常成千上万的用户瞬间涌入,直播平台要承担高并发访问,一旦带宽不足,用户的观看就会产生卡顿、延时、评论刷不出来、连麦不成功,甚至最后直播直接瘫痪,用户无法观看。CDN结合弹性伸缩服务,及时调整服务器带宽,应对突发访问流量。可以为直播分发提供流畅的播放下行链路,借助负载均衡系统将将主播端采集的音视频数据推送到接近用户的数千个边缘节点,当观众端发起请求,就可以就近取得资源,减少网络抖动风险,增加直播链路稳定性和流畅性。
4、移动应用加速
CDN可以为移动APP更新文件(apk文件)分发,移动APP内图片、页面、短视频、UGC等内容的优化提供加速分发效果。提供httpDNS服务,避免DNS劫持并获得实时精确的DNS解析结果,有效缩短用户访问时间,提升用户体验。