CDN 全称叫做“Content Delivery Network”,中文叫内容散发网络。
实际上 CDN 这个概念是在 1996 年由美国麻省理工学院的一个钻研小组为改善互联网的服务质量而提出的。那么它到底是怎么改善互联网服务质量的呢?
原理剖析
咱们晓得,当咱们应用域名拜访某一个网站时,实际上就是将申请包(以 Http 申请为例)通过网络传输给某台服务器,比方拜访“www.baidu.com”时:
首先解析出该域名所对应的 IP 地址 (DNS 域名解析)
而后将 Http 申请包通过网络路由到 IP 地址所对应的服务器
咱们通常说“服务器的 IP 地址”,这其实不太精确,IP 地址是和网卡绑定的,一个服务器能够有多个网卡,也就是可能有多个 IP 地址。
咱们先来看第一步:域名解析
域名解析
解析域名分为两种:
将一个域名解析为一个 IP 地址
将一个域名解析为另外一个域名
其实解析思路不难,咱们在域名服务商购买了一个域名之后,须要去映射一个 IP 地址,能够用 Map 来示意这个关系:{域名:IP}。
同时咱们也能够给某个域名取一个别名,比方“www.baidu.com”取一个别名“test.baidu.com”,这种关系也能够用 Map 来示意:{域名:别名}。这里的别名业余一点叫做 CNAME,置信大家对这个词有点眼生,它就是这个意思。
而域名解析,实际上就是解析出指定域名所对应的 IP 地址,或者该域名的一个 CNAME。
而域名解析是由 DNS 零碎来负责的,DNS 服务承受内部申请,从申请里提取域名,
如果这个域名对应的是 IP 地址,则返回这个 IP 地址,
如果这个域名对应的是 CNAME,则持续查找 CNAME 域名的 IP 地址,而后将该地址返回给申请发送者。
申请发送者拿到 IP 地址之后,实现真正的申请调用。
实际上 DNS 零碎是十分宏大的,这里不去多将,大家把它当作一个黑盒子,这个盒子的作用就是上文所形容的,这里用一个简略的图来示意一下。
没有 CNAME 的状况:
有 CNAME 的状况:
特地留神:在有 CNAME 的状况下,咱们能够发现,CNAME 实际上在域名解析的过程中承当了中间人(或者说代理)的角色,这是 CDN 实现的要害。
CDN 原理
首先 CDN 是为了改善互联网的服务质量的。艰深一点说其实就是进步访问速度。
假如百度网站当初只有一台服务器,当初有一个人在上海拜访百度,如果该服务器也在上海,那么通常来说拜访比拟快,如果该服务器在拉萨,那么相对而言拜访就比较慢了。那么这个问题的根本原因是网络传输是依赖于网线的,网线越长,那么工夫必定就越久。
那么怎么解决这个问题呢?其实思路很简略,百度在全国各地都部署截然不同的服务器就行了,业余一点叫冗余。
思路很简略,但实现还是比拟麻烦的,服务器上的资源分为两种:动态资源与动静资源。
动态资源:这种资源通常是很少变动的,比方图片,视频,css,javascript 等等
动静资源:这种资源不同用户不同时刻拜访通常是不一样的,比方 ftl,jsp 等等。
那么如果百度要在全国各地都部署服务器,如果说每个服务器上都有雷同的动静资源,那么可能还须要配置相应的数据库,因为动静资源所记录的信息通常会存储在数据库中,那么这就波及到了数据同步等等问题,这会导致老本很高,这种做法业余一点其实就是集群,而目前来说集群架构最多是三地五核心,不是说全国多地集群不可能,次要是老本太高。
比拟低的形式呢,有,就是在每个服务器上只部署动态资源,动态资源通常不波及到数据库,所以老本也比拟低,而且也能进步用户的访问速度。
到这里,介绍了 CDN 想要达到的目标,那么怎么达到这个目标呢?
当初如果要比拟 CDN 零碎,咱们能够思考两点:
CDN 零碎中存储动态资源服务器的性能以及网速怎么样。
CDN 零碎中全国甚至寰球范畴内服务器节点的数量以及部署状况。
第一点很好了解,第二点大家应该也能了解了,如果动态资源的服务器节点很多,可能让每个用户在拜访这些动态资源时都不必“跑很远的途程”能力获取到,那么天然这是 CDN 零碎的长处。
有公司看到了这种需要,所以当初其实有很多 CDN 供应商,比方阿里,腾讯等等都有本人的 CDN 服务。只有你本人的零碎接入了这些大厂所提供的 CDN 服务,你把本人的动态资源传给 CDN 服务,那么这些动态资源将主动的散布到全世界各地去。
好,那么当初的问题是,用户在拜访动态资源时也是通过域名来拜访的,域名会被解析成某一个 IP 地址,要害的问题就是,DNS 零碎怎么在做域名解析时,解析进去一个离用户最近的一个 IP 地址呢。
一般的 DNS 零碎是做不到的,须要一个非凡的 DNS 服务器,这个非凡 DNS 须要晓得
用户以后所在位置
还须要晓得用户当初拜访的这个域名对应哪些 IP 地址,以及这个 IP 地址别离在哪?
对于第一个问题好解决,间接从用户申请里提取出用户的 ip 地址,比方这个 ip 地址被解析为北京电信、上海挪动等等。
第二个问题由谁来解决,咱们当初思考的是 CDN,CDN 提供商必定晓得他们公司在哪些地方部署了机器以及它们的 IP 地址,所以这个问题只能有 CDN 提供商来解决,CDN 提供商会提供这个非凡的 DNS 服务器,咱们叫做 CDN 专用 DNS 服务器。
这样的话,只有用户在应用某个域名拜访动态资源时,如果用户间接配置本人电脑的 DNS 地址为 CDN 专用 DNS 服务器。那么天然解决了问题,然而咱们须要思考的时,咱们不能要求世界上所有的用户都去批改本人电脑的 DNS 地址。所以这个时候就要利用 DNS 中的 CNAME 了。
用户应用某个域名来拜访动态资源时(这个域名在阿里 CDN 服务中叫做“减速域名”),比方这个域名为“image.baidu.com”,它对应一个 CNAME,叫做“cdn.ali.com”,那么一般 DNS 服务器(区别 CDN 专用 DNS 服务器)在解析“image.baidu.com”时,会先解析成“cdn.ali.com”,一般 DNS 服务器发现该域名对应的也是一个 DNS 服务器,那么会将域名解析工作转交给该 DNS 服务器,该 DNS 服务器就是 CDN 专用 DNS 服务器。CDN 专用 DNS 服务器对“cdn.ali.com”进行解析,而后根据服务器上记录的所有 CDN 服务器地址信息,选出一个离用户最近的一个 CDN 服务器地址,并返回给用户,用户即可拜访离本人最近的一台 CDN 服务器了。
补充:
在对域名解析时有多种类型的记录,最罕用的比方:
A 记录:一个域名对应一个 IP 地址
CNAME:一个域名对应另外一个域名
NS:将子域名指定其余 DNS 服务器解析