一文带你弄懂 CDN 技术的原理

对于 CDN 这个东西,相信大家都有耳闻,感觉既陌生但又熟悉。最近深入了解了一下 CDN,这才发现原来 CDN 如此重要!今天就跟大家科普一下 CDN 是什么,以及为啥要有 CDN,最后再讲一下 CDN 的工作过程!
浏览器的网络请求
要理解 CDN 这件事情,我们就得先理解浏览器发出一个请求的过程是怎样的,其整体过程如下图所示。

- 用户在浏览器中输入要访问的网址域名。
- 浏览器向本地 DNS 服务器请求对域名的解析。
- 如果本地 DNS 服务器有域名的解析结果,那么直接响应用户请求,返回该域名对应的 IP 地址。
- 如果本地 DNS 服务器没有域名的解析结果,那么则会递归地向 DNS 系统请求解析,随后将该结果返回给用户。
- 浏览器得到域名解析结果后,其实也就是域名对应的 IP 地址。
- 随后浏览器向服务器请求内容。
- 服务器将用户请求内容返回给浏览器。
通过这么复杂的步骤,用户就可以看到页面内容了。但实际上,在第 6、7 这两步的时候,其中间也经过了非常复杂的过程。为了更清晰地表述,我们可以将这个过程分为 3 个主要节点,如下图所示。

网站服务器通过公网出口,再通过长途骨干网,最后通过用户的宽带广猫到达用户所在的局域网,最终才到达用户电脑的浏览器。其中长途骨干网的传输是最为耗时的,它需要经过网站服务器所在的机房、骨干网、用户所在城域网、用户所在接入网等,其物理传输距离非常遥远。 在这种情况下,如果传输的数据非常多,访问的用户特别大,那么就会出现很长的延时,影响用户体验。同时,每请求一次数据都需要经过漫长的数据传输,对于长途骨干网来说,都是一次负担。
刚刚说的这个场景,很形象的一个例子是春节抢票的场景。当我们春节抢票时,我们都会登陆 12306 网站,网站上肯定有不少图片资源。这时候可能同时会有 1 个亿的人,同时去请求一张一模一样的图片。这时候如果我们都按照上面的过程去请求一次图片数据,那么将会产生 1 亿次的网络数据传输,这对于我们整个国家的互联网基础设施是个灾难啊!
但事实情况是:12306 貌似也没有挂掉呀!
那么他们是如何解决这个问题呢?答案就是:CDN!
什么是 CDN ?
其实 CDN 就是内容分发网络的意思,其英文全称为 Content Delivery Network。简单地说,CDN 可以提前把数据存在离用户最近的数据节点,从而避免长途跋涉经过长途骨干网,最终达到减少骨干网负担、提高访问速度的目的。 按照我们上面的场景,如果没有 CDN 的话,每次请求都需要从网站服务器经过公网出口、长途骨干网、用户接入局域网,最终到达浏览器。但是当有了 CDN 之后,可能就变成了下面这样:

浏览器请求图片数据时,会先去 CDN 缓存服务器获取。如果获取到数据,那么就直接返回。否则才会经过长途骨干网,最终到达网站服务器获取图片数据。那么只要我们提前在 CDN 缓存服务器上传图片,那么我们就可以极大地减少网络流量,同时减少网络延迟。
从上图我们可能会觉得:这不就是在长途骨干网和用户局域网中间,加了一个服务器嘛。但事实上可并不是这样,CDN 其实还缩短了请求数据的距离。我们知道用户所处的位置可能是全国各地,为了尽可能地减少网络传输的延时,一般都会在离用户较近的地方设置 CDN 缓存服务器,例如:在华南、华北、华东、西南设置一个主 CDN 服务器,这样各个地区的用户就可以直接请求对应的 CDN 服务器,而不需要来回跑大半个中国,极大地提高了效率!因此,当我们说内容分发网络的时候,脑海里应该有如下这样一张图片:遍布全国各地的 CDN 缓存服务器,组成了我们的内容分发网络。每次用户请求都会到离他最近的 CDN 服务器请求数据,从而极大地提高访问速度。
CDN 工作原理
到了这里,相信大家都知道 CDN 是什么了。但实际上 CDN 是如何与 DNS 结合起来的,这里面还是有点复杂的。加入了 CDN 之后,浏览器的网络请求就变成如下图所示的情况。

- 浏览器发起图片 URL 请求,经过本地 DNS 解析,会将域名解析权交给域名 CNAME 指向的 CDN 专用 DNS 服务器。
- CDN 的 DNS 服务器将 CDN 的全局负载均衡设备 IP 地址返回给浏览器。
- 浏览器向 CDN 全局负载均衡设备发起 URL 请求。
- CDN 全局负载均衡设备根据用户 IP 地址,以及用户请求的 URL,选择一台用户所属区域的区域负载均衡设备,向其发起请求。
- 区域负载均衡设备会为用户选择最合适的 CDN 缓存服务器(考虑的依据包括:服务器负载情况,距离用户的距离等),并返回给全局负载均衡设备。
- 全局负载均衡设备将选中的 CDN 缓存服务器 IP 地址返回给用户。
- 用户向 CDN 缓存服务器发起请求,缓存服务器响应用户请求,最终将用户所需要偶的内容返回给浏览器。
使用 CDN 服务的网站,只需要将域名解析权交给 CDN 服务商,接着将需要分发的内容上传到 CDN,就可以实现内容加速了!
总结
这么看下来,其实 CDN 内容分发网络,本质上就是一大堆遍布在全球各个角落的缓存服务器。通过与 DNS 的配合,找到最靠近用户的一台 CDN 缓存服务器,然后把数据快速地分发给用户。通过 CDN 技术,我们不仅减少了对于整体骨干网的流量负担,还提高了用户的体验,真是一举两得啊!
一文带你弄懂 CDN 技术的原理的更多相关文章
- 一文带你弄懂 JVM 三色标记算法!
大家好,我是树哥. 最近和一个朋友聊天,他问了我 JVM 的三色标记算法.我脑袋一愣发现竟然完全不知道!于是我带着疑问去网上看了几天的资料,终于搞清楚啥事三色标记算法,它是用来干嘛的,以及它和 CMS ...
- 一文带你读懂什么是vxlan网络
一个执着于技术的公众号 一.背景 随着云计算.虚拟化相关技术的发展,传统网络无法满足大规模.灵活性要求高的云数据中心的要求,于是便有了overlay网络的概念.overlay网络中被广泛应用的就是vx ...
- 一文带你读懂zookeeper在大数据生态的应用
一个执着于技术的公众号 一.简述 在一群动物掌管的世界中,动物没有人类聪明的思想,为了保持动物世界的生态平衡,这时,动物管理员-zookeeper诞生了. 打开Apache zookeeper的官网, ...
- 实战 | 一文带你读懂Nginx反向代理
一个执着于技术的公众号 前言 在前面的章节中,我们已经学习了nginx基础知识: 给小白的 Nginx 10分钟入门指南 Nginx编译安装及常用命令 完全卸载nginx的详细步骤 Nginx 配置文 ...
- 一文带你看懂Java中的Lock锁底层AQS到底是如何实现的
前言 相信大家对Java中的Lock锁应该不会陌生,比如ReentrantLock,锁主要是用来解决解决多线程运行访问共享资源时的线程安全问题.那你是不是很好奇,这些Lock锁api是如何实现的呢?本 ...
- 一文带你读懂!华为云在ACMUG技术沙龙上都透露了些啥?
摘要:近日,华为云数据库业务总裁苏光牛在ACMUG中国MySQL用户组主办的 "华为云专场" 技术沙龙中分享了华为云数据库重磅新品GaussDB的核心能力与竞争优势.那么, Gau ...
- 从源码入手,一文带你读懂Spring AOP面向切面编程
之前<零基础带你看Spring源码--IOC控制反转>详细讲了Spring容器的初始化和加载的原理,后面<你真的完全了解Java动态代理吗?看这篇就够了>介绍了下JDK的动态代 ...
- 一文带你看懂cookie,面试前端不用愁
本文由云+社区发表 在前端面试中,有一个必问的问题:请你谈谈cookie和localStorage有什么区别啊? localStorage是H5中的一种浏览器本地存储方式,而实际上,cookie本身并 ...
- 【并发编程】一文带你读懂深入理解Java内存模型(面试必备)
并发编程这一块内容,是高级资深工程师必备知识点,25K起如果不懂并发编程,那基本到顶.但是并发编程内容庞杂,如何系统学习?本专题将会系统讲解并发编程的所有知识点,包括但不限于: 线程通信机制,深入JM ...
随机推荐
- Java 对象实现 Serializable 的原因
java.io.Serializable 是 Java 中的一种标记接口(marker interface).标记接口是一种特殊的接口,java.io.Serializable 接口没有任何方法,也没 ...
- 选择器补充与CSS属性
目录 伪元素选择器 选择器优先级 CSS属性 宽和高 字体样式 文字属性 背景属性 边框属性 display属性 盒子模型 浮动(float) 清除浮动 伪元素选择器 伪元素选择器可以通过CSS操作文 ...
- 08shell脚本
shell脚本编程 1.1简介 什么是shell脚本 shell脚本: 就是一些命令的集合, 在脚本文件中可以有流程控制, 如顺序, 条件分支和循环等 脚本文件一般一.sh文件为扩展名, 但是不是必须 ...
- Activate-or-Not:learning-customized-activation
关于activate-or-Not的PPT paper code step1 step2 step3 step4 step5 step6 step7 step8 step9 step10
- vs2022+resharper C++ = 拥有一个不输clion的代码体验
这篇文章详细讲一下resharper C++在vs2022中的配置,让他拥有跟clion一样好用的代码补全功能. 为什么clion写代码体验很好好用为啥还要用vs呢,因为网上很多教程都是基于visua ...
- 1.3温度转换(中国大学Mooc-Python 语言程序设计)
温度转换 温度刻画的两种不同体系 1.摄氏度:(中国等世界大多数国家使用) 以1标准大气压下水的结冰点为0度,沸点为100度,将温度进行等分刻画 2.华氏度:(美国.英国等国家使用) 以1标准大气压 ...
- 第6章 字符串(下)——C++字符串
6.5 C++ strings(C++字符串) C风格字符串常见错误:试图去访问数组范围以外的元素:没有使用函数strcpy( )来实现字符串之间的复制:没有使用函数strcmp( )来比较两个字符串 ...
- ElasticSearch7.3学习(三十一)----Logstash基础学习
一.Logstash基本介绍 Logstash 是一个功能强大的工具,可与各种部署集成. 它提供了大量插件,可帮助你解析,丰富,转换和缓冲来自各种来源的数据(文件.数据库......).logstas ...
- 【生成对抗网络学习 其一】经典GAN与其存在的问题和相关改进
参考资料: 1.https://github.com/dragen1860/TensorFlow-2.x-Tutorials 2.<Generative Adversarial Net> ...
- 网络协议之:memcached binary protocol详解
目录 简介 memcached的协议包 memcached命令举例 总结 简介 前面讲到了memcached的文本协议,虽然文本协议看起来非常简单,但是对于客户端来说一般还是会选择效率更高的二进制协议 ...