所有的大厂以及其他很多互联网公司都使用了CDN,那CDN到底是什么呢?为什么要使用?一起来看看吧!
文章目录
- 1. 什么是CDN?
- 2. CDN 是怎么工作的?
- 3. 使用 CDN 有什么好处?
- 3.1 缩短网站加载时间
- 3.2 减少带宽成本
- 3.3 可靠性
- 3.4 针对攻击有恢复能力
1. 什么是CDN?
内容分发网络(CDN)是指一组分布在不同地理位置的服务器,协同工作以提供互联网内容的快速交付。
CDN 允许快速传输加载互联网内容所需的资源,包括 HTML 页面、javascript 文件、样式表、图像和视频(视频可能有其他专门维护的服务器)。 CDN 服务已得到不断普及。如今,几乎所有 web 流量都通过 CDN 提供服务。比如Vue打包后的文件都放到了CDN。
正确配置的 CDN 还可帮助保护网站免受某些常见的恶意攻击,例如分布式拒绝服务(DDOS)攻击。
2. CDN 是怎么工作的?
CDN 的核心是一个服务器网络,目的是尽可能快速、便宜、可靠和安全地交付内容。为了提高速度和连接性,CDN 会将服务器放置在不同网络之间的交换点。
CDN 通常会将服务器放置在不同网络之间的交换点。这些互联网交换点(IXP)是不同互联网提供商连接的主要位置,以便彼此提供对来自其不同网络的流量的访问。除了 IXP 外,CDN 还将服务器放置在位于全球高流量区域和战略位置的数据中心,以便能够尽快移动流量。
3. 使用 CDN 有什么好处?
3.1 缩短网站加载时间
这里用我在外网看到的例子,看看使用 CDN 和不使用 CDN 在加载时间上有何不同?
假设纽约的某个人需要访问新加坡服务器上托管的网站。这两个位置相隔甚远,物理距离为大约 9,520 英里。
如果承载网站内容的服务器(源站服务器)位于新加坡,则对各个网页资产的每个请求都必须从纽约前往新加坡,然后再返回。如同搭乘具有许多连接点的国际航班一样,每个请求在从 A 点传到 B 点的远距路程中都要经过一系列路由器。
请求从纽约到新加坡必须沿途经过每个路由器位置,因此总距离和每个路由器处理请求所花费的时间都会增加传输时间(延迟)。一旦源服务器处理了请求并响应了发出请求的客户端,它就会将信息发送回去,通过类似的路由器序列后返回到纽约。此总往返行程的度量在电信中称为 RTT(往返时间)。暂时忽略可用带宽和潜在的网络拥塞,我们来看一个延迟因素的例子。
为便于阐述,我们假设:
- 请求从纽约到新加坡需要 250 毫秒。
- 建立一个 TCP/IP 连接将添加 3 次 250 毫秒延迟。
- 网页需要 5 个不同的文件,包括图片、JavaScript 文件和网页本身。
我们粗略看一下该网页的加载时间:
- 750 毫秒:在纽约的客户端和新加坡的源站服务器之间建立 TCP/IP 连接。
- 250 毫秒:对网页的 HTTP 请求从纽约传送到新加坡。
- 250 毫秒:纽约的请求者收到来自新加坡的源站服务器的响应,响应中包含 200 状态码和包括所有需要的其他资产的网页。
- 250 毫秒:纽约的客户端请求这 5 项资产中的每一项。
- 1500 毫秒:这五项资产从新加坡的源站服务器异步交付给客户端。
在这个简单示例中,网页加载的总传输时间约为 3000 毫秒。
每次发出请求并发送响应时,都要遍历纽约客户与新加坡源站之间的整个路径。随着网站规模扩大并需要更多资产,A 点和 B 点之间的延迟会不断增加。
我们再看一下向纽约的 Web 客户端提供托管在新加坡的内容的示例,但这一次新加坡站点使用一个在亚特兰大设有服务器的 CDN,其含有静态网站的缓存副本:
- 请求从纽约到亚特兰大需要 50 毫秒。
- 建立一个 TCP/IP 连接将添加 3 次 50 毫秒延迟
- 网页需要 5 个不同的资产,包括图片、JavaScript 文件和网页本身。
我们粗略看一下该网页使用 CDN 时的加载时间:
- 150 毫秒:在纽约的客户端和亚特兰大的边缘服务器之间建立 TCP/IP 连接。
- 50 毫秒:对网页的 HTTP GET 请求从纽约传送到边缘服务器。
- 50 毫秒:客户端收到来自边缘服务器的响应,响应中包含网页以及还需要的其他资产的列表。
- 50 毫秒:客户端请求这 5 项资产中的每一项。
- 800 毫秒:这五项资产从边缘服务器异步交付给客户端。
网页加载的总传输时间约为 1100 毫秒。
在本例中,客户端与内容之间距离缩短使静态内容的延迟时间缩短了 1900 毫秒;也就是说,加载时间缩短了将近 2 秒钟。
通过缩短所有必要流量都需要遍历的总距离,网站的每一用户都能节省大量加载时间。用户会随着等待时间增加而开始迅速离开站点(跳出),因此这种改进既代表了更好的用户体验,也代表着更长的页面停留时间。
注意:这不包括下载以及处理请求和响应所需的时间,仅计算在两个位置之间传输信息所需的传输时间。其他重要延迟因素还包括数据缩减、硬盘速度和网络拥塞。
3.2 减少带宽成本
CDN 减少网站运营商支出的主要方式是减少往返源服务器的行程。由于 CDN 会缓存网站上的大部分内容并从缓存中提供这些内容,因此源服务器不必一遍又一遍地传递相同的内容。相反,CDN 代表源服务器执行此操作。
当用户访问网站时,他们的浏览器将通过互联网加载内容。如果网站不使用 CDN,则所有内容都必须来自源服务器,这意味着每次网站加载时,HTTP 请求都会到达源服务器,而内容则从同一台服务器发出。这种情况发生的次数越多,传输的数据就越多,从而导致网站运营商的成本更高。
这么说可能不明白,举个例子
当客户端从源站服务器请求文件时,请求通常需要传送到服务器,然后再传回来。CDN 将静态内容文件从源站服务器拉取到分布式 CDN 网络中,从而减少延迟,这个过程称为缓存,某些 CDN 允许有选择地缓存动态内容。数据经过缓存之后,CDN 将从最近的 CDN 数据中心向客户端提供内容。
当完成 TCP 握手后,客户端就会向 CDN 的网络发出 HTTP 请求。如果内容没缓存,则 CDN 将首先通过在源站服务器和 CDN 边缘服务器之间进行额外一次请求,从源站下载内容。
典型的 CDN 高速缓存过程包含以下 4 个步骤:
- 当用户请求网页时,用户的请求被路由到 CDN 中最近的边缘服务器。
- 边缘服务器接着向源站服务器请求用户请求的内容。
- 源站响应边缘服务器的请求。
- 边缘服务器响应客户端。
如下图:
CDN 与客户端的近距离价值是在向源站服务器发出初始请求之后体现出来的。一旦数据从源站服务器缓存到 CDN 网络中,来自客户端的每个后续请求都只需到达最近的边缘服务器即可。如果最近的边缘服务器比源站服务器近,就能减少延迟并且更快提供内容。
如下图:
我们知道,客户端和服务器之间数据交换越少越好。其实,优化在开发人员打包的时候已经进行处理了。webpack打包会将代码压缩、变量名精简、删掉空格和多余的注释等等。
// 这是注释,在打包的时候可以配置选择性的删除
function hello(string name) {
console.log("hello, " + name + " welcome!");
}
压缩之后可能会变成下面的样子
h:function(n){console.log("hello, "+n+" welcome!");}
这样不仅减少了CDN与源服务器传输的数据量,还减少 CDN 的缓存服务器和客户端之间的总体数据传输量,这进一步缩短了前端页面加载时间。当传输的数据总量下降时,延迟和所需带宽都会减少。
上面说到了代码压缩,其实还有文件压缩,若要减少通过互联网传输数据时所需的延迟和带宽消耗,文件压缩是一个重要组成部分。GZip 是常用的压缩方法,许多 CDN 提供商默认情况下都启用 GZip,GZip 压缩后的文件的大小比初始文件小大约 50% 到 70%。
CDN是否增加成本?
大多数CDN为其服务收费,但每月数据传输节省的费用通常会超过使用CDN的成本。
3.3 可靠性
有时互联网上的内容会出错。服务器出现故障,网络变得拥挤甚至连接中断。CDN 让 Web 应用程序即使在面对这些问题时也能够为用户提供不间断的服务。
CDN 平衡网络流量的负载,确保没有一台服务器不堪重负。如果单个服务器停止工作,CDN 可以启动“故障转移”过程,让备份服务器接管。
故障转移可用于防止在服务器不可用时丢失流量。当服务器发生故障时,流量需要重新路由到仍在正常运行的服务器。通过自动将任务卸载到备用系统或其他具有可用容量的机器上,智能故障转移可以防止面向用户的服务出现中断。
一些 CDN可以路由绕过网络拥塞,就像地图高德百度导航可以找到绕过繁忙的路段。由于 CDN 由分布在许多不同数据中心的多台服务器组成,因此它们还可以提供大量冗余。如果服务器、数据中心或整个数据中心区域出现故障,CDN 仍然可以从网络中的其他服务器传送内容。
3.4 针对攻击有恢复能力
CDN 特别适合用于保护网站免受拒绝服务 (DoS) 和分布式拒绝服务 (DDoS) 攻击。在这些攻击中,攻击者将大量垃圾网络流量引导至网站,试图使网站不堪重负并崩溃。凭借其众多服务器,CDN 能够比单个源服务器更好地吸收大量流量,甚至是来自 DDoS 攻击的非自然流量峰值。通过这样做,它们即使在受到攻击时也能保持网站在线。
一些 CDN 使用 Anycast 路由方法,将互联网流量传输到特定的可用数据中心。这是为了确保缩短响应时间,并防止任何一个数据中心在发生 DDoS 攻击等异常需求时变得不堪重负。
借助 Anycast 技术,多台机器可以共享同一个 IP 地址。当请求发送到 Anycast IP 地址时,路由器会将其定向到最近网络上的机器。如果整个数据中心发生故障或因其他原因而无力应对大量通信,Anycast 网络可以对服务中断做出响应,这类似于负载均衡器在一个数据中心中跨多台服务器传输通信;数据从故障位置转移走,路由到仍然在线并可正常运作的另一个数据中心。
如今,DDoS 攻击是对互联网资产可靠性的最大威胁之一。使用 Anycast 技术的 CDN 在缓解 DDoS 攻击方面具有更大的灵活性。在大多数现代 DDoS 攻击中,典型的单播连接计算机无力承受,有了 Anycast 网络,僵尸网络攻击流量的一部分可以分散到多个数据中心,从而减少攻击的影响。
欢迎一键三连~
有问题请留言,大家一起探讨学习
----------------------Talk is cheap, show me the code-----------------------