您现在的位置是:首页 >其他 >【计算机网络】图解内容分发网络 CDN网站首页其他
【计算机网络】图解内容分发网络 CDN
【计算机网络】图解内容分发网络 CDN
参考资料:
文章目录
一、CDN 概述
1.1、什么是 CDN
CDN
全称 Content Delivery Network
,即内容分发网络。其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳定
CDN 的
工作原理
就是将源站的资源缓存CDN各个节点上,当请求命中了某个节点的资源缓存时,立即返回客户端,避免每个请求的资源都通过源站获取,避免网络拥塞、缓解源站压力,保证用户访问资源的速度和体验。
内容分发网络
解决了因分布、带宽、服务器性能带来的访问延迟问题,适用于站点加速、点播、直播等场景。使用户可就近取得所需内容,解决 Internet网络拥挤的状况,提高用户访问网站的响应速度和成功率。
1.2、为什么需要 CDN
CDN并非网络基础设施,而是构建在实体网络基础设施的一个"应用层",来看看为什么需要它。
1.2.1、互联网中的三个一公里
这幅图展示了互联网通信领域中常说的"三公里":
- 第一公里
网站服务器接入互联网公网的链路,这里的带宽也决定了网站的负载能力,也称为网站的接入带宽。 - 中间一公里
中间一公里主要是接入网、城域网、骨干网组成的链路实体,其中会涉及多家运营商,也就出现了运营商之间互联互通的数据交换问题。 - 最后一公里
这是用户接入互联网获取信息的最后环节,换句话说就是你们小区的网络、你们家楼的网,往往这部分的带宽不高,影响也比较明显。
1.2.2、运营商的互联互通问题
运营商之间数据的互联互通问题,比如A市联通要访问A市电信的数据资源,按照互联互通的规则限制,不同运营商的数据要在指定的交换中心进行数据交换,假如交换中心位于较远的B市,那么就存在如下图的关系:
换句话说,本来两个运营商是同一个城市的,但由于运营商的网络差异需要到几百公里之外的交换中心所在的城市进行数据交换,实现资源的访问。
对于不同运营商间的互联互通,一般是采用BGP peering(对等)的方式进行。两家运营商相互协商,在特定地点建立连接,通过一系列的配置,运营商A的用户就能访问运营商B的资源了。
在中国,运营商之间通过“国家级互联网骨干直联点”进行连接,2001到2014年,国内只有北上广三个直联点,导致跨网访问体验极差,流量无法本地中转需要长途迂回,大大增加了延迟。
1.2.3、难兄难弟
试想北美的海外用户要访问在服务器在深圳的资源,物理距离就有几万公里,算上三个一公里的消耗,恐怕用户的体验会非常糟糕。
同样的,网站服务器的接入带宽是有限的,对于海量用户的接入访问非常容易出现拥塞,这样很容易把网站服务器压垮。
同时,对于运营商来说也很糟糕,骨干网充斥着大量相同的请求,网络基建压力很大,如果把这些请求在本地处理掉该多好!
可见,如果没有CDN这一层Cache应用,网站、用户、运营商都会很崩溃。
二、CDN 工作原理
2.1、接入CDN
在接入CDN
前,当我们访问某个域名,直接拿到第一个真实服务器的IP地址,整个流程如下:
当我们需要加速网站时,通过向运营商注册自己加速域名,源站域名,然后进入到自己域名的DNS配置信息,将 A
记录修改成 CNAME
记录即可。阿里云加速申请参考如下:
2.1.1、两个重要的概念
比如为源站abc.com到阿里云进行域名加速,配置完成后阿里云会自动关联生成加速域名的别名如abc.com.aliyuncdn.net,这个别名也称为CNAME。
这里我们提两个重要的概念:CNAME和A记录,它们是理解CDN的基础概念。
CNAME记录,也叫别名记录,比如www.xx.com的别名是www.yy.com,CNAME记录是一种指向关系,把www.yy.com指向了www.xx.com,一个域名可以有多个别名,存在多对一的关系。
A记录,即Address记录,我们可以把它理解为一种域名和IP地址的映射关系。
由于加速域名已经进行了CDN的CNAME配置,在权威DNS服务器的解析下得到的并不是IP地址,而是CNAME。
2.1.2、怎么知道哪个服务器IP里调用方最近?
可以看到"最近"这个词其实是加了双引号的。
CDN专用的DNS域名服务器其实是CDN提供商提供的,比如阿里云当然知道自己的的CDN节点有哪些,以及这些CDN服务器目前的负载情况和响应延时甚至权重啥的,并且也能知道调用方的IP地址是什么,可以通过调用方的IP知道它所属的运营商以及大概所在地,根据条件筛选出最合适的CDN服务器,这就是所谓的"最近"。
举个例子。假设地理位置最近的CDN机房流量较多,响应较慢,但地理位置远一些的服务器却能更好的响应当前请求,那按理说可能会选择地理位置远一些的那台CDN服务器。
也就是说,选出来的服务器不一定在地理位置最近,但一定是当前最合适的服务器。
2.2、CDN访问过程
2.2.1、传统模式下DNS的调度过程
- 客户端首先会发出一个 DNS 请求,问 www.server.com 的 IP 是啥,并发给本地 DNS 服务器(也就是客户端的 TCP/IP 设置中填写的 DNS 服务器地址)。
- 本地域名服务器收到客户端的请求后,如果缓存里的表格能找到 www.server.com,则它直接返回 IP 地址。如果没有,本地 DNS 会去问它的根域名服务器:“老大, 能告诉我 www.server.com 的 IP 地址吗?” 根域名服务器是最高层次的,它不直接用于域名解析,但能指明一条道路。
- 根 DNS 收到来自本地 DNS 的请求后,发现后置是 .com,说:“www.server.com 这个域名归 .com 区域管理”,我给你 .com 顶级域名服务器地址给你,你去问问它吧。”
- 本地 DNS 收到顶级域名服务器的地址后,发起请求问“老二, 你能告诉我 www.server.com 的 IP 地址吗?”
- 顶级域名服务器说:“我给你负责 www.server.com 区域的权威 DNS 服务器的地址,你去问它应该能问到”。
- 本地 DNS 于是转向问权威 DNS 服务器:“老三,www.server.com对应的IP是啥呀?” server.com 的权威 DNS 服务器,它是域名解析结果的原出处。为啥叫权威呢?就是我的域名我做主。
- 权威 DNS 服务器查询后将对应的 IP 地址 X.X.X.X 告诉本地 DNS。
- 本地 DNS 再将 IP 地址返回客户端,客户端和目标建立连接。
2.2.2、有CDN参与的DNS调度过程
当我们在浏览器输入这个URL就会发起HTTP GET请求,然后经历以下过程。
1、用户访问图片内容,先经过 本地DNS
解析,如果 LDNS 命中,直接返回给用户。
2、LDNS
MISS,转发 授权DNS
查询
3、返回域名 CNAME
picwebws.pstatp.com.wsglb0.com. 对应IP地址(实际就是DNS调度系统的ip地址)
4、域名解析请求发送至DNS调度系统
,DNS调度系统为请求分配最佳节点IP地址。
5、返回的解析IP地址
6、用户向缓存服务器
发起请求,缓存服务器响应用户请求,将用户所需内容传送到用户终端。
三、CDN 的回源
3.1、CDN的资源可以直接访问吗?
我们平时看到的图片,可以右键复制查看它的URL。
会发现图片的URL长这样。
https://cdn.xiaobaidebug.top/1667106197000.png
其中前面的cdn.xiaobaidebug.top
就是CDN
的域名,后面的1667106197000.png
是图片的路径名。
也就是说这张图片是访问CDN拿到的。
那么,直接访问对象存储能不能拿到图片数据并展示?
比如像下面这样。
https://oss域名/图片地址.png
当然能。但这样成本更高,这里的成本,可以指性能成本,也可以指调用成本。看下下面这个图。
3.2、回源是什么?
上面的截图里,红框里有个词叫"回源"。
当我们访问https://cdn域名/图片地址.png
时,请求会打到cdn服务器上面。但cdn服务器本质上就是一层缓存,并不是数据源,对象存储才是数据源。
第一次访问cdn获取某张图片时,大概率在cdn里并没有这张图片的数据,因此需要回到数据源那去取出这份图片数据。然后再放到cdn上。下次再次访问cdn时,只要缓存不过期,就能命中缓存直接返回,这就不需要再回源。
于是访问的过程就变成了下面这样。
那还有哪些情况会发生回源呢?
除了上面提到的cdn上拿不到数据会回源站外,还有cdn上的缓存过期失效了也会导致回源站。另外,就算有缓存,且缓存不过期,也可以通过cdn提供的开放接口来触发主动回源,但这个我们比较少机会能接触到。
另外,回源这个事情,其实用户是感知不到的,因为用户去读图片的时候,只能知道自己读到了还是读不到。
同样是读到了,还细分为是从cdn那直接读的,还是cdn回源读对象存储之后返回的。
3.3、怎么判断是否发生回源
假设我要请求下面这张图https://cdn.xiaobaidebug.top/image/image-20220404094549469.png
为了更方便的查看响应数据的http header
,我们可以用上postman
。
此时查看response header
下的X-Cache
的值是 MISS TCP_MISS
。意思是未命中缓存导致CDN回源查oss,拿到数据后再返回。
那此时CDN里肯定是有这张图片的缓存了。我们可以试着再执行一次 GET 方法获取图片。
X-Cache
的值就变成了 HIT TCP_MEM_HIT
,这就是命中缓存了。
这个是某里云的做法,其他比如腾某云啥的,也都大差不差,几乎都可以从response header
里找到相关的信息。
四、CDN的组成
4.1、全局负载均衡系统 GLB
- 当用户访问加入CDN服务的网站时,域名解析请求将最终由 “智能调度DNS”负责处理。
- 它通过一组预先定义好的策略,将当时
最接近用户
的节点地址提供给用户,使用户可以得到快速的服务。 - 同时它需要与分布在各地的CDN节点保持通信,跟踪各节点的健康状态、容量等信息,确保将用户的请求分配到就近可用的节点上。
4.2、缓存服务器
缓存服务器主要的功能就是缓存热点数据,数据类型包括:静态资源
(html,js,css等),多媒体资源
(img,mp3,mp4等),以及动态数据(边缘渲染
)等。
众所周知耳熟能详的与 CDN 有关的开源软件有:
- Squid
- Varnish
- Nginx
- OpenResty
- ATS
- HAProxy
4.3、源站
源站指发布内容的原始站点。添加、删除和更改网站的文件,都是在源站上进行的;另外缓存服务器所抓取的对象也全部来自于源站。
4.4、CDN的分层架构
五、CDN 总结
1、资源访问加速
: 本地Cache加速,提高了企业站点(尤其含有大量图片和静态页面站点)的访问速度,并大大提高以上性质站点的稳定性
2、消除运营商间网络互联的瓶颈问题
: 镜像服务消除了不同运营商之间互联的瓶颈造成的影响,实现了跨运营商的网络加速,保证不同网络中的用户都能得到良好的访问质量。
3、远程加速
: 远程访问用户根据DNS负载均衡技术 智能自动选择Cache服务器,选择最快的Cache服务器,加快远程访问的速度
4、带宽优化
: 自动生成服务器的远程Mirror(镜像)cache服务器,远程用户访问时从cache服务器上读取数据,减少远程访问的带宽、分担网络流量、减轻原站点WEB服务器负载等功能。
5、集群抗攻击
: 广泛分布的CDN节点加上节点之间的智能冗余机制,可以有效地预防黑客入侵以及降低各种D.D.o.S攻击对网站的影响,同时保证较好的服务质量 。