CDN加速静态文件访问

	CDN是Content Delivery Network的缩写,意思是内容分发网络。CDN的作用是把用户需要的内容分发到离用户近的地方,这样可以使用户
能够就近获取所需内容。
整个CDN系统(如图1-1所示)分为CDN源站和CDN节点,CDN源站提供CDN节点使用的数据源头,而CDN节点则部署在距离最终用户比较
近的地方,加速用户对站点的访问。
CDN其实就是一种网络缓存技术,能够把一些相对稳定的资源放到距离最终用户较近的机房,一方面可以节省整个广域网的带宽消耗,另外
一方面可以提升用户的访问速度,改进用户体验。我们一般把一些相对静态的文件(例如图片、视频、JS脚本、一些页面框架)放在CDN中。

图1-1

我们通过浏览器访问一个网站的过程大致如图1-2所示。
图1-2

(1)用户向浏览器提交要访问的域名。
(2)浏览器对域名进行解析,得到域名对应的IP地址。
(3)浏览器向所得的IP地址发送请求。
(4)浏览器根据返回的数据显示网页的内容。

而在有了CDN以后,用户通过浏览器访问网站的过程会产生一些变化。如图1-3

图1-3

(1)用户向浏览器提交要访问的域名。
(2)浏览器对域名进行解析,由于CDN对域名解析过程进行了调整,所以得到的是该域名对应的CNAME记录。
(3)对CNAME再次进行解析,得到实际IP地址。在这次的解析中,会使用全局负载均衡DNS解析,也就是我们需要返回
具体IP地址,需要根据地理位置信息以及所在的ISP来确定返回的结果,这个过程才能让身处不同地域、连接不同接入商的
用户得到最适合自己访问的CDN地址,才能做到就近访问,从而提升速度。
(4)得到实际的IP地址以后,向服务器发出访问请求。
(5)CDN会根据请求的内容是否在本地缓存进行不同处理:
1)如果存在,则直接返回结果。
2)如果不存在,则CDN请求源站,获取内容,然后再返回结果。

通过这个流程,我们可以看到CDN中的几个关键技术。

全局调度

全局调度是完成用户就近访问的第一步,我们需要根据用户地域、接入运营商以及CDN机房的负载情况去调度。前面两个调度因素需要一个
尽可能精准的IP地址库,这是正确调用的前提(误识别的IP地址到地理位置的对应可能会把东北的用户调度到华南的站点去),当然,做到
100%的精确是不现实的。IP地址库的维护是一个持续和变化的过程,并且调度的策略随着CDN机房的增加也会变化。例如,我们不可能在
所有城市都设置CDN机房,假设刚开始河南整个省份没有CDN机房,可能河南靠北的城市使用天津的CDN,同时河南靠南的城市使用湖北
的CDN会比较好,而如果后来在郑州市建设了CDN机房的话,那么原来的调度策略就会修改了。CDN的负载也是调度中的一个影响因素,
举例来说,如果一个CDN机房举例你的位置比较近,但是它的负载已经很高,响应很慢,那么你的请求送到距离稍远的CDN机房反而会更快。

缓存技术

	从上面的流程中我们看到,如果用户请求的内容不在CDN中的话,CDN会回到源站去加载内容,然后返回给用户。所以,如果CDN机房的请求
命中率不高的话,那么起到的加速效果也是相对有限的。
要提升命中率,就需要CDN机房中有尽可能全面的数据,这要求CDN机房的缓存容量要足够大,我们可以使用“内容+SSD+机械硬盘”的混合存
储方式来提升整体的缓存容量,并且我们做好冷热数据的交换,在提升命中率时也尽量降低缓存的响应时间。
此外,当CDN的Cache没有命中要回源加载数据时,合并同样数据的请求也是一个很重要的优化,这样可以减少重复的请求,降低源站的压力。
最后,新增、变更数据后的CDN预加载也是一个提升命中率的办法。也就是在没有请求进来时,CDN主动去加载数据,做好准备。当然这个主
动加载一般也需要源站有一个通知过来。

内容分发

	这里提到的内容分发主要是对内容全部在CDN上不用回源的数据的管理和分发,例如一些静态页面等。具体做法是在内容管理系统中进行编辑
修改后,通过分发系统分发到各个CDN的节点上。分发的效率以及对分发文件一致性、正确性的校验是需要关注的点。

带宽优化

	CDN提供了内容加速,很多请求和流量都压到了CDN上,那么如何能够比较有效地节省带宽会是一个很重要的事情,因为这直接关系到流量
成本。优化的思路是只返回必要的数据、用更好的压缩算法等。

在CDN的应用中,从传统意义上来讲,主要是把用户需要访问的内容放到离用户近的地方。可以发现大部分流量是从源站到CDN机房的流量,我们也可以利用CDN机房距离目标用户近的地点,让一些上传的工作从CDN接入,然后再从CDN传到源站
,这一方面可以提升用户的上传速度,另一方面也很好地利用了从CDN机房到源站的上行带宽。

参考书籍 :大型网站系统与Java中间件实践

CDN加速静态文件访问的更多相关文章

  1. CDN加速静态文件服务器的访问

    1.用于加速用户下载资源的速度. 简单来说,CDN相当于一个中间代理,原来我们需要请求某个网址比如www.baidu.com,请求会直接发送至百度的服务器上,假如请求者在新疆,但百度的服务器在北京,这 ...

  2. CDN存储和加速静态文件是什么回事(整理)(CDN是什么)

    CDN存储和加速静态文件是什么回事(整理)(CDN是什么) 一.总结 一句话总结: 内容分发网络:Content Delivery Network:依靠网络中的各个节点,就近发放静态资源. CDN的全 ...

  3. springMVC静态文件访问

        web.xml文件  <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xs ...

  4. NodeJS静态文件访问性能测试

    受益于JavaScript语言优秀特点,使NodeJS开发服务端应用很方便,配合NPM官方提供的大量第三方组件,让NodeJS更加如虎添翼.最近,需要使用NodeJS做一个服务端HTML5的游戏服务器 ...

  5. Nginx 优化静态文件访问

    简介 Web 开发中需要的静态文件有:CSS.JS.字体.图片,可以通过web框架进行访问,但是效率不是最优的. Nginx 对于处理静态文件的效率要远高于 Web 框架,因为可以使用 gzip 压缩 ...

  6. springMVC 静态文件 访问

    1. 新建web project 2. 导入所需jar包 3. 更改web.xml <?xml version="1.0" encoding="UTF-8" ...

  7. net core静态文件 访问除默认目录文件配置

    在我们项目的实际应用中,不光是需要访问默认静态文件夹 wwwroot ,还有可能要要去访问除默认目录以外的文件夹,接下来我们进行配置 1.在根目录创建一个文件夹,继续创建它的子文件夹Images,在I ...

  8. VUE打包好的文件部署让beego实现静态文件访问,如何用根目录来访问静态文件?

    最近的一个全栈项目,光伏云监控系统,后端使用beego框架,纯api,前端使用VUE2.0.项目地址:http://scada.ssechina.com:88/static 我把打包好的前端文件放到g ...

  9. 非常诡异的IIS下由配置文件加上svg的mime头导致整个网站的静态文件访问报错误

    调试了两天遇到一个非常诡异的问题 一个系统稳定运行了很多年,是用mvc5+WIN2008R2  + .NET 4.5 +IIS环境下运行,非常稳定,最近想迁移到一台新的服务器,为了少麻烦在阿里云上买了 ...

随机推荐

  1. sql server判断表存在

    在创建表.更改表结构.删除表或对表进行什么操作之前,一个比较严谨的做法是先判断该表是否已经存在. 在SQL Server中判断一个表是否存在,有两个方法,下面以diso表为例. 方法1 from sy ...

  2. SpringBoot2.0 整合 JWT 框架,解决Token跨域验证问题

    本文源码:GitHub·点这里 || GitEE·点这里 一.传统Session认证 1.认证过程 1.用户向服务器发送用户名和密码. 2.服务器验证后在当前对话(session)保存相关数据. 3. ...

  3. .NET Core 实现 腾讯云云解析简单客户端

    一.说明 腾讯云的.NET SDK虽然非常强大,但是对他的产品支持不是很完全,域名的云解析就没有SDK,所以自己写了一个,初衷是用来做动态DNS的,也准备接入多个云厂商,但是我自己本身仅仅只有腾讯云这 ...

  4. [灵魂拷问]MySQL面试高频100问(工程师方向)

    作者:呼延十 juejin.im/post/5d351303f265da1bd30596f9 前言 本文主要受众为开发人员,所以不涉及到MySQL的服务部署等操作,且内容较多,大家准备好耐心和瓜子矿泉 ...

  5. ZooKeeper(六):watch机制的原理与实现

    因为ZK有watch机制,可以随时发现一些数据的变化,从而达到数据的及时性. ZK的所有读操作都可以设置watch监视点: getData, getChildren, exists. 写操作则是不能设 ...

  6. JVM发生full gc的情景有哪些

    除直接调用System.gc外,触发Full GC执行的情况有如下四种.1. 旧生代空间不足 旧生代空间只有在新生代对象转入及创建为大对象.大数组时才会出现不足的现象,当执行Full GC后空间仍然不 ...

  7. SpringCloud(一):了解SpringCloud

    一.SpringCloud 简介 首先看看SpringCloud官方的介绍: Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智能路由, ...

  8. 地图SDK全面升级 – 数十项新功能及优化等你来体验

    腾讯位置服务地图SDK是一套提供多种地理位置服务的应用程序接口.通过调用该接口,开发者可以在自己的应用中加入地图相关的功能(如地图展示.标注.绘制图形等),轻松访问腾讯地图服务和数据,构建功能丰富.交 ...

  9. Android项目模块化/组件化开发(非原创)

    文章大纲 一.项目模块化初步介绍二.项目模块化的两种模式与比较三.大型项目模块化的演进四.项目模块化总结五.参考文章   一.项目模块化初步介绍 1. 前言 在Android开发中,随着项目的不断扩展 ...

  10. Nginx四层负载均衡概述

    目录 Nginx四层负载均衡概述 什么是负载均衡 负载均衡应用场景 四层,七层集群架构 四层负载均衡总结 Nginx如何配置四层负载均衡 nginx四层负载均衡端口转发 Nginx四层负载均衡概述 什 ...