当前位置: 首页 > 科技观察

程序员如果想了解CDN,这篇文章应该足够了

时间:2023-03-21 21:44:02 科技观察

最近在学习边缘计算,发现我们经常听到的CDN也是边缘计算的一部分。所以说到CDN,似乎只知道中文叫做内容分发网络。那么CDN的具体原理是什么?能给用户浏览网站带来什么好处?解决这两个问题是本文的目的。CDN概念CDN的全称是“ContentDeliveryNetwork”,中文叫做ContentDeliveryNetwork。事实上,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等所以如果百度要将服务器部署在全国各地,如果每台服务器的动态资源都一样,那么可能还需要配置相应的数据库,因为动态资源记录的信息通常都保存在数据库中,那么这就是数据同步等涉及到的问题,会导致高昂的成本。这种专业的做法其实就是一个集群。目前,集群结构最多为三地五中心。并不是说全国多地做集群不行,主要是成本太高了。想了解更多三地五中心可以看https://mp.weixin.qq.com/s/uGyGldbwmShDDPDau5pAPw这篇文章也是我写的。那么有没有成本更低的方法呢?对,就是在每台服务器上只部署静态资源。静态资源通常不涉及数据库,所以成本比较低,也可以提高用户的访问速度。至此,我们介绍了CDN要实现的目标,那么如何实现这个目标呢?现在如果要比较CDN系统,我们可以考虑两点:CDN系统中存储静态资源的服务器的性能和网络速度。全国乃至全球CDN系统服务器节点数量及部署情况。第一点很好理解,第二点大家应该都明白。如果静态资源的服务器节点很多,每个用户都可以访问这些静态资源,而不用“长途跋涉”去获取。那么自然而然,这就是CDN系统的优势所在。一些公司看到了这种需求,所以现在其实有很多CDN提供商,比如阿里巴巴、腾讯等,都有自己的CDN服务。只要你自己的系统接入了这些大厂提供的CDN服务,你把你的静态资源传递给CDN服务,那么这些静态资源就会自动分发到全世界。那么现在的问题是,用户在访问静态资源的时候,也是通过域名访问的,而域名会被解析成某个IP地址。最近的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”时会先将“image.baidu.com”解析为“cdn.ali.com”。普通DNS服务器发现该域名对应一个DNS服务器,就会将域名解析工作转交给DNS服务器,也就是CDN专用DNS服务器。CDN专用DNS服务器解析“cdn.ali.com”,然后根据服务器上记录的所有CDN服务器地址信息,选择一个离用户最近的CDN服务器地址,返回给用户,用户就可以访问了最近的CDN服务器。补充:解析域名的记录有很多种,最常用的有:A记录:一个域名对应一个IP地址CNAME:一个域名对应另一个域名NS:分配子域名给其他DNS服务器在文章中我们可以看到,CDN的实现原理是依赖于DNS的,因为本人不是网络专业的,所以如果文章中有不准确的地方,请指出。