首页 > 其他分享 >一文带你弄懂 CDN 技术的原理

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

时间:2022-12-20 20:34:52浏览次数:43  
标签:浏览器 请求 骨干网 CDN 弄懂 用户 服务器 一文

对于 CDN 这个东西,相信大家都有耳闻,感觉既陌生但又熟悉。最近深入了解了一下 CDN,这才发现原来 CDN 如此重要!今天就跟大家科普一下 CDN 是什么,以及为啥要有 CDN,最后再讲一下 CDN 的工作过程!

浏览器的网络请求

要理解 CDN 这件事情,我们就得先理解浏览器发出一个请求的过程是怎样的,其整体过程如下图所示。

  1. 用户在浏览器中输入要访问的网址域名。
  2. 浏览器向本地 DNS 服务器请求对域名的解析。
  3. 如果本地 DNS 服务器有域名的解析结果,那么直接响应用户请求,返回该域名对应的 IP 地址。
  4. 如果本地 DNS 服务器没有域名的解析结果,那么则会递归地向 DNS 系统请求解析,随后将该结果返回给用户。
  5. 浏览器得到域名解析结果后,其实也就是域名对应的 IP 地址。
  6. 随后浏览器向服务器请求内容。
  7. 服务器将用户请求内容返回给浏览器。

通过这么复杂的步骤,用户就可以看到页面内容了。但实际上,在第 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 之后,浏览器的网络请求就变成如下图所示的情况。

  1. 浏览器发起图片 URL 请求,经过本地 DNS 解析,会将域名解析权交给域名 CNAME 指向的 CDN 专用 DNS 服务器。
  2. CDN 的 DNS 服务器将 CDN 的全局负载均衡设备 IP 地址返回给浏览器。
  3. 浏览器向 CDN 全局负载均衡设备发起 URL 请求。
  4. CDN 全局负载均衡设备根据用户 IP 地址,以及用户请求的 URL,选择一台用户所属区域的区域负载均衡设备,向其发起请求。
  5. 区域负载均衡设备会为用户选择最合适的 CDN 缓存服务器(考虑的依据包括:服务器负载情况,距离用户的距离等),并返回给全局负载均衡设备。
  6. 全局负载均衡设备将选中的 CDN 缓存服务器 IP 地址返回给用户。
  7. 用户向 CDN 缓存服务器发起请求,缓存服务器响应用户请求,最终将用户所需要偶的内容返回给浏览器。

使用 CDN 服务的网站,只需要将域名解析权交给 CDN 服务商,接着将需要分发的内容上传到 CDN,就可以实现内容加速了!

总结

这么看下来,其实 CDN 内容分发网络,本质上就是一大堆遍布在全球各个角落的缓存服务器。通过与 DNS 的配合,找到最靠近用户的一台 CDN 缓存服务器,然后把数据快速地分发给用户。通过 CDN 技术,我们不仅减少了对于整体骨干网的流量负担,还提高了用户的体验,真是一举两得啊!

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



标签:浏览器,请求,骨干网,CDN,弄懂,用户,服务器,一文
From: https://blog.51cto.com/u_13879334/5956647

相关文章

  • 技术分享 | MySQL:一文弄懂时区&time_zone
    作者:胡呈清爱可生DBA团队成员,擅长故障分析、性能优化,个人博客:https://www.jianshu.com/u/a95ec11f67a8,欢迎讨论。你还在被以下问题困扰吗:MySQL的安装规范中应该设置什么......
  • 一文搞定 Postman 接口自动化测试
    本文适合已经掌握 Postman 基本用法的读者,即对接口相关概念有一定了解、已经会使用 Postman 进行模拟请求等基本操作。工作环境与版本:Window7(64位)Postman(Chr......
  • 一文搞懂flex:0,1,auto,none
    本文参考了张鑫旭大大的文章,和阮大大的flex布局,部分图片和段落结构一致,仅作为个人总结,侵权删。flex属性介绍平时在项目中Flex布局的使用频率非常高,但是对于flex的几个......
  • 一文速学-玩转MySQL获取时间、格式转换各类操作方法详解
    本文正在参加「技术专题19期漫谈数据库技术」活动前言时间在数据库中经常作为时间索引,在数据入库和出库以及更新的时候都需要变化。在一些指标计算或者是提取某段时间的......
  • 一文了解 Go 标准库 math 和 rand 的常用函数
    耐心和持久胜过激烈和狂热。哈喽大家好,我是陈明勇,今天分享的内容是在Go标准库math和rand的常用函数。如果本文对你有帮助,不妨点个赞,如果你是Go语言初学者,不妨点个关......
  • 自定义Live2D插件配置并加载CDN数据
    修复博客问题的时候,发现加载​​Live2D​​的模型报了一堆错误。仔细看,是由于看板娘的动作文件出错了,而且居然是大小写的问题,想必windows服务器就不会出现这个问题,所以模......
  • 一文带你了解EiPaaS和EiPaaS的国际趋势
    摘要:EiPaaS(EnterpriseIntegrationPlatformasaService)是企业级的集成平台和服务。本文分享自华为云社区《初识EiPaaS和EiPaaS的国际趋势》,作者:华为云PaaS服务小智......
  • 一文聊透Apache Hudi的索引设计与应用
    Hudi索引在数据读和写的过程中都有应用。读的过程主要是查询引擎利用MetaDataTable使用索引进行DataSkipping以提高查找速度;写的过程主要应用在upsert写上,即利用索引查找......
  • 一文速览 Dubbo 3.0
    本文将带你快速了解Dubbo3的设计背景、总体架构与核心特性、与典型用户如阿里巴巴HSF2的关系等。也可以通过如下部分了解更多:小白用户,快速浏览Dubbo3核心特性:下......
  • 前置知识:一文上手pytorch
    目录前言Pytorch基础前言Transformers库建立在Pytorch框架之上(Tensorflow的版本功能并不完善),我们需要通过Pytorch的DataLoader类来加载数据、使用Pytorch的优化器对......