程序员要搞明白CDN,这篇应该够了( 二 )


那么有没有成本比较低的方式呢,有,就是在每个服务器上只部署静态资源,静态资源通常不涉及到数据库,所以成本也比较低,而且也能提高用户的访问速度 。
 
到这里,介绍了CDN想要达到的目的,那么怎么达到这个目的呢?
 
现在如果要比较CDN系统,我们可以考虑两点:

  1. CDN系统中存储静态资源服务器的性能以及网速怎么样 。
  2. CDN系统中全国甚至全球范围内服务器节点的数量以及部署情况 。
 
第一点很好理解,第二点大家应该也能理解了,如果静态资源的服务器节点很多,能够让每个用户在访问这些静态资源时都不用“跑很远的路程”才能获取到,那么自然这是CDN系统的优点 。
 
有公司看到了这种需求,所以现在其实有很多CDN供应商,比如阿里,腾讯等等都有自己的CDN服务 。只要你自己的系统接入了这些大厂所提供的CDN服务,你把自己的静态资源传给CDN服务,那么这些静态资源将自动的分布到全世界各地去 。
 
好,那么现在的问题是,用户在访问静态资源时也是通过域名来访问的,域名会被解析成某一个IP地址,关键的问题就是,DNS系统怎么在做域名解析时,解析出来一个离用户最近的一个IP地址呢 。
 
普通的DNS系统是做不到的,需要一个特殊的DNS服务器,这个特殊DNS需要知道
  1. 用户当前所在位置
  2. 还需要知道用户现在访问的这个域名对应哪些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,这篇应该够了

文章插图
 
 
补充:在对域名解析时有多种类型的记录,最常用的比如:
  • A记录:一个域名对应一个IP地址
  • CNAME:一个域名对应另外一个域名
  • NS:将子域名指定其他DNS服务器解析
 
程序员要搞明白CDN,这篇应该够了

文章插图
 
 
总结通过上面的文章我们可以发现,CDN的实现原理依赖于DNS,因为本人不是专门搞网络的,所以文中如果有不准确的地方,还请各位大佬指出 。创作不易,还请多多转发




推荐阅读