文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

CDN 原理入门,你学会了吗?

2024-11-30 16:12

关注

图片来源: https://www.researchgate.net/figure/Content-Delivery-Network_fig1_221632001

CDN 技术原理

CDN​ 的 基本原理为反向代理,反向代理(Reverse Proxy)方式是指以代理服务器来接受 Internet​ 上的连接请求,然后将请求转发给内部网络上的服务器, 并将从服务器上得到的结果返回给 Internet​ 上请求连接的客户端,此时代理服务器对外就表现为一个节点服务器。通过部署更多的反向代理服务器,来实现 多节点 CDN 架构。

CDN​ 主要使用了 负载均衡、动态路由​ 和 内容压缩 来提高其性能和可靠性:

• 分布式存储: 采用可扩展的系统架构,利用多节点、多位置、多种方式存储数据

• 负载均衡: 可以将流量均匀地分配到多个节点服务器上,从而避免某些服务器过度负载而导致响应时间延迟

• 动态路由: 可以根据网络流量和服务器负载情况来选择最优的路径和服务器来响应用户请求

• 内容压缩: 可以将内容文件压缩到更小的体积,以减少网络传输的时间和成本

简单地理解,CDN 就是客户端和真实服务器之间的一层高效的缓存。

传统网站访问过程

在说明 CDN​ 的技术优势之前,我们先来看看传统网站的 HTTP 请求 访问过程。大部分开发者应该都熟悉 HTTP 协议基础流程,下面以请求一个图片文件来举例说明。

1.客户端浏览器输入网址,如 https://www.example.com/logo.png

2.浏览器请求 DNS​ 服务器,查询 https://www.example.com/logo.png​ 对应的源服务器 IP 地址

3. DNS 服务器返回对应的 IP 地址

4. 浏览器向服务器发起 TCP 连接

5. 浏览器通过建立的 TCP​ 连接发送 HTTP 请求图片文件

6. 服务器向浏览器发送图片文件

7. 浏览器将接收到的图片文件渲染,完成本次请求

传统网站访问过程

如果我们要加入 CDN 的话,是加到哪个步骤呢?

根据上面描述的步骤不难发现,从第 3 步开始,客户端浏览器就和真实的服务器开始建立连接了,连接建立完成后,客户端浏览器就直接从服务器获取数据, 这显然不是我们需要的,因为这样所有的客户端都会直接连接服务器,会严重增加服务器的负载。

我们再来看第 2 步,浏览器在访问真实的服务器之前,会先通过 DNS​ 查询域名对应源服务器的 IP​ 地址,如果 DNS​ 返回的是 CDN​ 服务器的 IP​ 地址, 那么后面的流程就会变为: 客户端浏览器就直接从 CDN​ 服务器获取数据,接下来的工作就会全部转交给 CDN 了,如何完成这项工作呢?

将域名 www.example.com 的 CNAME 记录解析到 CDN 服务商即可,CDN 服务商的 DNS 服务器也称为权威服务器 (细节请看上篇文章: DNS 原理)。

接入 CDN 网站访问过程

1. 客户端浏览器输入网址,如 https://www.example.com/logo.png

2. 浏览器请求 DNS​ 服务器,查询 https://www.example.com/logo.png​ 对应的服务器 IP 地址

3. 由于域名的 CNAME​ 记录解析到了 CDN​ 服务商,所以这里 DNS​ 服务器会返回 CDN​ 服务商提供的 CDN 节点服务器的地址

4. 浏览器向 CDN​ 节点服务器发起 TCP 连接

5. 浏览器通过建立的 TCP​ 连接发送 HTTP 请求图片文件

6. CDN​ 节点服务器使用内部专用 DNS​ 解析出域名对应的源服务器 IP 地址

7. CDN 节点服务器向源服务器发起TCP连接

8. CDN​ 节点服务器通过建立的 TCP​ 连接发送 HTTP 请求图片文件

9. CDN 服节点务器接收到图片文件后,在本地保存一份,作为缓存使用,减少源服务器的回源流量

10. CDN 节点服务器向浏览器发送图片文件

11. 浏览器将接收到的图片文件渲染,完成本次请求

接入 CDN 网站访问过程

中央节点如何选择提供服务的 CDN 节点

一般会综合考虑以下几个方面:

这里以 地理位置 举例说明:

  1. 1. 用户访问 CDN​ 服务商的权威 DNS 服务器
  2. 2. DNS​ 服务器获取用户的 IP 地址
  3. 3. 根据用户 IP 地址查询用户所在地
  4. 4. 返回离用户最近的 CDN​ 节点的 IP​ 地址,比如用户离北京近,就返回北京的 CDN​ 节点的 IP 地址

按照地理位置访问 CDN 节点过程

如何提高 CDN 缓存命中率

不适合使用 CDN 的场景

数据如何回源

还是以刚才的 https://www.example.com/logo.png​ 为例,CDN 节点服务器会先把这张图片缓存起来,下次有相同的请求到达时,直接返回缓存的图片,从而减少回源流量。

这里提到的 缓存​ 是一个很复杂的功能,下面是阿里的 HTTP 缓存服务器,名字叫 Swift。

阿里 - CDN 节点

图中是一个 CDN​ 节点,用户的请求从 LVS​(LVS是一个四层的负载均衡组件)的入口来,先由 LVS​ 做一次 4 层的负载均衡, 然后转到一台 Tengine​(阿里在 Nginx​ 的基础上开发的服务器)上,Tengine​ 做一致性哈希,选择一台 Swift 服务器去做缓存数据回源。

阿里 - Swift 架构

首先可以看到,Swift​ 是一个多线程的程序,每个线程启动一个 epoll​ 来充分发挥多核的处理能力,并且尽量减少线程间的上下文切换,一个请求尽量在一个线程处理。除此之外,还能看到 内存缓存,SSD 缓存,SATA 缓存。Swift​ 有热点淘汰和提升机制,将热文件放在内存里,次热文件放在 SSD 上,最后才是 SATA 盘。叔度 (阿里 CDN 负责人) 指出,Tengine​ 和 Swift​ 是通过 Spdy 协议 来通信的,从而优化 HTTP 的传输效率。

小结

CDN 的原理是: 基于分布式架构,通过将源服务器上的内容分发到多个节点服务器上,使用户能够从最近的服务器中获取所需内容。这些节点服务器被称为 边缘服务器,它们通常位于不同的地理位置,并通过高速互联网连接互相交换数据。用户通过接入离他们最近的 边缘服务器 来获取所需的内容,从而降低了响应时间和延迟,提高了网站的访问速度。

Reference

引用链接

[1]​ 如何自建低成本 CDN ?: ​​https://www.v2ex.com/t/877718​

[2]​ 阿里云 - DCDN: ​​https://www.aliyun.com/product/dcdn?spm=5176.7933777.J_3207526240.59.329a496e4a1hku​

[3]​ 阿里云 - 提高CDN缓存命中率: ​​https://help.aliyun.com/document_detail/123330.html​

[4]​ 腾讯云 - CDN: ​​https://cloud.tencent.com/product/cdn​

[5]​ 腾讯云 - SCDN: ​​https://cloud.tencent.com/product/scdn​

[6]​ 百度百科 - CDN: ​​https://baike.baidu.com/item/内容分发网络/4034265​

[7]​ CDN的原理以及其中的一些技术: https://colobu.com/2016/09/23/CDN-introduction/

来源:洋芋编程内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯