本文转载自 https://mp.weixin.qq.com/s/ra6qnCK4BRaJp–3_NgLtA
这个博主写的文章都很通俗易懂
之前在用github做图床时由于在国内github的访问速度很慢,所以用了jsdeliver CDN 来加速图片的访问(https://blog.csdn.net/weixin_44226752/article/details/119355964), 使用也很简单,只需要把域名地址替换一下就行。
GitHub 离国内就近的服务器是在新加坡,距离我这有 2600 公里,也就是说,访问 GitHub 上的一张图片,一个数据包就要走 2600 公里这么远!
而且,互联网从逻辑上看是一张大网,但实际上是由许多小网络组成的,每个网络络中还存在许多的路由器、网关,数据每经过一个节点,都要处理一下,在二层、三层解析转发,这也会消耗一定的时间,带来延迟。
把这些因素再放到全球来看,地理距离、运营商网络、路由转发的影响就会成倍增加,也就是访问 GitHub 慢的一个原因。
那我是怎么知道 GitHub 服务器在哪的呢?
很简单,ping www.github.com 后,就会显示出服务器的 ip 地址,然后把 ip 地址用百度搜索,就能查到该服务器是在哪里的了。
图片资源是静态资源,所以要解决访问慢的问题,就可以用 CDN 加速。
在我加上 jsdelivr CDN 后,GitHub 的图片就会被缓存到 CDN 服务器上,而深圳正好就有一台 jsdelivr 的 CDN 服务器。
这样我访问 GitHub 图片不用再大老远跑去新加波的服务器,而是遵循就近访问原则,直接访问离深圳的这台 CDN 服务器,大大加快了访问速度。
这次,我们就来好好聊一聊 CDN。
CDN的全称是Content Delivery Network ,中文名叫内容分发网络。它是解决由于长距离而网络访问速度慢的问题。
简单来说,CDN 将内容资源分发到位于多个地理位置机房中的服务器上,这样我们在访问内容资源的时候,不用访问源服务器。
而是直接访问离我们最近的 CDN 节点 ,这样一来就省去了长途跋涉的时间成本,从而实现了网络加速。
CDN 加速的是内容资源是静态资源。
所谓的「静态资源」是指数据内容静态不变,任何时候来访问都是一样的,比如图片、音频。
与之相反的「动态资源」,是指数据内容是动态变化的,每次访问都不一样,比如用户信息等。
不过,动态资源如果也想被缓存加速,就要使用动态 CDN,其中一种方式就是将数据的逻辑计算放在 CDN 节点来做,这种方式就被称为边缘计算。
CDN 加速策略有两种方式,分别是**「推模式」和「拉模式」**。
大部分 CDN 加速策略采用的是「拉模式」,当用户就近访问的 CDN 节点没有缓存请求的数据时,CDN 会主动从源服务器下载数据,并更新到这个 CDN 节点的缓存中。
可以看出,拉模式属于被动缓存的方式,与之相反的 「推模式」就属于主动缓存的方式。
如果想要把资源在还没有用户访问前缓存到 CDN 节点,则可以采用「推模式」,这种方式也叫 CDN 预热。
通过 CDN 服务提供的 API 接口,把需要预热的资源地址和需要预热的区域等信息提交上去,CDN 收到后,就会触发这些区域的 CDN 节点进行回源来实现资源预热。
找到离用户最近的 CDN 节点是由 CDN 的**全局负载均衡器(Global Sever Load Balance,GSLB)**负责的。
那 GSLB 是在什么时候起作用的呢?在回答这个问题前,我们先来看看在没有 CDN 的情况下,访问域名时发生的事情。
在没有 CDN 的情况下,当我们访问域名时,DNS 服务器最终会返回源服务器的地址。
比如,当我们在浏览器输入 www.xiaolin.com 域名后,在本地 host 文件找不到域名时,客户端就会访问本地 DNS 服务器。
这时候:
但加入 CDN 后就不一样了。
会在 xiaolin.com 这个 DNS 服务器上,设置一个 CNAME 别名,指向另外一个域名 www.xiaolin.cdn.com,返回给本地 DNS 服务器。
接着继续解析该域名,这个时候访问的就是 xiaolin.cdn.com 这台 CDN 专用的 DNS 服务器,在这个服务器上,又会设置一个 CNAME,指向另外一个域名,这次指向的就是 CDN 的 GSLB。
接着,本地 DNS 服务器去请求 CDN 的 GSLB 的域名,GSLB 就会为用户选择一台合适的 CDN 节点提供服务,选择的依据主要有以下几点:
GSLB 会基于以上的条件进行综合分析后,找出一台最合适的 CDN 节点,并返回该 CDN 节点的 IP 地址给本地 DNS 服务器,然后本地 DNS 服务器缓存该 IP 地址,并将 IP 返回给客户端,客户端去访问这个 CDN 节点,下载资源。
简单的说CDN就是在访问者和最终存储资源服务器之间的一个桥梁,CDN将一些资源存储,供访问者快速访问,不用去最终存储资源的服务器那里获取资源(起一个缓存作用)。同时CDN有很多服务器,这些服务器会根据访问者ip的位置自动选择离访问者最近的CDN服务器,以确保访问速度。