CDN缓存

news/2024/7/24 12:36:33 标签: CDN, 服务器, 缓存

文章转载自:https://blog.csdn.net/lzj3462144/article/details/90270755

 最近项目在做优化,计划将项目中高频接口放入CDN,正好也趁此学习下。

 

一,CDN是什么?

 CDN的全称是Content Delivery Network,即内容分发网络。CDN是构建在网络之上内容分发网络,依靠在各地部署的缓存服务器,通过中心平台的负载均衡/内容分发/调度等功能模块,使用户可以就近获取所需要的内容,从而达到降低网络用塞,提高系统访问速度的技术。CDN的关键技术是内容存储和分发技术。

CDN的思路是:通过在网络各处放节点服务器,这个服务器构成在现有网络基础之上的一层智能虚拟网络,CDN能够将用户的请求分发到距离用户最近的服务器节点上,提高用户访问速度。比如:100台CDN服务器分布在全国各地,如果从广东访问,会从最近的节点返回资源,这就是核心。

 

二,为什么要使用CDN

1.为了实现跨运营商,跨地域的全网的覆盖

阿里云在国内有500+节点,在国外,也有很多节点保证了网络的顺畅的运行。

2.加快系统的响应速度,更快的响应用户的请求

 

三,使用前后网络请求对比

1.传统访问步骤

浏览器输入域名——>解析服务器获取对应iP地址——>向该iP对应服务器发送访问请求——>返回给前端渲染页面——>展示给用户

2.使用CDN之后的访问步骤

和传统不同,CDN网络是在用户和服务器之间增加了一层缓存层,将用户的请求引导到最优的缓存节点而不是服务器源站,从而加块访问速度。

完整的CDN工作流程

3.访问流程详解

(1)当用户点击网站页面上的内容URL,经过本地DNS系统解析,DNS系统会最终将域名的解析权交给CNAME指向的CDN专用DNS服务器

(2)CDN的DNS服务器CDN的全局负载均衡设备IP地址返回用户。

(3)用户向CDN的全局负载均衡设备发起内容URL访问请求。

(4)CDN全局负载均衡设备根据用户IP地址,以及用户请求的内容URL,选择一台用户所属区域的区域负载均衡设备,告诉用户向这台设备发起请求。

(5)区域负载均衡设备会为用户选择一台合适的缓存服务器提供服务,选择的依据包括:根据用户IP地址,判断哪一台服务器距用户最近;根据用户所请求的URL中携带的内容名称,判断哪一台服务器上有用户所需内容;查询各个服务器当前的负载情况,判断哪一台服务器尚有服务能力。基于以上这些条件的综合分析之后,区域负载均衡设备会向全局负载均衡设备返回一台缓存服务器的IP地址。

(6)全局负载均衡设备把服务器的IP地址返回给用户。

(7)用户向缓存服务器发起请求,缓存服务器响应用户请求,将用户所需内容传送到用户终端。如果这台缓存服务器上并没有用户想要的内容,而区域均衡设备依然将它分配给了用户,那么这台服务器就要向它的上一级缓存服务器请求内容,直至追溯到网站的源服务器将内容拉到本地。

本部分内容,参考链接:https://www.zhihu.com/question/36514327/answer/184247188

类比:传统网站访问类似于淘宝购物,而CDN类似于京东购物。淘宝供应商中心是一个,从一个地方发货,发向全国各地;而京东的自营的电子产品,它会在全国各地建立各种仓库,然后根据下单的地点,寻找距离我们最近的仓库,从而降低送货的时间。

 

四,项目中主要使用哪些功能

1.加速静态资源

网站中有大量的css,html,js等文件,可以将这些静态内容推送到CDN

2.大文件的下载

软件下载,视频点播等存储网站。

3.部分与用户无关的高频接口加速,在高并发情况下提升接口响应时间

 

五,CDN关键技术

1.负载均衡

负载均衡是整个CDN的核心,负载均衡和准确性和效率性直接决定了CDN的效率和性能。

负载均衡将网络的流量尽可能均匀的分布在能完成相同任务的服务器或者网络节点上进行处理,避免出现网络分配忙闲不均的情况,这样可以提高网络流量,也可以提高网络性能。

2.内容存储技术

cdn需要考虑两个方面的内容存储技术,一个是内容源的存储,一个是内容在cache节点中的分布式存储,由于内容的规模和吞吐量比较大,因此需要海量存 储架构来解决。

3.内容分发技术

内容分发技术通过构建网络,将链接到IP网络上的内容,快速的传输到用户终端。

CDN主要由初始服务器,分布于各个节点的缓存服务器,重定向DNS服务器和内容交换服务器

(1)初始服务器负责生成服务器信息内容

(2)缓存服务器负责存储初始服务器的部分或者全部的信息,距离用户近。

(3)重定向服务器 负责向用户提供最近的服务器iP地址,减轻骨干网络压力。

(4)内容交换服务器 负责完成服务器之间的负载均衡功能

 

六,常见名词解析

 1.源站

CDN之前的客户真正的服务器

2.CNAME域名

3.边缘节点

也成为CDN节点,Cache节点,指的是距离最终用户接入具有较少的中间节点的网络节点,以此来提高网站访问的速度。

4.CDN加速是对网络所在服务器加速,还是域名加速呢?

CDN只是对网络的某一个具体的域名加速,如果同一个网网站由多个域名,则访客访问加入CDN的域名获得加速效果,访问未加速CDN的域名,或者直接访问IP地址,无法获取CDN的效果。

5.CDN网站更新之后,经常会看到的是旧网页?

CDN采取的是各个节点缓存的机制,网站的静态网页和图片修改之后,如果CDN缓存尚未做更改,那么看到的还是旧的网页。项目中经常遇到这个问题,为了解决这个问题。CDN管理面板中提供了URL推送服务,手动来通知CDN各个节点刷新自己的缓存。在URL的推送地址栏中,输入具体的url地址或者目录,刷新缓存即可生效。

 

七,参考内容

CDN百度百科

知乎讨论

使用CDN之后的网站访问过程变化

小结

      大体上了解了CDN内容和原理,后续还会在使用过程中深入理解。处于初学阶段,若有出入,请多多指教?!


http://www.niftyadmin.cn/n/1300988.html

相关文章

js for终止循环 跳出多层循环

今天写带代码的时候遇到一段代码&#xff0c;需要终止运行for&#xff0c;通过遍历json数据实现判断 <script> var Tid"55555"; var jb51cp [ {id:66666,Cpurl:"https://baidu.com"}, {id:55555,Cpurl:"https://www.jb51.net"} ];for(va…

DDOS 攻击的防范教程

文章转载自&#xff1a;http://www.ruanyifeng.com/blog/2018/06/ddos.html 一个多月前&#xff0c;我的个人网站遭受 DDOS 攻击&#xff0c;下线了50多个小时。这篇文章就来谈谈&#xff0c;如何应对这种攻击。 需要说明的是&#xff0c;我对 DDOS 并不精通&#xff0c;从没…

阿里云服务器可不可以转海外服务器

文庄转载自&#xff1a;https://blog.csdn.net/qq_23009105/article/details/88664025 最近一台国内节点的阿里云ECS服务器因为备案问题&#xff0c;暂时不能访问。但是服务器上的网站又必须要访问&#xff0c;不可能等待备案长达十多天的周期。 所以咨询阿里云ECS服务器客服…

CocosCretor解决premultipliedAlpha黑边问题

在官方文档中的说明&#xff1a; premultipliedAlpha 对于是否启动贴图预乘&#xff1a; 当图片的透明区域出现色块时&#xff0c;需要关闭该选项&#xff1b; 当图片的半透明区域颜色变黑时&#xff0c;需要启用该选项。 之前在项目中导出的spine有黑边问题&#xff08;也…

vue单页缓存存在的问题及解决方案

1.css同名覆盖,解决方法&#xff1a;父组件加上scoped <style lang"scss" scoped>import ./unbind.scss </style>子组件同名样式加上deep /deep/ .tabs-row {.items-wrp{padding-left: .34rem;}.item {margin:0 .12rem .16rem 0;} }2.事件全局绑定 绑…

CocosCreator Java传参数到JS

最近正在接GooglePlay内购&#xff0c;在传参数回CocosCreator的环境的时候&#xff0c;没有调用到JS的方法。 其中错误的写法是: app.runOnGLThread(new Runnable() {Overridepublic void run() {Cocos2dxJavascriptJavaBridge.evalString("buyDiamond("purchase.…

COM与DLL的区别

这阵子在想一个需要利用com组件的小程序怎么做&#xff0c;突然想起上次去面试的时候考官问过autocad开发时为什么要利用com&#xff0c;而不采用一般的dll呢&#xff1f; 到google上查了一下&#xff0c;许多人也问了一样的问题&#xff1a;&#xff09; 用com来写程序…

CocosCreator JS追踪堆栈信息

在开发过程中&#xff0c;可能有这样的需求&#xff1a;即使在没有报错的情况&#xff0c;也需要查看该函数的堆栈调用信息。 对于这样的需求&#xff0c;我们可以使用JS原生的console.trace来实现。 具体代码&#xff1a; export let TraceArr [];console.trace function…