你知道CDN是什么吗?本文带你搞明白CDN

最近在了解边缘计算,发现我们经常听说的CDN也是边缘计算里的一部分。那么说到CDN,好像只知道它中文叫做内容分发网络。那么具体CDN的原理是什么?能够为用户在浏览网站时带来什么好处呢?解决这两个问题是本文的目的。

CDN概念

CDN全称叫做“Content Delivery Network”,中文叫内容分发网络

实际上CDN这个概念是在1996年由美国麻省理工学院的一个研究小组为改善互联网的服务质量而提出的。那么它到底是怎么改善互联网服务质量的呢?

原理分析

我们知道,当我们使用域名访问某一个网站时,实际上就是将请求包(以Http请求为例)通过网络传输给某台服务器,比如访问“www.baidu.com”时:

  1. 首先解析出该域名所对应的IP地址(DNS域名解析)
  2. 然后将Http请求包通过网络路由到IP地址所对应的服务器

我们通常说“服务器的IP地址”,这其实不太准确,IP地址是和网卡绑定的,一个服务器可以有多个网卡,也就是可能有多个IP地址。

我们先来看第一步:域名解析

域名解析

解析域名分为两种:

  1. 将一个域名解析为一个IP地址
  2. 将一个域名解析为另外一个域名

其实解析思路不难,我们在域名服务商购买了一个域名之后,需要去映射一个IP地址,可以用Map来表示这个关系:{域名:IP}

同时我们也可以给某个域名取一个别名,比如“www.baidu.com”取一个别名“test.baidu.com”,这种关系也可以用Map来表示:{域名:别名}。这里的别名专业一点叫做CNAME,相信大家对这个词有点眼熟,它就是这个意思。

域名解析,实际上就是解析出指定域名所对应的IP地址,或者该域名的一个CNAME。

而域名解析是由DNS系统来负责的,DNS服务接受外部请求,从请求里提取域名,

  • 如果这个域名对应的是IP地址,则返回这个IP地址,
  • 如果这个域名对应的是CNAME,则继续查找CNAME域名的IP地址,然后将该地址返回给请求发送者。

请求发送者拿到IP地址之后,完成真正的请求调用。

实际上DNS系统是非常庞大的,这里不去多将,大家把它当作一个黑盒子,这个盒子的作用就是上文所描述的,这里用一个简单的图来表示一下。

没有CNAME的情况:

 

有CNAME的情况:

特别注意:在有CNAME的情况下,我们可以发现,CNAME实际上在域名解析的过程中承担了中间人(或者说代理)的角色,这是CDN实现的关键。

CDN原理

首先CDN是为了改善互联网的服务质量通俗一点说其实就是提高访问速度。

假设百度网站现在只有一台服务器,现在有一个人在上海访问百度,如果该服务器也在上海,那么通常来说访问比较快,如果该服务器在拉萨,那么相对而言访问就比较慢了。那么这个问题的根本原因是网络传输是依赖于网线的,网线越长,那么时间肯定就越久。

那么怎么解决这个问题呢?其实思路很简单,百度在全国各地都部署一模一样的服务器就行了,专业一点叫冗余。

思路很简单,但实现还是比较麻烦的,服务器上的资源分为两种:静态资源动态资源

  • 静态资源:这种资源通常是很少变动的,比如图片,视频,css,javascript等等
  • 动态资源:这种资源不同用户不同时刻访问通常是不一样的,比如ftl,jsp等等。

那么如果百度要在全国各地都部署服务器,如果说每个服务器上都有相同的动态资源,那么可能还需要配置相应的数据库,因为动态资源所记录的信息通常会存储在数据库中,那么这就涉及到了数据同步等等问题,这会导致成本很高,这种做法专业一点其实就是集群,而目前来说集群架构最多是三地五中心,不是说全国多地集群不可能,主要是成本太高。

那么有没有成本比较低的方式呢,有,就是在每个服务器上只部署静态资源,静态资源通常不涉及到数据库,所以成本也比较低,而且也能提高用户的访问速度。

到这里,介绍了CDN想要达到的目的,那么怎么达到这个目的呢?

现在如果要比较CDN系统,我们可以考虑两点:

  1. CDN系统中存储静态资源服务器的性能以及网速怎么样。
  2. CDN系统中全国甚至全球范围内服务器节点的数量以及部署情况。

第一点很好理解,第二点大家应该也能理解了,如果静态资源的服务器节点很多,能够让每个用户在访问这些静态资源时都不用“跑很远的路程”才能获取到,那么自然这是CDN系统的优点。

有公司看到了这种需求,所以现在其实有很多CDN供应商,比如阿里,腾讯等等都有自己的CDN服务。只要你自己的系统接入了这些大厂所提供的CDN服务,你把自己的静态资源传给CDN服务,那么这些静态资源将自动的分布到全世界各地去。

好,那么现在的问题是,用户在访问静态资源时也是通过域名来访问的,域名会被解析成某一个IP地址,关键的问题就是,DNS系统怎么在做域名解析时,解析出来一个离用户最近的一个IP地址呢

普通的DNS系统是做不到的,需要一个特殊的DNS服务器,这个特殊DNS需要知道

  1. 用户当前所在位置
  2. 还需要知道用户现在访问的这个域名对应哪些IP地址,以及这个IP地址分别在哪?

对于第一个问题好解决,直接从用户请求里提取出用户的ip地址,比如这个ip地址被解析为北京电信、上海移动等等。

第二个问题由谁来解决,我们现在考虑的是CDN,CDN提供商肯定知道他们公司在哪些地方部署了机器以及它们的IP地址,所以这个问题只能有CDN提供商来解决,CDN提供商会提供这个特殊的DNS服务器,我们叫做 CDN专用DNS服务器

这样的话,只要用户在使用某个域名访问静态资源时,如果用户直接配置自己电脑的DNS地址为CDN专用DNS服务器。那么自然解决了问题,但是我们需要考虑的时,我们不能要求世界上所有的用户都去修改自己电脑的DNS地址。所以这个时候就要利用DNS中的CNAME了。

用户使用某个域名来访问静态资源时(这个域名在阿里CDN服务中叫做“加速域名”),比如这个域名为“image.baidu.com”,它对应一个CNAME,叫做“cdn.ali.com”,那么普通DNS服务器(区别CDN专用DNS服务器)在解析“image.baidu.com”时,会先解析成“cdn.ali.com”,普通DNS服务器发现该域名对应的也是一个DNS服务器,那么会将域名解析工作转交给该DNS服务器,该DNS服务器就是CDN专用DNS服务器。CDN专用DNS服务器对“cdn.ali.com”进行解析,然后依据服务器上记录的所有CDN服务器地址信息,选出一个离用户最近的一个CDN服务器地址,并返回给用户,用户即可访问离自己最近的一台CDN服务器了。


 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/270068.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Swift - 警告提示框(UIAlertController)的用法

import UIKitclass ViewController: UIViewController {override func viewDidLoad() {super.viewDidLoad()}override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {// 创建let alertController UIAlertController(title: "提示",…

运维笔记:Windows下如何实现nginx服务自启动

目录 下载Windows Service Wrapper nginx-service.exe 拷贝到nginx的根目录当中 创建配置文件 管理员身份运行安装Nginx服务命令 Nginx作为有每一个两三年工作经验的程序员来说都不陌生&#xff0c;基本上每个线上部署的项目都需要用到&#xff0c;Nginx常用的功能有负载均衡、…

你知道三地五中心吗

两地三中心这个架构&#xff0c;如下图&#xff1a; 这种架构具备容灾能力&#xff0c;比如生产数据中心停电了&#xff0c;那么可以把所有流量都切到同城灾备中心或异地灾备中心&#xff0c;那么现在的问题是假如真到了停电的那一天&#xff0c;你敢把所有的流量都切到灾备中心…

Win10操作系统隐藏6个实用小功能

目录 功能一、分屏 功能二、录屏 功能三、截图 功能四、便签功能 功能五、视频剪辑 功能六、计算器 功能一、分屏 Win10操作系统其实是自带分屏功能的&#xff0c;这个功能对我来说真的太喜欢了&#xff0c;尤其是核对文档的时候&#xff0c;真的是太方便了&#xff01; 操作方…

面试一口气说出Spring的声明式事务@Transactional注解的6种失效场景

一、Spring事务管理的两种方式 事务管理在系统开发中是不可缺少的一部分&#xff0c;Spring提供了很好事务管理机制&#xff0c;主要分为编程式事务和声明式事务两种。 编程式事务&#xff1a;是指在代码中手动的管理事务的提交、回滚等操作&#xff0c;代码侵入性比较强&…

JAVA断点调试

1、条件断点&#xff0c;点击添加条件 2、异常断点&#xff0c;点击添加异常 转载于:https://www.cnblogs.com/binbang/p/6378897.html

操作系统:Win10如何彻底卸载自带的Flash软件

Win10操作系统中&#xff0c;Flash功能是系统自带的&#xff0c;我们无法直接通过应用管理来找到Flash&#xff0c;所以也不能从系统设置或者控制面板中卸载它。当然如果你是后期自己安装的话&#xff0c;可以通过控制面板找到Flash然后直接卸载它。 Flash的路径为“C:\Windows…

Java运行时异常和非运行时异常

1.Java异常机制 Java把异常当做对象来处理&#xff0c;并定义一个基类java.lang.Throwable作为所有异常的超类。Java中的异常分为两大类&#xff1a;错误Error和异常Exception&#xff0c;Java异常体系结构如下图所示 2.Throwable Throwable类是所有异常或错误的超类&#xf…

办公技巧:如何快速提取办公文档里面的所有图片

针对一个比较大的办公文档里面有很多图片&#xff0c;有些时候我们需要提取文档里面的所有图片信息&#xff0c;当然你打开文档一个个复制保存就可以了&#xff0c;不过这样太过于繁琐了&#xff0c;有没有更加快速的方法呢&#xff1f;今天给大家分享快速提取办公文档里面的所…

ELK+Filebeat+Kafka+ZooKeeper 构建海量日志分析平台(elk5.2+filebeat2.11)

ELKFilebeatKafkaZooKeeper 构建海量日志分析平台 参考&#xff1a;http://www.tuicool.com/articles/R77fieA 我在做ELK日志平台开始之初选择为ELKRedis直接构建&#xff0c;在采集nginx日志时一切正常&#xff0c;当我采集我司业务报文日志类后&#xff0c;logstash会报大量的…

Spring回滚事务类型

Spring默认抛出了未检查unchecked异常&#xff08;继承自 RuntimeException的异常&#xff09;或者 Error才回滚事务&#xff0c;其他异常不会触发回滚事务。

操作系统:Win10操作系统内置的备份功能介绍

今天给大家分享Win10操作系统内置的系统备份功能&#xff0c;感兴趣的可以了解一下&#xff01;。 Win10的备份&#xff1a;由“旧版备份与还原”、“还原点”和“文件历史记录”三个部分组成。 旧版备份与还原&#xff1a;主要用于系统备份与还原 还原点&#xff1a;还原点 文…

spring 事务控制 设置手动回滚 TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();

如上&#xff1a; 当我们需要在事务控制的service层类中使用try catch 去捕获异常后&#xff0c;就会使事务控制失效&#xff0c;因为该类的异常并没有抛出&#xff0c;就不是触发事务管理机制。怎样才能即使用try catch去捕获异常&#xff0c;而又让出现异常后spring回滚呢&am…

电脑软件:推荐一款本地文档搜索神器,赶快下载试试吧!

1、前言大家在日常办公的时候&#xff0c;经常会涉及各种各样的文档&#xff0c;时间久了文件会越来越多&#xff0c;有时候需要快速找到一个半年前文档可能会耗费你的大量时间&#xff0c;毕竟每个人的大脑记忆都是有限的&#xff0c;不可能每个细节都能够靠大脑记忆&#xff…

JVM系列(一):JVM基本概念知识笔记

今天开始给大家分享JVM系列知识&#xff0c;欢迎大家一起学习交流共同进度&#xff01; 1、什么是JVM&#xff1f; JVM即Java虚拟机&#xff0c;可以理解为一种抽象计算机&#xff0c;它拥有一个指令集&#xff0c;在运行时操作各种内存区域。JVM对Java语言一无所知&#xff0…

配置maven环境变量cmd控制台提示:mvn不是内部或外部命令,也不是可运行的程序或批处理文件...

配置maven环境变量cmd控制台提示&#xff1a;mvn不是内部或外部命令&#xff0c;也不是可运行的程序或批处理文件 首先maven环境变量&#xff1a; 变量名&#xff1a;MAVEN_HOME 变量值&#xff1a;E:\apache-maven-3.2.3 变量名&#xff1a;Path 变量值&#xff1a;;%MVN_HOME…

电脑技巧:Win10任务管理器知识介绍,赶快来看一看吧

Win10操作系统的任务管理器应该是大家比较熟悉的软件&#xff0c;尤其是在你的电脑卡掉的时候&#xff0c;不得不打开任务管理器&#xff0c;结束掉进程卡死的进程&#xff0c;然后电脑就可以恢复正常使用&#xff0c;任务管理器作为Windows操作系统上一款使用频率非常高的软件…

[转]Asp.Net大型项目实践(11)-基于MVC Action粒度的权限管理【续】【源码在这里】(在线demo,全部源码)...

本文转自&#xff1a;http://www.cnblogs.com/legendxian/archive/2010/01/25/1655551.html 接上篇Asp.Net大型项目实践(10)-基于MVC Action粒度的权限管理&#xff08;在线demo&#xff0c;全部源码&#xff09; 在线Demo: 地址&#xff1a;http://218.60.8.35:1234/ 服务器&a…