CDN 内容分发网络

2023-10-31


第一步,HTML的文件引用:
HTML的文件头(也有文件中,文件尾)那边常有其他文件引用,比如CSS以及JS的引用。

就以bootstrap常用的引用来举个栗子
你常见的引用可能会是这样的:
<head>
    <title>Mushroom</title> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge,Chrome=1" /> <meta http-equiv="X-UA-Compatible" content="IE=9" /> <!-- 引入 Bootstrap --> <link href="/css/bootstrap.min.css" rel="stylesheet"> <!-- jQuery (Bootstrap 的 JavaScript 插件需要引入 jQuery) --> <script src="/js/jquery.min.js"></script> <!-- 包括所有已编译的插件 --> <script src="/js/bootstrap.min.js"></script> </head> 
这之中,<script src="/js/bootstrap.min.js"></script> 这段就是外部脚本文件的一个链接,当前的这种链接是相对URL,指向站点内的文件,即你本项目里对应路径下面放置的文件。可以在 HTML <script> 标签的 src 属性 查看这个标签的具体属性。
属性值
值 描述 
URL 外部脚本的 URL。可能的值有:

•绝对 URL - 指向其他站点(比如 src="www.example.com/example.js")
•相对 URL - 指向站点内的文件(比如 src="/scripts/example.js")
 
通过查看可以得知,URL的引用有两种方式,绝对和相对,绝对的方式就是直接引用其他站点的js地址,比如我把上方的引用改为
<script src="http://apps.bdimg.com/libs/bootstrap/3.3.0/js/bootstrap.min.js"></script> 

这样即是引用其他站点的js。
CSS文件的引用与此类似:HTML <link> 标签的 href 属性
图片以及其他文件的引用也类似,不赘述。

第二步,系统的资源引用
在一个网站项目中,页面里经常会有许多js以及css的引用,接触过开发项目的一般都会了解,大部分界面里的脚本引用并不是像第一步里的那么精简,如果是直接引用项目内文件的话,他们可能是这样的:
<SCRIPT src="/iforums/templates/default/js/common.js" type=text/javascript></SCRIPT>
<SCRIPT src="/iforums/templates/default/js/ajax.js" type=text/javascript></SCRIPT>
<SCRIPT type=text/javascript src="/iforums/ueditor/third-party/jquery-1.10.2.min.js"></SCRIPT>
<SCRIPT type=text/javascript src="/iforums/ueditor/ueditor.config.js"></SCRIPT>
<SCRIPT type=text/javascript src="/iforums/ueditor/ueditor.parse.js"></SCRIPT>
<SCRIPT type=text/javascript src="/iforums/ueditor/ueditor.all.js"></SCRIPT>

可能甚至引用的更多,这样将资源文件与业务代码一锅炖的方式适用于小型的,应用服务器压力并不是太大的系统(并发、带宽、存储空间、资源等等)。这种方式的优点是开发省力,发布省力,对服务器要求小,省钱,没有具体公网接入需求。许多小型,内部使用型的网站系统往往采取这种形式放置资源文件。

第三步,系统访问量变高了,速度变慢了怎么办
怎么办?优化系统部署呗。
怎么优化?优化方式有很多,读写分离,负载均衡,这方面的东西可以讲上三天三夜。具体到本问题的范畴内,那就是 资源服务器与应用服务器的分离。粗暴的理解方式就是,就是 应用安在应用服务器(一台或者是集群),资源部署在资源服务器(单台或者是集群),这时候,js以及css的引用就需要更改为绝对URL,指向对应的资源服务器。
比如知乎的引用:
<link rel="apple-touch-icon-precomposed" href="http://static.zhihu.com/static/img/ios/zhihu(57px).png" /> <link rel="apple-touch-icon-precomposed" href="http://static.zhihu.com/static/img/ios/zhihu(72px).png" sizes="72x72" /> <link rel="apple-touch-icon-precomposed" href="http://static.zhihu.com/static/img/ios/zhihu(76px).png" sizes="76x76" /> <link rel="apple-touch-icon-precomposed" href="http://static.zhihu.com/static/img/ios/zhihu(114px).png" sizes="114x114" /> <link rel="apple-touch-icon-precomposed" href="http://static.zhihu.com/static/img/ios/zhihu(120px).png" sizes="120x120" /> <link rel="apple-touch-icon-precomposed" href="http://static.zhihu.com/static/img/ios/zhihu(152px).png" sizes="152x152" /> <script src="http://static.zhihu.com/static/revved/js/-/vendor.min.5a2082ff.js"></script> <script src="http://static.zhihu.com/static/revved/js/-/closure/app_core.fb4023ac.js"></script> <script src="http://static.zhihu.com/static/revved/js/-/closure/sign.e0ca7b10.js"></script> <script src="http://static.zhihu.com/static/revved/js/-/closure/app.9eaaec15.js"></script> <script src="http://static.zhihu.com/static/revved/js/-/closure/rich_text_editor.3a07c473.js"></script> 

有兴趣的话,你可以打开这个链接看看是什么页面:http://static.zhihu.com/
也可以打开这个看看:http://static.zhihu.com/static

第四步,网络方面的优化
网站的访问速度,只基于一点,那就是页面包含的内容传输到用户电脑的速度,服务器搭的再好再完美,如果用户到服务器的链路之间有一段比较缓慢的话,整体速度也会被拉的十分差劲。
想象一下,你给公司做了个运行于公司内网的网站,一切运行良好,分布式部署也已搭建完毕,一切都很完美。
后来,你公司运营良好,开了一个十分遥远的分公司(不要问为什么遥远,再问自绝经脉),你们的内网也同时连了过去(对,就是那种很直接的搭了几条网线就把两个局域网连成一个局域网的黑科技)。但是因为太远了线节点太多了,分公司访问公司的系统十分缓慢,这时候你就愁啊,这可咋办?那不行就在分公司那边部署一套内容缓存好了,内容进行同步,这样至少分公司的网页访问速度能提升很多,你也可以立功升职加薪了。
紧接着,因为你的出色表现,你们公司扩展十分厉害,在全国各地都建立了分公司,你又开始愁了,这不能每个分公司都搭一套啊,累得慌啊。思来想去,那就华东一套华北一套华南一套东北一套这样分吧,然后搭一些分发服务器,接入访问地址,然后跳转到就近的内容缓存服务器进行内容读取,OK,又到了升职加薪的时刻了~
对,到这里,你已经完成了一套简易CDN的建设。

第五步,CDN是什么?
你的搭建只是基于你公司的大型局域网,而现行的流行CDN则是基于地球搭建的超大型局域网--因特网。它的好处是什么呢?
比如你这么写:
<!-- 引入 Bootstrap -->
    <link href="http://apps.bdimg.com/libs/bootstrap/3.3.0/css/bootstrap.min.css" rel="stylesheet"> <!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries --> <!--[if lt IE 9]>  <script src="http://apps.bdimg.com/libs/html5shiv/3.7/html5shiv.min.js"></script>  <script src="http://apps.bdimg.com/libs/respond.js/1.4.2/respond.min.js"></script>  <![endif]--> <!-- jQuery (Bootstrap 的 JavaScript 插件需要引入 jQuery) --> <script src="http://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script> <!-- 包括所有已编译的插件 --> <script src="http://apps.bdimg.com/libs/bootstrap/3.3.0/js/bootstrap.min.js"></script> 

上面的地址是百度CDN的链接地址。
那么用户在读取网页内容的时候,就会去百度的就近服务器上掏这些js和css,而不是在你的服务器里捞。
好处呢,第一,一般来说,访问速度有保障,稳定性也有保障;第二,你可以省下资源服务器的一部分资源负担,节省空间节省流量,艰苦创业,能省则省啊。

这时候你会问了,为什么只有js和css呢?其他的图片啊html内容啊不能放进CDN吗?
能啊为啥不能,CDN服务就靠这赚钱呢为啥不能,非广告非广告非广告,你看:
CDN-Content Delivery Network-百度开放云
同类产品还有阿里云等等等等。。

 
 
 

CDN主要功能是在不同的地点缓存内容,通过负载均衡技术,将用户的请求定向到最合适的缓存服务器上去获取内容,比如说,是北京的用户,我们让他访问北京的节点,深圳的用户,我们让他访问深圳的节点。通过就近访问,加速用户对网站的访问。解决Internet网络拥堵状况,提高用户访问网络的响应速度。



简单介绍下CDN与传统网站访问的区别:

传统访问访问:&amp;lt;img src="https://pic2.zhimg.com/f9708de32d641358e47edc96307775d5_b.png" data-rawwidth="433" data-rawheight="444" class="origin_image zh-lightbox-thumb" width="433" data-original="https://pic2.zhimg.com/f9708de32d641358e47edc96307775d5_r.png"&amp;gt;

使用了CDN的网站访问:
&amp;lt;img src="https://pic4.zhimg.com/79c1abc468349073fb433d0949423717_b.png" data-rawwidth="824" data-rawheight="567" class="origin_image zh-lightbox-thumb" width="824" data-original="https://pic4.zhimg.com/79c1abc468349073fb433d0949423717_r.png"&amp;gt;

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


完整的CDN工作流程:

&amp;lt;img src="https://pic4.zhimg.com/049b124feb55100ff2f147b768ad4c8b_b.png" data-rawwidth="400" data-rawheight="423" class="content_image" width="400"&amp;gt;

总结一下CDN的工作原理:通过权威DNS服务器来实现最优节点的选择,通过缓存来减少源站的压力。


CDN应用场景:


静态网页

图片小文件、博客


大文件下载

软件下载、视频点播或图片存储网站


动态加速

直播网站


应用加速

手机APP


最后看一下使用了CDN后的实际访问效果

&amp;lt;img src="https://pic4.zhimg.com/2e6b0715d5759589e79664678c157963_b.png" data-rawwidth="870" data-rawheight="364" class="origin_image zh-lightbox-thumb" width="870" data-original="https://pic4.zhimg.com/2e6b0715d5759589e79664678c157963_r.png"&amp;gt;

上图数据来源于腾讯云CDN,对比用户的网站使用了CDN和没有使用CDN的效果,帮助大家更形象的理解CDN解决什么问题。

不用CDN时,访问请求导源站用的时间是1.27S。

而使用了腾讯云CDN后,会将这个访问时间缩短为0.29s,访问速度提高了5倍,而且可用性也可以得到很好的提升,原因是CDN的网络的链路质量都比较好。

转载于:https://www.cnblogs.com/chengdabelief/p/6950806.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CDN 内容分发网络 的相关文章

随机推荐

  • 代理IP与Socks5代理

    一代理IP 多地区数据采集的智能引擎 多地区市场了解 代理IP允许爬虫模拟多个地区的IP地址 实现对不同市场的数据采集 这为跨界电商深入了解不同地区需求 趋势提供了数据基础 规避反爬虫策略 许多网站采用反爬虫技术 限制频繁访问 代理IP通过
  • JavaWeb的Servlet的两种配置

    Servlet接口 要成为一个Servlet 需要实现Servlet接口 为了方便 可以继承HttpServlet HttpServlet实现了Servlet接口 Servlet生命周期 在Tomcat中Servlet是单例的 Servle
  • 如何使用Docker创建自定义网络

    目录 网络模式 1 bridge模式 默认模式 桥接模式 初识网络模式 查看桥接模式的特点 2 host模式 仅主机模式 使用守护进程的方式创建并启动且进入容器 查看仅主机模式下的网络配置 端口映射 3 如何创建自定义网络 网络模式 Doc
  • Unity3D 选中高亮效果shader的实现

    实现思路 平时我们可能觉得shader就是单纯用来进行渲染的 不会和逻辑代码产生什么交互 但是如果要做这种高亮的效果就需要使用代码来控制shader的显示了 所以物体选中高亮效果的实现其实就很简单 先写一个shader表现高亮效果 然后用另
  • Mybatis 学习笔记02 - CRUD

    目录 1 添加操作 1 1 在 UserDao 接口中新增 saveUser 方法 1 2 在映射配置文件 UserMapper xml 中配置添加操作 1 3 测试添加用户 1 4 测试结果 2 更新操作 2 1 在 UserDao 接口
  • FAST-LIO(二):程序运行&代码注释

    文章目录 前言 数据准备 程序运行 代码注释 1 laserMapping cpp 2 IMU Processing hpp 3 use ikfom hpp 前言 论文题目 FAST LIO A Fast Robust LiDAR iner
  • vue页面缓存解决方案

    关于vue页面通过解决方案 方案一 使用keep alive和v if 备注 这种方案有问题 关闭面板后 在通过菜单打开页面还是有缓存 1 添加keep alive
  • pycharm 怎么使用快捷键按出代码提示框

    更新win10 发现可以改取消ctrl space快捷键的占用了 我们在平时写代码的时候难免会出现敲错字母的时候 这时候你的代码提示框就会消失 很不爽 但你退格删掉错的字母的时候 代码提示框还是没有自动出现 就很烦 不想写代码了 其实都是w
  • 谈谈自己对IOC容器的理解(一)

    初学Java时 了解到Java是一门面向对象的语言 我感觉Java这面向对象好废 啥都要我自己弄 这跟C语言有啥区别 感觉Java也就这样了 完全体会不到面向对象的感觉 处处都是 面向过程 网上总说面向对象修房子是去找专门修房子的人来修 面
  • 安卓依赖冲突处理

    目录 一 模块依赖 二 打包时如何处理依赖 三 为什么依赖重复后会有报错 最后 一 模块依赖 这里引用一下谷歌链接 https developer android com studio build dependencies google m
  • 大话数据结构 2 算法

    算法 算法是解决特定问题求解步骤的描述 在计算机中表现为指令的有限序列 并且每条指令表示一个或多个操作 算法的五个基本特性 输入 输出 有穷性 确定性 可行性 1 输入输出 算法具有0个或多个输入 算法至少有1个或多个输出 2 有穷性 指算
  • 基于QT绘制可交互性的Bezier曲线

    前言 因为项目需要 要做一款类似AI里面的曲率工具出来 其实也类似Photoshop里面的钢笔工具 所以写了个demo来演练一番 之前是不懂Bezier的 但是网上找到的源码都是固定点的 但无论是钢笔工具还是曲率工具都是要能与鼠标键盘交互的
  • Node.js之高性能探秘

    Node js之高性能探秘 NodeJS是什么 简介 NodeJS的优点 一 对前端工程师友好 二 高性能 高性能的实现 单线程 非阻塞异步I O 事件驱动 事件循环机制 NodeJS是什么 简介 Node js是一个开源和跨平台的基于 C
  • matlab算法_决策树算法MATLAB实践

    在MATLAB中 为方便用户对决策树算法的使用 MATLAB中针对分类决策树和回归决策树分别封装了两个函数 fitctree和fitrtree 由于分类决策树和回归决策树两者具有极大的相似性 因此fitctree和fitrtree两者的使用
  • 我的世界java版tp_神奇的tp指令 我的世界tp指令的用法

    神奇的tp指令 我的世界tp指令的用法 tp指令是每个玩服务器的玩家都要了解和掌握的一个指令 那下面游戏园小编就给大家详细的介绍一下在我的世界中tp指令要怎么使用吧 希望大家喜欢 其实是运用到了指令之中的tp指令 tp 自己的名字 坐标 O
  • 走梅花桩步数

    题目描述 题目描述 Redraiment是走梅花桩的高手 Redraiment总是起点不限 从前到后 往高的桩子走 但走的步数最多 不知道为什么 你能替Redraiment研究他最多走的步数吗 样例输入 6 2 5 1 5 4 5 样例输出
  • 使用微信小程序连接到 MQTT 云服务

    微信小程序是腾讯于 2017 年 1 月 9 日推出的一种不需要下载安装即可在微信平台上使用的应用程序 用户扫一扫或者搜一下即可打开应用 也体现了 用完即走 的理念 用户不用关心是否安装太多应用的问题 应用将无处不在 随时可用 但又无需安装
  • input-file 部分手机不能拍照问题

    曾经遇到一个需求 用户拍身份证上传验证 然后我卡在了拍照这个点上 最初采用的是微信的 api wx chooseImage 但随后发现 返回的是一种只有微信才能预览的 url 格式 但验证是要放在 PC 上进行的 等于保存了这个 url 也
  • uniapp省市区3级联动组件

    1 组件代码picker region vue
  • CDN 内容分发网络

    第一步 HTML的文件引用 HTML的文件头 也有文件中 文件尾 那边常有其他文件引用 比如CSS以及JS的引用 就以bootstrap常用的引用来举个栗子 你常见的引用可能会是这样的