本文主要介绍一下CDN调度,主要是DNS调度。介绍之前,咱们先聊聊CDN为啥要调度呢
CDN为啥要调度呢?
还记之前仓库例子么,零售店怎么知道离自己最近的仓库呢,肯定有一张地图对吧,找到在地图中找到自己位置,然后找到对应离自己最近仓库。对于CDN一样的,调度就是为了找到离用户最近的CDN节点,提供最优质的加速效果。
下面我们讲讲CDN是如何调度的?在正式介绍之前,咱们先了解几个知识点:
- 什么是调度?这是一个动作,如何分配或者获取资源,这里要想清楚,什么资源?谁分配资源?谁获取资源?在CDN网络里,资源就是CDN服务节点,DNS来分配这些资源供用户请求使用,加快网络资源响应时间。
- 了解DNS类型以及解析过程。常见类型有递归DNS和权威DNS;解析过程主要分为递归和迭代。递归指的是客户端向LDNS请求,请求一次就可以获取域名A记录;迭代指的是LDNS向各级权威域名DNS请求,需要多次查询才能获取域名A记录。
- CDN和DNS这两个东东是怎么关联起来?通过修改加速域名CNAME记录,将两者关联起来。这样用户访问加速域名会走CDN节点,还不是源站。
不少同学可能会问,通过httpdns也可以获取CDN节点ip地址。是的,关于httpdns和劫持后续单独介绍,这篇文章主要介绍传统DNS调度,针对传统DNS和EDNS介绍。
传统DNS调度原理
在LDNS没有缓存A记录或者TTL时间过期,需要重新递归拉取。同时CDN接入节点没有缓存1.txt这个文件,需要回源拉取。下面这张图是DNS解析和CDN访问全部流程。全部过程包括LDNS从权威或者更上面根域去层层递归获取A记录,本图简化为从域名服务器开始递归;资源访问CDN节点没有命中,需要回源拉取。
其实上面是最坏情况,一般CDN访问流程,应该是从LDNS直接获取A,从CDN接入点直接获取资源,这样提高加速效果。流程如下:
上面了解到DNS解析以及CDN访问原理,接下来我们分别针对不同LDNS类型,看看CDN服务厂家如何提供CDN节点IP。
1.传统DNS
例如广东电信LDNS地址 61.144.56.100,当LDNS递归向CDN服务厂家DNS请求A记录时,例如上图 tencent DNS会根据61.144.56.100这个ip归属来返回对应地区节点IP地址。
传统DNS会有一个缺点就是:如果用户端写死了DNS,如果位置地址发现大的偏移,会影响访问质量。例如一个北京用户,PC机配置北京DNS;当该用户到上海出差,由于DNS设置为北京DNS,这时通过DNS解析得到最佳的CDN节点是北京地域,这样从上海访问北京节点,由于出现跨地域情况,会影响访问速度。
2.EDNS
EDNS例如119.29.29.29.当LDNS递归向CDN服务厂家DNS请求A记录时,会带上用户出口IP(101.20.1.3)地址,例如上图tencent DNS会根据用户出口IP地址归属,返回对应CDN接入点IP地址