最近在理解边缘打算,创造我们常常听说的CDN也是边缘打算里的一部分。那么说到CDN,彷佛只知道它中文叫做内容分发网络。那么详细CDN的事理是什么?能够为用户在浏览网站时带来什么好处呢?办理这两个问题是本文的目的。
CDN观点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做事器了。
总结通过上面的文章我们可以创造,CDN的实现事理依赖于DNS,由于本人不是专门搞网络的,以是文中如果有不准确的地方,还请各位大佬指出。
重点
有痛点才有创新,一个技能肯定都是为理解决某个痛点才涌现的。