首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >CDN 为什么这么设计?

CDN 为什么这么设计?

作者头像
神说要有光zxg
发布于 2022-11-11 08:49:17
发布于 2022-11-11 08:49:17
2.4K0
举报

过去几十年,计算机网络把几乎全世界的计算机都连接了起来,我们只要把静态资源和动态的代码部署到服务器上,然后启动服务监听某个端口,这样世界各地的计算机就都能访问该网站。

但是这样有个问题,资源最终还是通过物理层网络线路和设备传输的,每经过一段线路、一个网络设备都有一些耗时,所以客户端和服务器相距越远,网站打开速度就越慢。

这就像你从海南买了一件东西,如果你人在广州的话,那可能很快就收到了,因为传输距离近,但如果你在北京的话,那可能就要多等几天了,因为中间经过的线路、节点都比较多。

但这样肯定不行的,用户体验会很差。怎么解决这个问题呢?

离得越远网站打开速度就越慢,很容易想到,如果部署到很多个地方,当用户访问网络的时候,访问最近的那个不就行了?

这就像快递都有一些中转的仓库,可以存放一些货物,如果你人在北京,要买一个海南的东西,恰好北京的仓库里有,那岂不是很快就可以收到了。

思路是没问题,但是怎么实现呢?

用户是通过域名访问网站的,那能不能通过 DNS 服务器来实现这个功能呢?

前面写过一篇 DNS 原理的文章,这里简单回顾下:

客户端访问某个域名的时候,会先查找本地 hosts 文件,如果能查到 ip 就直接访问。

否则会向本地 DNS 服务器发请求,这个是联通、移动等运营商提供的每个城市都有的 DNS 服务器。由它去域名服务器发送解析域名的请求,然后把结果返给客户端。

域名是分层解析的,有根域名服务器、顶级域名服务器、权威域名服务器三层,比如 image.baidu.com 会先向根域名服务器发请求查询 com 的顶级域名服务器的 ip,然后再向 com 顶级域名服务器查询 image.baidu.com 的权威域名服务器的 ip。查询到权威域名服务器之后,任意层级的域名都会在这里解析(所以叫权威域名服务器)。

看到这个权威域名服务器的时候,不知道大家是否就想到怎么实现 CDN 网络了。

能不能在权威域名服务器这一层根据客户端的 ip 做一下负载均衡呢?比如北京来的 DNS 请求就返回北京机房的服务器的 ip,上海来的 DNS 请求就返回上海机房的服务器的 ip。

确实可以这样实现内容的就近分发,这样的负载均衡网络就叫做 CDN (Conent Delivery Network)

但是实现这样一个 CDN 网络需要在全国建立多个机房,成本太高了,所以只有像百度、阿里、腾讯这类大公司才会自建 CDN,一般情况下我们都会买第三方的 CDN 服务来用。

这些公司建好了 CDN 网络,实际上自己也是用不完的,也会对外提供 CDN 加速服务。

第三方的 CDN 服务自然也要提供一个 DNS 服务器,也就是实现根据 ip 返回不同城市的服务器的 ip 的那个。

比如这是百度云 CDN 的原理图:

用户向本地 DNS 服务器发请求之后,经历根域名、顶级域名的 DNS 解析,最终会转给权威 DNS 服务器。这时候只要权威 DNS 服务器再转给 baidu 的 DNS 服务器就可以了,这样就能接入 CDN 服务。

baidu 的 DNS 服务器实现了负载均衡,会根据请求 ip 所在的城市,返回不同城市的服务器的 ip。也就实现了就近分发的网络加速功能。

那这个从权威 DNS 到 baidu 的 DNS 的转发是怎么实现的呢?

DNS 的记录有很多种类型,比如:

A 代表 address,记录域名对应的 ip。

CNAME 代表域名还有一个别名,可以向那个域名来查 ip。

MX 代表件名后缀对应的域名或者 IP

看到这个 CNAME 类型,大家应该就想到怎么实现转发了。

只要自己在 DNS服务器上配一条 CNAME 的记录,指向 CDN 服务器的域名就可以了。

比如你用某云的 CDN 的时候,第一步也是要配置下自己的 DNS 服务器的 CNAME 指向它:

这样,当你访问某个域名的时候,解析域名的权威服务器会返回 CDN 服务的 DNS 服务器的域名,然后再向这台 CDN 的 DNS 服务器发送解析域名的请求,这时候它就可以根据 ip 所在城市来返回一个就近城市的服务器给你。

当然,也可以再做一层 CNAME 转发,比如 CDN 的 DNS 服务器把域名解析转给城市的 DNS 服务器,然后城市的 DNS 服务器再根据不同机器的负载情况来返回一台离得近而且负载比较小的服务器的 ip 给客户端。

这样客户端就能从最近的服务器下载静态资源,从而更快地打开网站。

如果访问的资源没有的时候,会向源站服务器发请求来拿对应的资源并且缓存下来,之后再此访问就不用访问源站了。

这个缓存时间是怎么指定的呢?

CDN 服务会有一个控制台,可以设置不同资源的缓存时间,当然,请求的 header 里也有 expries 和 Cache-Control 来控制缓存时间,这俩的生效的优先级也是可以设置的。

这样的 CDN 服务国内和国外是分开的,如果网站目标用户只是国内的,那只需要买下国内的 CDN 服务,国外用户访问慢点就慢点,如果网站国外用户也很多,那还需要买下国外的 CDN 服务。

比如某云的国内 CDN 节点分布是这样的:

海外的话则是另一套 CDN 网络:

总结

为了加快网站打开速度,我们会使用 CDN 服务,它并不是一个网络协议,只是基于 DNS 协议实现的加速功能的网络。

它的原理就是域名的权威 DNS 服务器把请求转给 CND 的负载均衡的 DNS 服务器,然后根据 ip返回不同城市的 DNS 服务器,再根据负载来选择一台就近的服务器 的 ip 返回。

这样客户端就能从最近的负载最小的服务器拿到资源。

CDN 的缓存设置可以根据 header 来,也可以在控制台设置一些规则,这两者生效的优先级也可以设置。

CDN 网络的建设成本还是很大的,只有大公司会自建,一般我们都会买三方服务,而且国内和海外的 CDN 都是分开的,如果主要服务国内用户,那只买国内的 CDN 服务即可。

有了这套覆盖全国、全球的 CDN 节点网络之后,我们才能更快地打开网站。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-06-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 神光的编程秘籍 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
手把手教学:提取PDF各种表格文本数据(附代码)
PDFPlumb最适合提取电脑生成的PDF,而不是扫描的PDF。 它是在pdfminer和pdfmine.six基础上设计的。
量化投资与机器学习微信公众号
2019/09/24
3.6K1
手把手教学:提取PDF各种表格文本数据(附代码)
如何使用python提取pdf表格及文本,并保存到excel
pdf是一种便携式文档格式,由Adobe公司设计。因为不受平台限制,且方便保存和传输,所以pdf非常受欢迎。
派大星的数据屋
2022/04/03
3.7K0
如何使用python提取pdf表格及文本,并保存到excel
为了提取pdf中的表格数据,python遇到excel,各显神通!
不知大家在工作中有没有过提取pdf表格数据的经历,按照普通人的思维,提取pdf的表格数据的方法可能会选择复制粘贴,但这是一个相当繁杂且重复的工作。而今天我们会讲解如何用python和excel来提取pdf的表格数据,看二者哪个更为方便!
Python与Excel之交
2021/08/05
3.8K0
[784]python解析PDF表格
别问我为啥知道2比1好,你试试用1去解析一些带有文字格式的表格,带有复杂的表头的表格,你就知道啦!我在这里并没有在瞎说,而且还得装的的java的,后者只装一个的ImageMagick的就行,而且ImageMagick的很有用的
周小董
2020/03/28
1.3K0
PDF文件信息不会提取怎么办??别急!Python帮你解决
在大多数常规数据文件中,pdf文件因其特殊的性质导致对其信息进行智能解析、提取、甚至批量化处理造成一定的困难,本期推文就教你如何使用Python第三方库pdfplumber (https://github.com/jsvine/pdfplumber) 对pdf文件进行解析及提取。
DataCharm
2021/02/22
1.7K0
PDF文件信息不会提取怎么办??别急!Python帮你解决
用python解析pdf中的文本与表格【pdfplumber的安装与使用】
我们接触到的很多文档资料都是以pdf格式存在的,比如:论文,技术文档,标准文件,书籍等。pdf格式使得用机器从中提取信息格外困难。
blmoistawinde
2019/10/30
5.2K0
零代码编程:用ChatGPT提取PDF文件一页中的多个表格
使用PdfPlumber库提取“F:\北交所全部上市公司的招股说明书20230710\艾能聚.pdf”第174页中的所有表格,
AIGC部落
2024/06/24
2820
零代码编程:用ChatGPT提取PDF文件一页中的多个表格
数据导入与预处理-第4章-数据获取python读取pdf文档
1、什么是pdf? PDF(Portable Document Foramt)是一种便捷式文本格式,由Adobe系统公司开发,其文件可以在任意操作系统中保持原有的文本格式。PDF文件中可以包含图片、文本、多媒体等多种形式的内容。
IT从业者张某某
2022/11/12
1.3K0
数据导入与预处理-第4章-数据获取python读取pdf文档
如何使用Python提取PDF表格及文本,并保存到Excel
PDF是一种便携式文档格式,由Adobe公司设计。因为不受平台限制,且方便保存和传输,所以PDF非常受欢迎。
IT阅读排行榜
2021/04/20
5.5K0
如何使用Python提取PDF表格及文本,并保存到Excel
用 Python 批量提取 PDF 的表格数据,保存为 Excel
需求:想要提取 PDF 的数据,保存到 Excel 中。虽然是可以直接利用 WPS 将 PDF 文件输出成 Excel,但这个功能是收费的,而且如果将大量 PDF转 Excel 的时候,手动去输出是非常耗时的。我们可以利用 Python 的第三方工具库 pdfplumber 快速完成这个功能。
杰哥的IT之旅
2022/05/17
2.8K0
用 Python 批量提取 PDF 的表格数据,保存为 Excel
Python将表格文件的指定列依次上移一行
  本文介绍基于Python语言,针对一个文件夹下大量的Excel表格文件,对其中的每一个文件加以操作——将其中指定的若干列的数据部分都向上移动一行,并将所有操作完毕的Excel表格文件中的数据加以合并,生成一个新的Excel文件的方法。
疯狂学习GIS
2024/04/19
7070
Python将表格文件的指定列依次上移一行
Python骚操作,提取pdf文件中的表格数据!
在实际研究中,我们经常需要获取大量数据,而这些数据很大一部分以pdf表格的形式呈现,如公司年报、发行上市公告等。面对如此多的数据表格,采用手工复制黏贴的方式显然并不可取。那么如何才能高效提取出pdf文件中的表格数据呢?
诸葛青云
2019/03/31
8K0
Python骚操作,提取pdf文件中的表格数据!
python提取pdf文档中的表格数据、svg格式转换为pdf
https://www.analyticsvidhya.com/blog/2020/08/how-to-extract-tabular-data-from-pdf-document-using-camelot-in-python/
用户7010445
2020/08/28
1.6K0
软件测试|教你用Python处理PDF文件(四)
之前我们介绍了从PDF文件中提取文本内容以及从PDF文件提取图片的方法,除了文本内容与图片,表格也PDF文件中常见的内容,提取表格内容时,我们不再使用PyPDF2库来实现操作,Python有多个库来实现提取表格内容,本文我们将分别介绍多个库提取PDF中表格的操作。
霍格沃兹测试开发Muller老师
2023/08/09
5730
Python按要求提取多个txt文本的数据
  本文介绍基于Python语言,遍历文件夹并从中找到文件名称符合我们需求的多个.txt格式文本文件,并从上述每一个文本文件中,找到我们需要的指定数据,最后得到所有文本文件中我们需要的数据的合集的方法。
疯狂学习GIS
2023/11/27
7220
Python按要求提取多个txt文本的数据
Python随机抽取多个Excel的数据从而整合为一个新文件
  本文介绍基于Python语言,针对一个文件夹下大量的Excel表格文件,基于其中每一个文件,随机从其中选取一部分数据,并将全部文件中随机获取的数据合并为一个新的Excel表格文件的方法。
疯狂学习GIS
2024/05/14
4490
Python随机抽取多个Excel的数据从而整合为一个新文件
Python:解析PDF文本及表格——pdfminer、tabula、pdfplumber 的用法及对比
pdfminer3k 是 pdfminer 的 python3 版本,主要用于读取 pdf 中的文本。
丹枫无迹
2019/01/22
19.8K1
用Python制作可视化大屏,特简单!
今天将手把手带你爬取奥运会相关信息,并利用可视化大屏为你展示奥运详情。让一个没关注过奥运会的朋友,也能够秒懂奥运会。
快学Python
2021/09/07
1.8K0
三大神器助力Python提取pdf文档信息
今天这篇文章是今年最后一篇文章了,因此也是一篇非常有用的技术文章,你可以现在只了解一下并进行收藏,等你需要用到的时候再拿出来看一看,这样就好了。
啃饼思录
2019/02/26
21.1K0
Python批量复制Excel中给定数据所在的行
  本文介绍基于Python语言,读取Excel表格文件数据,并基于其中某一列数据的值,将这一数据处于指定范围的那一行加以复制,并将所得结果保存为新的Excel表格文件的方法。
疯狂学习GIS
2023/10/06
7430
Python批量复制Excel中给定数据所在的行
推荐阅读
相关推荐
手把手教学:提取PDF各种表格文本数据(附代码)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档