CDN原理与应用简要介绍

CDN原理与应用简要介绍

CDN的全称是Content Delivery Network(内容分发网络或内容交付网络)。CDN是构建在现有网络基础之上的智能虚拟网络,CDN依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取内容,降低网络延迟,提高访问速度。CDN的关键技术主要有内容存储和分发技术。简单来讲,CDN是用来进行加速的,它可以让用户更快获得所需的数据。

CDN的基本原理

CDN的基本原理是在用户访问相对集中的地区和网络设置一些缓存服务器。当用户访问网站时,利用全局的负载均衡技术将用户的访问指向距离最近的缓存服务器,由缓存服务器代替源站响应用户的访问请求。这样一方面减轻了源站服务器的工作压力,另一方面使用户可就近取得所需内容,解决 Internet网络拥挤的状况,提高用户访问网站的响应速度。

CDN相关技术

CDN实现需要依赖多种网络技术,如负载均衡技术、动态内容分发与复制技术、缓存技术等是其中最主要的几种网络技术。

(1)负载均衡技术

负载均衡技术就是将网络中的流量尽可能平均分配到多个能完成相同任务的服务器或网络节点,由此来避免单个或部分网络节点过载瘫痪,影响正常的网络访问。

(2)动态内容分发与复制技术

在多数情况下,网站响应速度和访问者与网站服务器之间的距离有着密切的关系。如果访问者和网站之间的距离果园,之间的融信要经过多次路由转发和处理,网络延迟会大大增加。而内容分发和复制技术就是将网站主体中的大部分静态页面、图像和流媒体数据等分发复制到各地的加速节点上。所以,动态内容分发与复制技术也是CDN所需的一个重要技术。

(3)缓存技术

缓存技术已经不是一种新鲜技术。Web缓存服务通过几种方式来改善用户的响应时间,如代理缓存服务、透明代理缓存服务、使用重定向服务的透明代理缓存服务 等。通过Web缓存服务,用户访问网页时可以将广域网的流量降至最低。对于公司内联网用户来说,这意味着将内容在本地缓存,而无须通过专用的广域网来检索 网页。对于Internet用户来说,这意味着将内容存储在他们的ISP的缓存器中,而无须通过Internet来检索网页。这样无疑会提高用户的访问速度。CDN的核心作用正是提高网络的访问速度,所以,缓存技术将是CDN所采用的又一个主要技术。

CDN有哪些优点?

(1)本地Cache加速,提高了访问速度;

(2) 跨运营商的网络加速,保证不同网络的用户都得到良好的访问质量;

(3)远程访问用户根据DNS负载均衡技术智能自动选择Cache服务器

(4)自动生成服务器的远程Mirror(镜像)cache服务器,远程用户访问时从cache服务器上读取数据,减少远程访问的带宽、分担网络流量、减轻原站点web服务器负载等功能;

(5)广泛分布的CDN节点加上节点之间的智能冗余机制,可以有效地预防黑客入侵。

简单地说 CDN是一组分布在世界各地不同地理位置的服务器,以实现网站内容的快速交付。当用户使用CDN访问网站时,浏览器会连接到其中一个边缘服务器并向其请求网站内容。选择的服务器通常是最靠近最终用户的服务器,以减少时间延迟。多个缓存服务器的使用分散了流量并防止了服务器过载。What Is CDN? Learning All About Content Delivery Networks

CDN - 术语表 | MDN

CDN被广泛用于传输 stylesheets 和 JavaScript 等静态资源,像Bootstrap、Jquery 、vue.js等。

CDN应用

光看上面的介绍可能觉得比较抽象,其实在我们的网页中也可以使用这个技术,下面结合实例简要介绍之,为此先复习一下HTML 的<script> 、<link>标签。

<script> 标签

<script src="URL">

HTML <script> 标签的 src 属性用于指定外部脚本文件的 URL。

URL可能的值有:

绝对 URL - 指向其他站点(比如 src="www.example.com/example.js")。

相对 URL - 指向站点内的文件(比如 src="/scripts/example.js")

<link>标签

<link href=" URL " rel="stylesheet"/>

其中“rel=stylesheet”,rel是关联的意思,关联的是一个样式表(stylesheet)文档,它表示这个link在文档初始化时将被使用。rel是Relations的缩写,指关联到一个stylesheet(样式表单)。

Bootstrap

Bootstrap,来自 Twitter,是目前最受欢迎的前端框架。它简洁灵活,使得 Web 开发更加快捷。主要分为三大核心目录:css(样式)、js(脚本)、fonts(字体)。

bootstrap官网

Bootstrap · The most popular HTML, CSS, and JS library in the world.

Bootstrap中文网

Bootstrap中文网

Bootstrap v5 中文文档 · Bootstrap 是全球最受欢迎的 HTML、CSS 和 JS 前端工具库。 | Bootstrap 中文网

网页中使用Bootstrap方法有二:

一是官网您可以从 http://getbootstrap.com/ 上下载 Bootstrap使用。Bootstrap文件夹包含bootstrap.min.js 和 bootstrap.min.css 文件,只要把html网页文件与Bootstrap文件夹放在一起,然后用相对路径引用jquery.js、bootstrap.min.js 和 bootstrap.min.css 文件即可。

二是从 CDN 中载入Bootstrap,即在线尝试,下面的例子用到了https://cdn.staticfile.org/twitter-bootstrap/3.3.7/css/bootstrap.min.css

通过CDN使用Bootstrap例子源码如下:

<!DOCTYPE html>
<html>
<head>
   <meta charset="utf-8"> 
   <title>在线尝试 Bootstrap</title>
   <link rel="stylesheet" href="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/css/bootstrap.min.css">  
<script>
</script>
</head>
<body>
<h3>使用在线Bootstrap产生的不同样式的按钮</h3>
<button type="button" class="btn btn-default">默认按钮</button>
<button type="button" class="btn btn-default btn-lg">大的默认按钮</button>
</body>
</html>

运行效果如下图:

运行效果如下图:

jQuery

jQuery 是一个 JavaScript 库。jQuery的字面意思其实就是JavaScript和查询(Query),即用于辅助开发JavaScript的库。

网页中使用 jQuery方法有二:

一是官网https://jquery.com/download/ 下载 jQuery 库使用。

二是从 CDN 中载入 jQuery,下面的例子用到了https://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js

通过CDN使用jQuery的例子源码如下: 

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>通过CDN使用jQuery</title>
<script src="https://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script>
<script>
$(document).ready(function(){
  $("button").click(function(){
    $("p").hide();
  });
});
</script>
</head>
<body>
<p>这是一个段落。</p>
<p>这是另一个段落。</p>
<button>点我隐藏段落</button>
</body>
</html>

运行效果如下图:

vue.js

 Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架。

vue.js英文 Vue.js - The Progressive JavaScript Framework | Vue.js

vue.js中文 Vue.js - 渐进式 JavaScript 框架 | Vue.js

网页中使用vue.js方法有二:

一是从官网 Vue.js 的官网上直接下载 vue.min.js 并用 <script> 标签引入。

二是使用 CDN 方法载入,

关于Vue.js入门可见 Vue.js入门教程(适合初学者)_软件开发技术爱好者的博客-CSDN博客_vue.js教程

在此不多介绍了。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
前端性能优化实践# 知识体系与小册格局 ## 写给读者 提起性能优化,大家现在脑海里第一时间会映射出什么内容呢? 可能是类似[“雅虎军规”](https://developer.yahoo.com/performance/rules.html?guccounter=1)和[《高性能 JavaScript》](https://book.douban.com/subject/5362856/)这样历久弥香的经典之作,也可能是搜索引擎聚合给你的一篇又一篇以性能优化为主题的个人或团队实践而来的“私货”。至少当我确定自己的研发方向、并接到第一个性能优化任务时,我做的第一件事是向搜索引擎求助,第二件事是买书,然后开始了摸着石头过河,前后花费了大量的时间和精力。我深感性能优化实在是前端知识树中特别的一环——当你需要学习前端框架时,文档和源码几乎可以告诉你所有问题的答案,当你需要学习 Git 时,你也可以找到放之四海皆准的实践方案。但性能优化却不一样,它好像只能是一个摸索的过程。 这个摸索的过程是痛苦的、漫长的,也是紧要的。因为在如今的互联网环境下,一个前端团队如果只把性能优化这个任务写在纸上,而不投入实践,它将缺失最基本的竞争力。 笔者写这本小册,是希望通过短短十数个章节的讲解,尽可能降低一些大家学习性能优化的成本。 一方面,这本小册为没有接触过性能优化的新同学建立起一个正确的前端性能优化的“世界观”,知道性能优化是什么、为什么、怎么做,从而使性能优化这件事情有迹可循,有路可走。这样在面试现场被问到性能优化层面的问题时,能够做到滔滔不绝、言之有物,而非像背书一样罗列干巴巴的知识点,最终淹没在茫茫的求职大军中。另一方面,小册可以为在职的工程师们提供一线团队已经实践过的“方法论”,知道什么场景下该做什么事情,最终在脑海中留下一张涵盖核心原理和实践的、可随时查阅并且高度可扩展的性能优化思路索引表。然后在今后的开发生活中可以去践行它,更进一步去挖掘它。把性能优化变作你前端工程师生涯的一门必修课,进而演化为自己研发方面的核心竞争力。 同时,相信大家可以明确这样一个学习观念:任何技术的掌握,都离不开一定比例的理论基础和实际操作的支撑。 具体到前端性能优化这件事情上,我认为它是 20% 的理论,加上至少 80% 的实践,甚至很多理论本身也都是我们在具体的业务场景中实践出来的。所以希望大家阅读本小册时,能够读到一些“书本之外的东西”——最好是一边读一边回忆自己既有的开发经历,尝试去留意哪些知识是已知的,哪些是未知的。 这样读完之后,就可以有的放矢地把这些知识转换为自己的项目实践——前端技术日新月异,性能方案永远都在更迭,所以一定要形成自己的学习思路。 建议每一位读者都带着“学了就要用”的心态去读这本小册。如果阅读结束,能够为你带来哪怕一个小小的开发习惯或者优化观念上的改变,这数小时的阅读时间就算没有白费。 ## 知识体系: 从一道面试题说起 在展开性能优化的话题之前,我想先抛出一个老生常谈的面试问题: > 从输入 URL 到页面加载完成,发生了什么? 这个问题非常重要,因为我们后续的内容都将以这个问题的答案为骨架展开。我希望正在阅读这本小册的各位可以在心里琢磨一下这个问题——无须你调动太多计算机的专业知识,只需要你用最快的速度在脑海中架构起这个抽象的过程——我们接下来所有的工作,就是围绕这个过程来做文章。 我们现在站在性能优化的角度,一起简单地复习一遍这个经典的过程:首先我们需要通过 DNS(域名解析系统)将 URL 解析为对应的 IP 地址,然后与这个 IP 地址确定的那台服务器建立起 TCP 网络连接,随后我们向服务端抛出我们的 HTTP 请求,服务端处理完我们的请求之后,把目标数据放在 HTTP 响应里返回给客户端,拿到响应数据的浏览器就可以开始走一个渲染的流程。渲染完毕,页面便呈现给了用户,并时刻等待响应用户的操作(如下图所示)。 ![](https://user-gold-cdn.xitu.io/2018/10/18/16685737b823244c?w=489&h=329&f=png&s=19023) 我们将这个过程切分为如下的过程片段: 1. DNS 解析 2. TCP 连接 3. HTTP 请求抛出 4. 服务端处理请求,HTTP 响应返回 5. 浏览器拿到响应数据,解析响应内容,把解析的结果展示给用户 大家谨记,我们任何一个用户端的产品,都需要把这 5 个过程滴水不漏地考虑到自己的性能优化方案内、反复权衡,从而打磨出用户满意的速度。 ## 从原理到实践:各个击破 我们接下来要做的事情,就是针对这五个过程进行分解,各个提问,各个击破。 具体来说,DNS 解析花时间,能不能尽量减少解析次数
前言 第一篇 网站基础知识 第1章 网站架构及其演变过程2 1.1 软件的三大类型2 1.2 基础的结构并不简单3 1.3 架构演变的起点5 1.4 海量数据的解决方案5 1.4.1 缓存和页面静态化5 1.4.2 数据库优化6 1.4.3 分离活跃数据8 1.4.4 批量读取和延迟修改8 1.4.5 读写分离9 1.4.6 分布式数据库10 1.4.7 NoSQL和Hadoop10 1.5 高并发的解决方案11 1.5.1 应用和静态资源分离11 1.5.2 页面缓存12 1.5.3 集群与分布式12 1.5.4 反向代理13 1.5.5 CDN14 1.6 底层的优化15 1.7 小结15 第2章 常见协议和标准17 2.1 DNS协议17 2.2 TCP/IP协议与Socket18 2.3 HTTP协议20 2.4 Servlet与Java Web开发22 第3章 DNS的设置23 3.1 DNS解析23 3.2 Windows 7设置DNS服务器24 3.3 Windows设置本机域名和IP的对应关系25 第4章 Java中Socket的用法26 4.1 普通Socket的用法26 4.2 NioSocket的用法28 第5章 自己动手实现HTTP协议33 第6章 详解Servlet37 6.1 Servlet接口37 6.2 GenericServlet40 6.3 HttpServlet41 第7章 Tomcat分析44 7.1 Tomcat的顶层结构及启动过程44 7.1.1 Tomcat的顶层结构44 7.1.2 Bootstrap的启动过程45 7.1.3 Catalina的启动过程47 7.1.4 Server的启动过程48 7.1.5 Service的启动过程50 7.2 Tomcat的生命周期管理52 7.2.1 Lifecycle接口52 7.2.2 LifecycleBase53 7.3 Container分析59 7.3.1 ContainerBase的结构59 7.3.2 Container的4个子容器60 7.3.3 4种容器的配置方法60 7.3.4 Container的启动62 7.4 Pipeline-Value管道69 7.4.1 Pipeline-Value处理模式69 7.4.2 Pipeline-Value的实现方法70 7.5 Connector分析73 7.5.1 Connector的结构73 7.5.2 Connector自身类74 7.5.3 ProtocolHandler77 7.5.4 处理TCP/IP协议的Endpoint77 7.5.5 处理HTTP协议的Processor80 7.5.6 适配器Adapter81 第二篇 俯视Spring MVC 第8章 Spring MVC之初体验84 8.1 环境搭建84 8.2 Spring MVC最简单的配置84 8.2.1 在web.xml中配置Servlet85 8.2.2 创建Spring MVC的xml配置文件85 8.2.3  创建Controller和view86 8.3 关联spring源代码87 8.4 小结89 第9章 创建Spring MVC之器90 9.1 整体结构介绍90 9.2 HttpServletBean93 9.3 FrameworkServlet95 9.4 DispatcherServlet100 9.5 小结107 第10章 Spring MVC之用108 10.1 HttpServletBean108 10.2 FrameworkServlet108 10.3 DispatcherServlet114 10.4 doDispatch结构118 10.5 小结123 第三篇 Spring MVC组件分析 第11章 组件概览126 11.1 HandlerMapping126 11.2 HandlerAdapter128 11.3 HandlerExceptionResolver130 11.4 ViewResolver131 11.5 RequestToViewNameTranslator133 11.6 LocaleResolver133 11.7 ThemeResolver135 11.8 MultipartResolver137 11.9 FlashMapManager138 11.10 小结139 第12章 HandlerMapping140 12.1 AbstractHandlerMapping140 12.1.1 创建AbstractHandlerMapping之器141 12.1.2 AbstractHandlerMapping之用142 12.2 AbstractUr
前端性能优化实践# 知识体系与小册格局 ## 写给读者 提起性能优化,大家现在脑海里第一时间会映射出什么内容呢? 可能是类似[“雅虎军规”](https://developer.yahoo.com/performance/rules.html?guccounter=1)和[《高性能 JavaScript》](https://book.douban.com/subject/5362856/)这样历久弥香的经典之作,也可能是搜索引擎聚合给你的一篇又一篇以性能优化为主题的个人或团队实践而来的“私货”。至少当我确定自己的研发方向、并接到第一个性能优化任务时,我做的第一件事是向搜索引擎求助,第二件事是买书,然后开始了摸着石头过河,前后花费了大量的时间和精力。我深感性能优化实在是前端知识树中特别的一环——当你需要学习前端框架时,文档和源码几乎可以告诉你所有问题的答案,当你需要学习 Git 时,你也可以找到放之四海皆准的实践方案。但性能优化却不一样,它好像只能是一个摸索的过程。 这个摸索的过程是痛苦的、漫长的,也是紧要的。因为在如今的互联网环境下,一个前端团队如果只把性能优化这个任务写在纸上,而不投入实践,它将缺失最基本的竞争力。 笔者写这本小册,是希望通过短短十数个章节的讲解,尽可能降低一些大家学习性能优化的成本。 一方面,这本小册为没有接触过性能优化的新同学建立起一个正确的前端性能优化的“世界观”,知道性能优化是什么、为什么、怎么做,从而使性能优化这件事情有迹可循,有路可走。这样在面试现场被问到性能优化层面的问题时,能够做到滔滔不绝、言之有物,而非像背书一样罗列干巴巴的知识点,最终淹没在茫茫的求职大军中。另一方面,小册可以为在职的工程师们提供一线团队已经实践过的“方法论”,知道什么场景下该做什么事情,最终在脑海中留下一张涵盖核心原理和实践的、可随时查阅并且高度可扩展的性能优化思路索引表。然后在今后的开发生活中可以去践行它,更进一步去挖掘它。把性能优化变作你前端工程师生涯的一门必修课,进而演化为自己研发方面的核心竞争力。 同时,相信大家可以明确这样一个学习观念:任何技术的掌握,都离不开一定比例的理论基础和实际操作的支撑。 具体到前端性能优化这件事情上,我认为它是 20% 的理论,加上至少 80% 的实践,甚至很多理论本身也都是我们在具体的业务场景中实践出来的。所以希望大家阅读本小册时,能够读到一些“书本之外的东西”——最好是一边读一边回忆自己既有的开发经历,尝试去留意哪些知识是已知的,哪些是未知的。 这样读完之后,就可以有的放矢地把这些知识转换为自己的项目实践——前端技术日新月异,性能方案永远都在更迭,所以一定要形成自己的学习思路。 建议每一位读者都带着“学了就要用”的心态去读这本小册。如果阅读结束,能够为你带来哪怕一个小小的开发习惯或者优化观念上的改变,这数小时的阅读时间就算没有白费。 ## 知识体系: 从一道面试题说起 在展开性能优化的话题之前,我想先抛出一个老生常谈的面试问题: > 从输入 URL 到页面加载完成,发生了什么? 这个问题非常重要,因为我们后续的内容都将以这个问题的答案为骨架展开。我希望正在阅读这本小册的各位可以在心里琢磨一下这个问题——无须你调动太多计算机的专业知识,只需要你用最快的速度在脑海中架构起这个抽象的过程——我们接下来所有的工作,就是围绕这个过程来做文章。 我们现在站在性能优化的角度,一起简单地复习一遍这个经典的过程:首先我们需要通过 DNS(域名解析系统)将 URL 解析为对应的 IP 地址,然后与这个 IP 地址确定的那台服务器建立起 TCP 网络连接,随后我们向服务端抛出我们的 HTTP 请求,服务端处理完我们的请求之后,把目标数据放在 HTTP 响应里返回给客户端,拿到响应数据的浏览器就可以开始走一个渲染的流程。渲染完毕,页面便呈现给了用户,并时刻等待响应用户的操作(如下图所示)。 ![](https://user-gold-cdn.xitu.io/2018/10/18/16685737b823244c?w=489&h=329&f=png&s=19023) 我们将这个过程切分为如下的过程片段: 1. DNS 解析 2. TCP 连接 3. HTTP 请求抛出 4. 服务端处理请求,HTTP 响应返回 5. 浏览器拿到响应数据,解析响应内容,把解析的结果展示给用户 大家谨记,我们任何一个用户端的产品,都需要把这 5 个过程滴水不漏地考虑到自己的性能优化方案内、反复权衡,从而打磨出用户满意的速度。 ## 从原理到实践:各个击破 我们接下来要做的事情,就是针对这五个过程进行分解,各个提问,各个击破。 具体来说,DNS 解析花时间,能不能尽量减少解析次数
搭建一个小型CDN实验环境可以帮助您理解CDN的工作原理和实际应用。下面是一个简单的步骤: 1. 选择合适的服务器:您需要至少两台服务器来搭建CDN实验环境。一台作为源服务器,提供原始内容,另一台或多台作为缓存服务器,分布在不同的地理位置。 2. 安装Web服务器:在源服务器上安装和配置一个常见的Web服务器,如Nginx或Apache。将您想要通过CDN分发的静态内容放在该服务器上。 3. 配置缓存服务器:在缓存服务器上安装和配置一个反向代理服务器,如Nginx或Varnish。通过配置反向代理,使其将请求转发到源服务器,并将响应缓存起来。 4. 配置DNS:将域名解析指向您的CDN实验环境中的缓存服务器。您可以使用自己的域名或者在测试阶段使用临时域名。 5. 测试CDN效果:通过浏览器或命令行工具发送请求,观察内容是否从缓存服务器返回。您可以使用工具如curl或者在浏览器中查看网络请求的响应头。 6. 加入更多缓存服务器:如果您希望模拟更真实的CDN环境,可以添加更多的缓存服务器,并将其分布在不同的地理位置。确保这些缓存服务器配置正确并能够从源服务器获取内容。 7. 测试负载均衡:尝试同时发送大量请求到CDN环境,并观察请求是否被均匀地分发到不同的缓存服务器上。 请注意,这只是一个简单的CDN实验环境示例,实际的CDN系统可能更复杂,并涉及更多的组件和配置。此外,安全性、缓存策略、内容刷新等方面也需要根据实际需求进行配置和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学习&实践爱好者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值