Java程序员,如果你想要搞明白CDN,这篇应该够了!

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

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

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

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

首先解析出该域名所对应的IP地址(DNS域名解析)
然后将Http请求包通过网络路由到IP地址所对应的服务器
我们通常说“服务器的IP地址”,这其实不太准确,IP地址是和网卡绑定的,一个服务器可以有多个网卡,也就是可能有多个IP地址。

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

域名解析
解析域名分为两种:

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

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

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

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

如果这个域名对应的是IP地址,则返回这个IP地址,
如果这个域名对应的是CNAME,则继续查找CNAME域名的IP地址,然后将该地址返回给请求发送者。
请求发送者拿到IP地址之后,完成真正的请求调用。

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

没有CNAME的情况:

程序员,如果想要搞明白CDN,这篇应该够了!
有CNAME的情况:

程序员,如果想要搞明白CDN,这篇应该够了!
特别注意:在有CNAME的情况下,我们可以发现,CNAME实际上在域名解析的过程中承担了中间人(或者说代理)的角色,这是CDN实现的关键。

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

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

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

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

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

大家想了解三地五中心的,可以看https://mp.weixin.qq.com/s/uGyGldbwmShDDPDau5pAPw这篇文章,也是本人写的。

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

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

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

CDN系统中存储静态资源服务器的性能以及网速怎么样。
CDN系统中全国甚至全球范围内服务器节点的数量以及部署情况。
第一点很好理解,第二点大家应该也能理解了,如果静态资源的服务器节点很多,能够让每个用户在访问这些静态资源时都不用“跑很远的路程”才能获取到,那么自然这是CDN系统的优点。

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

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

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

用户当前所在位置
还需要知道用户现在访问的这个域名对应哪些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服务器了。

程序员,如果想要搞明白CDN,这篇应该够了!
补充:
在对域名解析时有多种类型的记录,最常用的比如:

A记录:一个域名对应一个IP地址
CNAME:一个域名对应另外一个域名
NS:将子域名指定其他DNS服务器解析
程序员,如果想要搞明白CDN,这篇应该够了!
总结
通过上面的文章我们可以发现,CDN的实现原理依赖于DNS,因为本人不是专门搞网络的,所以文中如果有不准确的地方,还请各位大佬指出。

推荐阅读
金三银四季,阿里工作10多年Java大牛的“心得”,献给迷茫中的你)

疫情之下,面对裁员潮,工作三年的Java程序员该何去何从?

原文地址:https://blog.51cto.com/14751386/2481143

时间: 2024-10-07 15:10:20

Java程序员,如果你想要搞明白CDN,这篇应该够了!的相关文章

Java程序员杂想

杂想 1.越是自动化程度高的工作,创造的价值越高:要实现自动化,就必须要造轮子.所以高端程序员造轮子,低端程序员使用轮子或者框架. 2.互联网产品就是定义规则,让用户在程序员指定的规则下进行操作. 3.发现测试也不好做,比如利息的相关测试,几十个字段的评分表的测试. 4.在编程中没有什么问题不能通过加一层逻辑解决的,比如提取通用代码 5.互联网有两大技术,搜索引擎和推荐系统.搜索引擎就是百度谷歌这些,信息由用户自己决定,缺点是比较闭塞.想起以前刚上网时,实在找不到可以看的东西,没有初始信息,没法

苦逼的程序员 如果你想离职 关于离职 想转行 想裸辞的你, 可以看看这些 拂去你各种疑难杂症 包括但不限于 想要裸辞怎么办, 不想上班了怎么办, 想换工作了压力大怎么办, 没有动力上班怎么办? 想转行但又不知道干什么 想离职又不知道干什么 想离职但是又没钱怎么办....

关于离职 想转行 想裸辞的你, 可以看看这些   拂去你各种疑难杂症 包括但不限于 想要裸辞怎么办, 不想上班了怎么办, 想换工作了压力大怎么办,  没有动力上班怎么办?想转行但又不知道干什么想离职又不知道干什么想离职但是又没钱怎么办....值得借鉴 思考 离职365天,“家里蹲”的他们过得还好吗?O网页链接O目前有多少人 离职的 家里蹲的 举个手目前有多少人 离职的 家里蹲的 举个手辞职了家里蹲快四个月,无所事事O网页链接离职前你必须面对(想好)的几个问题 O网页链接离职前你必须要面对或是想清

【深夜畅谈】如何成为一名比逼格更逼格的java程序员

听说近几年的android很火啊,很多java程序员直接转android开发,为啥? 首先是感兴趣,我觉得这是一个重要原因,毕竟基于android平台的软件以及android系统,深深勾起来程序员的好奇心,自然而然就充满了浓厚兴趣. 然后就是赚大钱,整体来看,做android开发的程序员确实待遇比做java的要高一些. 再者一个主因就是所谓的跟风.随大流!这个我就不多说了. 前几天看到公司的招聘信息,ios程序员,二年工作经验,待遇8K至15K.不由的感叹,ios有这么牛吗?于是上网浏览了一下,

为什么很多Java程序员都转行做大数据了?

如今大数据发展的越来越成熟.各大企业纷纷成立大数据部门.尤其BAT等一线互联网公司每天处理的数据量都是TB级别.大数据部门已成为这些企业的核心部门,数据已成为企业最核心的资产. 但是大数据人才缺口巨大,据统计目前全国的大数据人才仅46万,未来3-5年内大数据人才的缺口将高达150万. 因此大数据工程师薪资也比其他职位高出不少.以北京为例.1-3年的大数据工程师平均年薪30-50万,3-5年经验的大数据工程师年薪在50-80万.想学习的同学欢迎加入大数据学习扣群:458345782,有大量干货(零

浅谈:合格的Java程序员应该具备的能力

和大家分享下合格的Java程序员在工作中都需要具备哪些能力呢? 一.文档习惯 良好的文档是正规研发流程中非常重要的环节,作为Java程序员,30%的工作时间写技术文档是很正常的,而作为高级程序员和系统分析员,这个比例还要占的更高. 二.规范化,标准化的代码编写习惯 一些外国知名软件公司的规矩,Java代码的变量命名,代码内注释格式,甚至嵌套中行缩进的长度和函数间的空行数字都有明确规定,良好的编写习惯,不但有助于Java代码的移植和纠错,也有助于不同技术人员之间的协作. 三.测试习惯 软件研发作为

JAVA程序员为什么拿不到想要的offer这些原因你都了解吗

Java程序员在面试中不通过的七大原因前言: 如今正是毕业生找工作的高峰期,那么在面试Java程序员的过程中会出现什么问题呢?有哪些问题是初入职场的Java程序员在面试中最容易犯的呢?下面,我总结了Java程序员在面试中不通过的五个原因,作为大家的参考. JAVA程序员为什么拿不到想要的offer这些原因你都了解吗1.能力对职位来说过高或太低 因为能力低而没有机会这很正常,那么能力太高也会影响录用吗?其实这要从稳定性及用人部门领导的需求来看.一般来讲能力很高的人对职位的期望值也就越高,一旦这个职

你想成为优秀的Java程序员吗?

Java是全世界最受欢迎的3大编程语言之一,它可以开发出许多实用的WEB应用程序和桌面应用程序,更重要的一点,Java是跨平台的语言——编写一次,可以再任何地方运行.另外,Java也很容易入门,如果你想成为一名优秀的Java程序员,那么请你扪心自问一下,你熟悉下面的知识点吗? 面向对象概念 抽象类和接口 构造函数和初始化函数的执行顺序 文件读写和序列化 集合——List.Map.Set 访问控制 异常处理 泛型 Java关键字——Static , Final , volatile, synchr

[转] Java程序员学C#基本语法两个小时搞定(对比学习)

Java程序员学C#基本语法两个小时搞定(对比学习) 对于学习一门新的语言,关键是学习新语言和以前掌握的语言的区别,但是也不要让以前语言的东西,固定了自己的思维模式,多看一下新的语言的编程思想. 1.引包 using System;java用import2.构造函数和java语法相同3.析构函数  变量和类的对象都有生命周期,生命周期结束,这些变量和对象就要被撤销.  类的对象被撤销时,将自动调用析构函数.一些善后工作可放在析构函数中完成.  析构函数的名字为~类名,无返回类型,也无参数.Per

非计算机专业想要成为Java程序员怎么办

在编程语言中,Java被成为最广泛的编程语言,这可不是浪得虚名的,Java在我们的各个行业中都有它的身影,比如财务.银行.证券等金融行业,移动.电信等通信行业,大型网站以及后台开发等等.当下成为一个Java程序员,不仅好找工作,而且还是高薪工作. 很多非计算机专业的朋友想要成为一名Java程序员,该怎么办呢?Java是门高端编程语言,其他的不用提,计算机基础一定是要有的,专门学过计算机的朋友,可能不需要担心这个问题,但是没有学过计算机的朋友,比较忧心这个问题,担心自己学不好Java. 学不好Ja