CDN发展背景
CDN的全称是Content Delivery Network,内容分发网络。CDN是构建在网络之上的内容分发网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率。
CDN的作用:解决由于网络带宽小、用户访问量大、网点分布不均等原因造成用户访问网站响应速度慢的问题。
AKaMai是最早的CDN的服务商,蓝汛是中国最早的CDN的服务商,同期的还有网宿,现在的CDN的服务商主要有阿里、腾讯、百度。
CDN的核心技术
全局调度
调度系统解决的是从用户接入开始到用户访问CDN节点之间的业务逻辑处理。
主要调度有:DNS调度、302调度、httpdns调度。
DNS调度:
缺点:容易被劫持。
准确性差,通过识别local dns出口ip来智能调度。
灵活性差,不能使用太多节点覆盖,调度粒度粗。
302调度:
缺点:增加了20-40ms的首包时间,不适合大文件的传输。
依赖客户端的版本,低版本的chrome不允许range请求返回302。
Httpdns调度:
HttpDNS优势:
从原理上来讲,HttpDNS只是将域名解析的协议由DNS协议换成了Http协议,并不复杂。但是这一微小的转换,却带来了无数的收益:
A、根治域名解析异常:由于绕过了运营商的LocalDNS,用户解析域名的请求通过Http协议直接透传到了CDN厂商的HttpDNS服务器IP上,用户在客户端的域名解析请求将不会遭受到域名解析异常的困扰。
B、调度精准:HttpDNS能直接获取到用户IP,通过结合CDN厂商自有专利技术生成的IP地址库以及测速系统,可以保证将用户引导的访问最快的CDN节点上。
302调度和httpdns调度的区别:
HTTP-DNS协议只是将域名解析的协议由DNS协议换成了HTTP协议,后端配置和调度系统实际上还是基于DNS服务器(BIND之类)。
而302跳转调度的方式,不属于走域名解析的方式,后端配置和调度系统一般是基于GLSB(例如Nginx+Lua)方式。
负载均衡
全局负载均衡(GSLB):主要根据用户就近原则,通过对每个CDN节点进行“最优”判断,确定向用户提供服务的CDN节点的物理位置。
本地负载均衡(SLB):主要负责节点内部的设备负载均衡。
CDN的各层节点:
上层节点:负责缓存回源拉取的内容。
负责回用户源站,与源站相关的业务均在上层。
内容分发和作为中层未命中时的服务点。
中层节点:负责缓存从上游拉取的内容。
分担上层压力。
内容分发和作为下层未命中的服务点。
下层节点:负责缓存从上游拉取的内容。
分担上层压力。
负责处理用户的业务。
CDN的单个节点:
Ngx:业务层
1、7层负载,使用url一致性哈希,支持热点打散。
2、业务接入和客户需求处理。
3、部分内容管理,如一键屏蔽、部分刷新。
Cache:存储和回源
1、存储:存储规则、存储时间、特殊状态码缓存。
2、回源:回源协议、地址(择优|轮询)回源Host。
回源的收敛形式的作用:1、减少回源次数。2、边缘节点存满后,可能会根据LRU刷新cache时,可以在上层节点找到以前的缓存。
CDN提供的服务:网页加速、流媒体加速、文件传输加速和应用协议加速。
网页加速是最早出现的CDN服务类型,网页的内容主要以文字、图片、动画等形式为主,支持文本方式的电子邮件交换,因此CDN技术最初的应用重点就是用来对这些网页的静态内容进行加速。
流媒体加速通过将流媒体内容推送到离用户最近的边缘节点,使得用户能够从网络边缘获取内容,从而提高视频传输质量,缩短访问时间,节省上层网络流量,避免单一中心的服务器瓶颈问题。流媒体加速服务分为两类:流媒体直播加速和流媒体点播加速。
文件传输加速通过使用CDN的分布式边缘节点提供下载服务,网站可以将大量文件下载的性能压力和带宽压力交给CDN来分担,提高用户的下载速度。
应用协议加速通过对TCP/IP等传输协议的优化,改善和加快用户在广域网上的内容传输速度,或者对一些特定协议,如SSL协议进行加速,解决安全传输时的性能和响应速度问题。