Skip to content

CDN 实践配置+原理篇

✨文章摘要(AI生成)

笔者在这篇文章中详细讲解了 CDN(内容分发网络)的基本概念、作用及其在阿里云对象存储中的配置过程。

CDN 通过将用户请求路由到最近的服务器,显著提高了内容加载速度并减轻了源服务器的负担。此外,CDN 还增强了安全性,能够有效防御 DDoS 和 MITM 等网络攻击。文章中提供了具体的配置步骤,包括如何将加速域名指向 CNAME 地址,以及如何映射自定义域名。通过对比不同的 OSS 配置方案,笔者指出方案四结合了 CDN 的优势与自定义域名的便捷性。在总结 CDN 的工作原理时,笔者清晰地描述了用户请求的整个过程,强调了 DNS 解析在 CDN 加速中的重要性。

整体而言,本文为 CDN 的应用提供了实用的指导。


前几天配置了下自己在阿里云的对象存储中的 CDN 加速,这里记录写个教程为引入,来讲解一下 CDN 的相关原理及过程,希望对你有所帮助

CDN 概念

CDN(Content Delivery Network,内容分发网络)是指一种通过互联网互相连接的电脑网络系统,利用最靠近每位用户的服务器,更快、更可靠地将音乐、图片、视频、应用程序及其他文件发送给用户,来提供高性能、可扩展性及低成本的网络内容传递给用户。

CDN 作用

CDN 一般会用来托管 Web 资源(包括文本、图片和脚本等),可供下载的资源(媒体文件、软件、文档等),应用程序(门户网站等)。使用 CDN 来加速这些资源的访问。

(1)在性能方面,引入 CDN 的作用在于:

  • 用户收到的内容来自最近的数据中心,延迟更低,内容加载更快
  • 部分资源请求分配给了 CDN,减少了服务器的负载

(2)在安全方面,CDN 有助于防御 DDoS、MITM 等网络攻击:

  • 针对 DDoS:通过监控分析异常流量,限制其请求频率
  • 针对 MITM:从源服务器到 CDN 节点到 ISP(Internet Service Provider),全链路 HTTPS 通信

除此之外,CDN 作为一种基础的云服务,同样具有资源托管、按需扩展(能够应对流量高峰)等方面的优势。

直接上手配置

前提是你已经开通了对象存储,本部分教程仅介绍从对象存储→CDN 加速,并以此为引,帮助回忆一下 CDN 的原理及过程;

控制台中进入对象存储应该是这个样子:

还有就是你应该在此之前准备一个域名,因为 CDN 本质上就是利用了 DNS,后续原理篇会讲到,所以需要一个域名,同时,如果你需要 HTTPS 访问,你还需要准备一个 SSL 证书,这个本章节不详细涉及,请自行配置;

我这里就不重新从零配置了,直接从已经配置的地方开始讲讲,详细配置教程可以看这个参考链接

我们从上面图中箭头指向的链接进入可以看到 CDN 相关的配置信息,有如下两个地方值得注意:

  • CNAME:启用 CDN 加速服务需要将加速域名指向 CNAME 地址,这样访问加速域名的请求才能转发到 CDN 节点上,在这里就是我们的oss.justin3go.com => CNAME
  • 原站域名:我们对象存储中阿里云自动给的一个访问域名,一般来说是非常长一串的一个地址
  • 我们自己的域名:我们想要外界通过这个来访问的一个域名,我这里就是oss.justin3go.com

可以看到这里有三个地址(域名),那我们该如何进行解析呢?就是该如何进行域名映射,这就需要我们简单了解一下 CDN 的原理了,这时候之前记忆的八股文知识就被唤醒了...

先说是如何映射的:

oss.justin3go.com => CDN 加速的 CNAME

而前面那种图(从这往上数第二张图)中也配置了原站信息CDN 加速的 CANME => 原站 oss 域名

常见的 oss 配置方式

所以综上最后的域名映射关系就是下图中的方案四:

对于配置 oss 有如上如下四种方案(很基本的东西,这里简单做个对比方便大家理解):

  • 方案一:用户直接方案 oss 域名
  • 方案二:使用我们自己的域名对 oss 域名解析,方便记忆,就是我们平常域名拿来解析 ip 地址的作用,也是映射作用
  • 方案三:使用 CDN 加速,有 CDN 的优势,如访问速度快
  • 方案四:使用自己的域名对 CDN 域名进行解析,有方案二和方案三的结合优势

CDN 原理篇

这小节主要解决这个问题“为什么 CDN 加速需要单独一个域名”

回答也很简单,就是 CDN 本质上使用了 DNS 解析来做到访问最近的节点资源,接下来通过下面这张图详细说一下 CDN 整个一个访问过程:

用户未使用 CDN 缓存资源的过程:

  1. 浏览器通过 DNS 对域名进行解析(就是基本的 DNS 解析过程),依次得到此域名对应的 IP 地址
  2. 浏览器根据得到的 IP 地址,向域名的服务主机发送数据请求
  3. 服务器向浏览器返回响应数据

用户使用 CDN 缓存资源的过程:

  1. 对于点击的数据的 URL,经过本地 DNS 系统的解析,发现该 URL 对应的是一个 CDN 专用的 DNS 服务器,DNS 系统就会将域名解析权交给 CNAME 指向的 CDN 专用的 DNS 服务器。
  2. CND 专用 DNS 服务器将 CND 的全局负载均衡设备 IP 地址返回给用户
  3. 用户向 CDN 的全局负载均衡设备发起数据请求
  4. CDN 的全局负载均衡设备根据用户的 IP 地址,以及用户请求的内容 URL,选择一台用户所属区域的区域负载均衡设备,告诉用户向这台设备发起请求
  5. 区域负载均衡设备选择一台合适的缓存服务器来提供服务,将该缓存服务器的 IP 地址返回给全局负载均衡设备
  6. 全局负载均衡设备把服务器的 IP 地址返回给用户
  7. 用户向该缓存服务器发起请求,缓存服务器响应用户的请求,将用户所需内容发送至用户终端。

结合刚才配置阿里云 CDN 的过程

  1. 用户访问oss.justin3go.com
  2. 本地 DNS 进行解析发现oss.justin3go.com对应的是CDN 加速域名,于是将域名解析权交给 CDN 专用的 DNS 服务器,该专用 DNS 服务器返回CDN 加速域名
  3. 用户请求CDN 加速域名,通过负载均衡返回离用户最近的一个节点资源;

我们的oss 原站地址会在 CDN 会定期同步资源到各个缓存服务器的时候使用,并且如果还未同步时,即缓存服务器还没我们将访问的资源时,会直接返回oss 原站地址

最后

有些细节部分并没有一一验证,如果我理解有误的话,欢迎友善指出🎉

参考