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服务器解析