CDN图解(秒懂 - 史上最全)

文章很长,并且持续更新,建议收藏起来,慢慢读! Java 高并发 发烧友社群:疯狂创客圈(总入口) 奉上如下珍贵的学习资源:html


推荐:入大厂 、作架构、大力提高Java 内功 的 精彩博文

入大厂 、作架构、大力提高Java 内功 必备的精彩博文 2021 秋招涨薪1W + 必备的精彩博文
1:Redis 分布式锁 (图解-秒懂-史上最全) 2:Zookeeper 分布式锁 (图解-秒懂-史上最全)
3: Redis与MySQL双写一致性如何保证? (面试必备) 4: 面试必备:秒杀超卖 解决方案 (史上最全)
5:面试必备之:Reactor模式 6: 10分钟看懂, Java NIO 底层原理
7:TCP/IP(图解+秒懂+史上最全) 8:Feign原理 (图解)
9:DNS图解(秒懂 + 史上最全 + 高薪必备) 10:CDN图解(秒懂 + 史上最全 + 高薪必备)
10: 分布式事务( 图解 + 史上最全 + 吐血推荐 )

Java 面试题 30个专题 , 史上最全 , 面试必刷 阿里、京东、美团... 随意挑、横着走!!!
1: JVM面试题(史上最强、持续更新、吐血推荐) 2:Java基础面试题(史上最全、持续更新、吐血推荐
3:架构设计面试题 (史上最全、持续更新、吐血推荐) 4:设计模式面试题 (史上最全、持续更新、吐血推荐)
1七、分布式事务面试题 (史上最全、持续更新、吐血推荐) 一致性协议 (史上最全)
2九、多线程面试题(史上最全) 30、HR面经,过五关斩六将后,当心阴沟翻船!
9.网络协议面试题(史上最全、持续更新、吐血推荐) 更多专题, 请参见【 疯狂创客圈 高并发 总目录

SpringCloud 精彩博文
nacos 实战(史上最全) sentinel (史上最全+入门教程)
SpringCloud gateway (史上最全) 更多专题, 请参见【 疯狂创客圈 高并发 总目录

前言:java

CDN 实现了“网络加速” 的重要技术之一,本文为你们完全介绍清楚 CDN的核心原理和使用。node

为何要有网络加速

互联网从逻辑上看是一张大网,但其实是由许多小网络组成的,这其中就有小网络“互连互通”的问题,典型的就是各个电信运营商的网络,好比国内的电信、联通、移动三你们。
在这里插入图片描述
这些小网络内部的沟通很顺畅,但网络之间却只有不多的联通点。若是你在 A 网络,而网 站在 C 网络,那么就必须“跨网”传输,和成千上万的其余用户一块儿去“挤”链接点 的“独木桥”。而带宽终究是有限的,能抢到多少只能看你的运气。web

另外,网络中还存在许多的路由器、网关,数据每通过一个节点,都要停顿一下,在二层、 三层解析转发,这也会消耗必定的时间,带来延迟。面试

最终结果就是,若是仅用现有的 HTTP 传输方式,大多数网站都会访问速度缓慢、用户体 验糟糕。数据库

放到全球来看,物理距离很是大,你在北京,访问旧金山的网站,要跨越半个地球,地理位置距离远、运营商网络、路由转发的影响就会成倍增长。编程

什么是CDN?

CDN (全称 Content Delivery Network),即内容分发网络。后端

CDN构建在现有网络基础之上的智能虚拟网络,依靠部署在各地的边缘服务器,经过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,下降网络拥塞,提升用户访问响应速度和命中率。设计模式

CDN 的关键技术主要有内容存储和分发技术,简单来说,CDN就是根据用户位置分配最近的资源,因而,用户在上网的时候不用直接访问源站,而是访问离他“最近的”一个 CDN 节点(也叫作“边缘节点”、edge node),其实就是缓存了源站内容的代理服务器。跨域

CDN的分发系统架构

全球有这么多的数据中心,不管在哪里上网,临近不远的地方基本上都有数据中心。是否是能够在这些数据中内心部署几台机器,造成一个缓存的集群来缓存部分数据,那么用户访问数据的时候,就能够就近访问了呢?

固然是能够的。这些分布在各个地方的各个数据中心的节点,术语叫“边缘节点”(edge node)。

因为边缘节点数目比较多,可是每一个集群规模比较小,不可能缓存下来全部东西,于是可能没法命中, 这样就会在边缘节点之上。有区域节点,规模就要更大,缓存的数据会更多,命中的几率也就更大。在区域节点之上是中心节点,规模更大,缓存数据更多。若是还不命中,就只好回源网站访问了。
在这里插入图片描述
这就是CDN的分发系统的架构。CDN系统的缓存,也是一层一层的,能不访问后端真正的源,就不打扰它。这也是电商网站物流系统的思路,北京局找不到,找华北局,华北局找不到,再找北方局。

CDN的特色

1.CDN 的最核心原则是“就近访问”,若是用户可以在本地几十千米的距离以内获取到数据,那么时延就基本上变成 0 了。因此 CDN 厂商 投入了大笔资金,在全国、乃至全球的各个大枢纽城市都创建了机房,部署了大量拥有高存储高带宽的节点,构建了一个专用网络

2.有了这个高速专用网,CDN就要分发源站的内容,利用缓存代理技术,把源站内容逐级缓存到网络的每个节点上,这样用户上网就不用直接访问源站,而是访问离他“最近的”一个 CDN 节点,其实就是缓存了源站内容的代理服务器,这样一来就省去了“长途跋涉”的时间成本,实现了“网络加速”。

3.那么,CDN 都能加速什么样的“内容”呢? 静态资源,而不是动态资源。

在 CDN 领域里,“内容”其实就是 HTTP 协议里的“静态资源”,好比超文本、图片、视频、应用程序安装包等等。

名词解释:“静态资源”和“动态资源”: 所谓的“静态资源”是指数据内容“静态不变”,任什么时候候来访问都是同样的,好比图片、音频。所谓的“动态资源”是指数据内容是“动态变化”的,也就是由后台服务计算生成的,每次访问都不同,好比商品的库存、微博的粉丝数等。

CDN的原理

内容分发网络(Content Delivery Network, CDN)其目的是经过在现有的Internet中增长一层新的网络架构,将网站的内容发布到最接近用户的网络"边缘",使用户能够就近取得所需的内容,解决Internet网络拥塞情况,提升用户访问网站的响应速度。

从技术上全面解决因为网络带宽小、用户访问量大、网点分布不均等缘由所形成的用户访问网站响应速度慢的问题。

img

CDN网络的组成

一个CDN网络主要由如下几部分组成:内容缓存设备、内容分发管理设备、本地负载均衡交换机、GSLB设备和CDN管理系统,其网络结构以下图所示:

img

其中:

内容缓存设备Cache

用于缓存内容实体和对缓存内容进行组织和管理。当有用户访问该客户内容时,直接由各缓存服务器响应用户的请求。

内容分发管理设备

主要负责核心Web服务器内容到CDN网络内缓存设备的内容推送、删除、校验以及内容的管理、同步。

GSLB设备

则实现CDN全网各缓存节点之间的资源负载均衡,它与各节点的SLB设备保持通讯,搜集各节点缓存设备的健康状态、性能、负载等,自动将用户指引到位于其地理区域中的最近服务器或者引导用户离开拥挤的网络和服务器。还能够经过使用多站点的内容和服务来提升容错性和可用性,防止因本地网或区域网络中断、断电或天然灾害而致使的故障。

不用CDN技术时,使用GSLB设备能够为用户选择最合适的服务器,但受Web服务器的负荷和传输距离等因素的影响,响应速度依然常常不能知足用户的需求。这一问题的解决方案就是在传输网络上利用缓存技术使得Web服务数据流可以就近访问。内容分发网络(CDN)正是这种思想的一个实现,CDN使用GSLB设备将用户引导到最合适的缓存节点(距离近,负载低),使得用户在访问静态内容时得到更好的体验。

CDN管理系统

实现对全网设备的管理,对系统的配置。它不只能对系统中的各个设备进行实时监控,对各类故障产生相应的告警,还能实时观测到系统中总的流量以及各节点的流量,并保存在系统的数据库中,做为统计分析的基础数据,并对日志文件进行管理、报告,做为计费的基础数据。

CDN工做流程

CDN网络结合了GSLB与缓存技术,其工做流程以下图所示:

img

用户访问某个站点的内容时,若该站点使用了CDN网络,则在用户会在域名解析时得到CDN网络GSLB设备的IP地址。GSLB设备根据其预设的选择策略(如,地理区域、用户时间等)为用户选择最合适的内容缓存节点,而且使用某种方式(如,基于DNS、基于HTTP重定向、基于IP欺骗的方式等)导引用户访问所选的内容缓存节点。

用户继续向缓存节点发出请求,若缓存中包含请求的内容,则直接返回给用户,不然从核心Web服务器中获取该内容,缓存后返回给用户。这样当用户再次访问相同内容或其余用户访问相同内容时,能够直接从缓存中读取,提升了效率。

在没有应用CDN时,咱们使用域名访问某一个站点时的路径为

用户提交域名→浏览器对域名进行解释→DNS 解析获得目的主机的IP地址→根据IP地址访问发出请求→获得请求数据并回复

应用CDN后,DNS 返回的再也不是 IP 地址,而是一个CNAME(Canonical Name ) 别名记录,指向 CDN的全局负载均衡 GSLB, GSLB实际上在域名解析的过程当中承担了中间人(或者说代理)的角色,这是CDN实现的关键

CDN的全局负载均衡 GSLB

因为没有返回IP地址,因而本地DNS会向负载均衡系统再发送请求 ,则进入到CDN的全局负载均衡系统GSLB 进行智能调度:

  • 看用户的 IP 地址,查表得知地理位置,找相对最近的边缘节点

  • 看用户所在的运营商网络,找相同网络的边缘节点

  • 检查边缘节点的负载状况,找负载较轻的节点

  • 其余,好比节点的“健康情况”、服务能力、带宽、响应时间等

结合上面的因素,获得最合适的边缘节点,而后把这个节点返回给用户,用户就可以就近访问CDN的缓存代理

总体流程以下图:

img

图解:CDN工做流程的一个示例

还记得咱们讲过的基于DNS的全局负载均衡吗? 若是不了解,请参阅下文:

DNS图解(秒懂+史上最全)

这个负载均衡主要用来选择一个就近的一样运营商的服务器进行访问。你会发现,CDN分发网络也是一个分布在多个区域、多个运营商的分布式系统,也能够用相同的思路选择最合适的边缘节点。

下图,是CDN工做流程的一个示例:

在这里插入图片描述

在没有CDN的状况下,用户向浏览器输入www.web.com这个域名,客户端访问本地DNS服务器的时候,若是本地DNS服务器有缓存,则返回网站的地址;若是没有,递归查询到网站的权威DNS服务器,这个权威DNS服务器是负责web.com的,它会返回网站的IP地址。

本地DNS服务器缓存下IP 地址,将IP地址返回,而后客户端直接访问这个IP地址,就访问到了这个网站。

然而有了 CDN以后,状况发生了变化

在web.com这个权威DNS服务器上,会设置一个CNAME别名,指向另一个域名www.web.cdn.com,返回给本地DNS服务器。

当本地DNS服务器拿到这个新的域名时,须要继续解析这个新的域名。这个时候,再访问的就不是 web.com 的权威DNS服务器了,而是web.cdn.com的权威DNS服务器,这是CDN本身的权威 DNS 服务器。在这个服务器上,仍是会设置一个CNAME,指向另一个域名,也即CDN网络的全局负载均衡器。

接下来,本地DNS服务器去请求CDN的全局负载均衡器解析域名,全局负载均衡器会为用户选择一台合适的缓存服务器提供服务,选择的依据包括:

  • 根据用户IP地址,判断哪一台服务器距用户最近;
  • 用户所处的运营商;
  • 根据用户所请求的URL中携带的内容名称,判断哪一台服务器上有用户所需的内容;
  • 查询各个服务器当前的负载状况,判断哪一台服务器尚有服务能力。

基于以上这些条件,进行综合分析以后,全局负载均衡器会返回一台缓存服务器的IP地址。

本地DNS服务器缓存这个IP地址,而后将IP返回给客户端,客户端去访问这个边缘节点,下载资源。 缓存服务器响应用户请求,将用户所需内容传送到用户终端。若是这台缓存服务器上并无用户想要的内容,那么这台服务器就要向它的上一级缓存服务器请求内容,直至追溯到网站的源服务器将内容拉到本地。

缓存代理

缓存系统是 CDN的另外一个关键组成部分,缓存系统会有选择地缓存那些最经常使用的那些资源

其中有两个衡量CDN服务质量的指标:

  • 回源率:缓存里没有,必须用代理的方式回源站取,回源次数与全部访问次数之比

缓存系统也能够划分出层次,分红一级缓存节点和二级缓存节点。一级缓存配置高一些,直连源站,二级缓存配置低一些,直连用户
回源的时候二级缓存只找一级缓存,一级缓存没有才回源站,能够有效地减小真正的回源

  • 命中率:用户访问的资源刚好在缓存系统里,能够直接返回给用户,命中次数与全部访问次数之比

如今的商业 CDN命中率都在 90% 以上,至关于把源站的服务能力放大了 10 倍以上

腾讯云cdn加速操做实战

以腾讯云为例说明如何部署cdn。

即便是再小的站,也要有一颗成长为大流量网站的雄心,正所谓“法乎其上,得乎其中”,网站流量要大,就须要有良好的体验,而打开速度快是用户体验最重要的指标(没有之一),现代人的耐性愈来愈差,若是1秒内还不能打开网站,不少人就直接离开了。

因为地域的限制,网络传输须要必定时间,对于小网站来讲,不可能在各大节点部署服务器。此时,各大厂提供的cdn服务就派上用场了。咱们能够将静态文件放到cdn上,用户访问网站时,cdn会智能分配最近的节点返回静态文件,减轻咱们服务器压力的同时,也大大加快了网站响应速度。并且各大厂每个月都有免费的cdn流量额度,我的网站基本够用了。

静态与动态内容用不一样的域名区分

以网站zhiqiexing.com为例:

  • 动态内容由主域名www.zhiqiexing.com提供,
  • 而静态内容为code.zhiqiexing.com提供
  • 动态内容实时从服务器获取数据,静态内容就能够存放到cdn,实时更新便可

cdn配置

进入cdn控制台,按指引添加域名,提交后会分配一个cdn加速域名,必须将咱们的域名用cname解析到分配的cdn域名,提交后部署大概五分钟便可

因为是不一样的域名,可能会出现跨域问题,须要在cdn配置中将咱们的域名加入到容许的列表

在这里插入图片描述

在缓存配置中能够设置缓存时间

在这里插入图片描述

须要手动刷新时,能够指定url进行刷新

在这里插入图片描述

参考文献

https://blog.csdn.net/weixin_44475093/article/details/117095143

https://blog.csdn.net/HZ___ZH/article/details/114660370

https://blog.csdn.net/weixin_44475093/article/details/117095143

https://blog.csdn.net/HZ___ZH/article/details/114660370

https://juejin.cn/post/6844903890706661389#heading-5

https://blog.csdn.net/lxx309707872/article/details/109078783

https://www.jianshu.com/p/ba104e941490

https://blog.csdn.net/aha_jasper/article/details/105575484

https://blog.csdn.net/weixin_44475093/article/details/117095143

相关文章
相关标签/搜索