首页 > 国内 >

CDN是什么,用了CDN就一定比不用更快吗

发布时间:2023-01-06 13:11来源: IT之家阅读量:18780   

对于开发生来说,CDN这个词既熟悉又陌生。

从事开发的你很少需要接触这个,但总能听到别人提起。

我们都听说过它可以加快速度,我们可能知道为什么,但我们更深入。

用CDN一定比不用快吗。

我觉得有点傻不过没关系今天,我们从另一个角度来认识一下CDN

什么是CDN。

我们一般用mysql数据库来存储。

文本存在于mysql中

当我们需要检索这些数据时,我们需要读取mysql数据库。

但是由于mysql的数据存在于磁盘上,单个实例的读取性能几乎是5kqps,相当不错了。

看起来还行,但是对于稍微大一点的系统来说,就有点着急了。

为了提高性能,我们在mysql之前再加一层内存作为缓存层,比如常说的redis在读取数据时,优先选择在内存中读取,只有在无法读取时,才能在mysql中读取,大大减少了读取mysql的次数有了这个组合拳,阅读性能轻松到几万qp

Mysql和redis

好了,到目前为止,我们说的都是平时容易接触到的开发场景。

比如我有一张很帅的照片就下面这个

每次听到有人翻唱蔡健雅的《放手》,就忍不住想发这张图。

用小品《我还是忘不了》。

那么问题来了。

再回到mysql和redis的场景,无非是存储层加缓存层。

存储层和缓存层

而缓存层,不能继续使用redis,需要改用CDN。

CDN可以简单理解为对象存储对应的缓存层。

CDN和OSS

CDN的工作原理

对于CDN和对象存储,现在让我们看看它们是如何工作的。

1667103075060

CDN的查询流程

第一阶段:你的电脑首先会通过DNS协议获取域名cdn.xiaobaidebug.top对应的IP。

第一步和第二步:首先检查浏览器缓存,然后查看操作系统中的/etc/hosts缓存如果没有,您将询问最近的DNS服务器最近的DNS服务器上有相应的缓存吗如果有,就退回去

第三步:如果最近的DNS服务器上没有对应的缓存,则查询根域,一级域,二级域,三级域服务器。

第二阶段:对应上图中的step8浏览器带着这个IP访问cdn节点,然后cdn节点返回数据

在上面的第一阶段过程中,提到了许多新术语,如CNAME,根域名,一级域名等它们在之前的《DNS中有哪些优秀的设计值得学习不知道的可以看看

我们知道DNS的目的是通过域名获取IP地址。

但这只是它众多功能中的一个。

DNS报文有很多种类型,其中A类是用域名来查域名对应的IP地址CNAME类型使用域名来检查该域名的别名

对于常见的域名,DNS解析后可以直接获得域名对应的IP地址。

例如,我使用dig命令发出DNS请求并打印进程数据。

$ dig+trace xiaobaidebug . top,,回答部分:小白debug.top.600INA47.102.221.141

可以看到xiaobaidebug.top直接解析得到对应的IP地址47.102.221.141。

看到这里,问题又来了。

为什么加个CNAME这么麻烦。

CNAME所指的其实是CDN专用的DNS域名服务器对于整个DNS系统来说,它只是小型DNS域名服务器中的一个,看起来和其他域名服务器没什么两样,平平淡淡DNS请求也将正常进入此服务器

但是,当请求真正击中它的时候,它的特殊性就体现出来了当查询请求进入域名服务器时,普通DNS域名服务器返回域名对应的部分IP就足够了,但是CDN专用的DNS域名服务器会要求将最近服务器的IP返回给调用者

CDN的专用DNS解析服务器会返回最近的CDN节点的IP怎么知道哪个服务器IP有最近的调用者

可以看到最近这个词实际上是用双引号括起来的。

CDN的专用DNS域名服务器实际上是由CDN提供商提供的比如阿里云当然知道自己有哪些CDN节点,以及这些CDN服务器当前的负载情况,响应延迟甚至权重,也能知道调用者的IP地址是什么它可以通过来电者的IP知道自己所属的运营商及其大概位置,根据条件选择最合适的CDN服务器,也就是所谓的最近

比如说假设地理位置最近的CDN机房流量较多,响应较慢,但地理位置较远的服务器可以更好地响应当前请求,按理说可能会选择地理位置较远的CDN服务器

也就是说,选择的服务器不一定是地理上最近的,但一定是目前最合适的服务器。

背后的源头是什么。

像下面这样。

这就好比问你能不能不用redis直接从mysql读取和显示文本数据。

当然可以。

但是成本较高这里的成本可以指性能成本,也可以指通话成本看下图

1667101182393

但是看到这里,问题又来了。

在上面的截图中,红框里有一个词叫回到源头。

但是cdn服务器本质上是一层缓存,不是数据源,对象存储才是数据源。

所以参观的过程就变成了如下。

1668605964836

那么回到源头还会发生什么。

除了上面提到的cdn,如果你拿不到数据,它会返回源站,如果cdn上的缓存过期,它也会返回源站。

另外,即使有缓存,而且缓存没有过期,也可以通过cdn提供的开放接口来触发,但是我们很少有机会接触到这个。

也是读取,细分为是直接从cdn读取,还是从源读取对象存储后由cdn返回。

直接缓存和不缓存回源是有区别的。

那么,我们有什么办法来判断是否发生了倒源呢。

是的我们继续往下看

如何判断是否发生货源回流。

以我们的云对象存储和CDN为例。

然后通过下面的标签开关查看响应头信息。

检查响应标头

回到源头

此时响应头下X—Cache的值为MISS TCP_MISS这意味着缓存未命中会导致CDN将oss检查回源,并在获得数据后返回

1667095186020

X—Cache的值变成HIT TCP_MEM_HIT,也就是命中缓存。

这是一个云的做法,和其他的东西,如腾云韵,也有很大的不同,几乎所有的相关信息都可以在响应头中找到。

用CDN比不用更快吗。

看到这里,就可以回答文章开头的问题了。

如果不接入CDN,直接接入源站,流程是这样的。

更新直接访问源站

但是,如果CDN已连接,并且CDN上没有缓存的数据,它将触发回源。

更新CDN,回归本源

相当于在原有流程上增加了一层CDN调用流程。

也就是使用CDN的时候会比不使用的时候慢,因为CDN缓存丢失,返回源。

如果缓存丢失,可能是cdn中根本没有这样的数据,也可能是有这样的数据但后来过期了。

这两种情况都很正常,大部分时候都不需要治疗。

Cdn刷新预热

当然,也可以通过灰度释放的模式,让少部分用户体验新功能,让这些用户热起来cdn

就是曾经有过这个数据,后来过期了对于热点数据,可以适当增加cdn数据的缓存时间

167344813600什么情况下不应该使用CDN。

从上面的描述来看,CDN最大的优势是对于来自世界各地的用户来说,可以就近分配CDN节点获取数据,在重复获取相同文件数据时可以加速缓存。

然后反过来想,问题就来了。

什么情况下不应该使用CDN。

注意上面两个加粗的要点。

1668612494972

摘要

如果使用CDN,实际上会比不使用时慢。

CDN最大的优势在于,对于来自世界各地的用户,可以就近分配CDN节点获取数据,当多次重复获取同一文件数据时,具有缓存加速的功能如果你的服务和对象存储都在内网,文件数据不太可能被重用,实际上就没有必要访问cdn

声明:本网转发此文章,旨在为读者提供更多信息资讯,所涉内容不构成投资、消费建议。文章事实如有疑问,请与有关方核实,文章观点非本网观点,仅供读者参考。

?