美文网首页
CDN 是什么?

CDN 是什么?

作者: wayyyy | 来源:发表于2023-01-15 16:52 被阅读0次

转载一篇介绍CDN的工作原理文章:CDN 是什么

CDN 是什么

对于数字和文本类型的数据,比方说名字和电话号码相关的信息。我们需要有个地方存起来,我们通常会用mysql数据库去存。


image.png

当我们需要重新将这一数据取出的时候,就需要去读mysql数据库。

但因为mysql的数据是存在磁盘上的,单台实例,读性能到差不多5kqps就已经很不错了。看起来还凑合,但对于稍微大一点的系统,就稍微有点捉急了。
为了提升点性能,我们在mysql之前再加一层内存做缓存层,比如常说的redis,读数据优先到内存里读,读不到才到mysql里读,大大减少了读mysql的次数。有了这套组合拳,读性能轻松上万qps。

image.png

好了,到这里,我们说的都是我们平时比较容易接触的开发场景。
但如果现在我要处理的,不再是上面提到的文本类数据,而是图片数据。
那么问题来了。
这张图片数据应该存在哪?,又该从哪里读?
我们回过头去看mysql和redis的场景,无非就是存储层加缓存层。


image.png

对于图片这样的文件对象,存储层不太可能再用mysql,应该改用专业的对象存储,比如亚马逊的S3(Amazon Simple Storage Service,注意后面是三个S开头的单词,所以叫s3),或者阿里云的oss(Object Storage Service)。下面的内容,我们就用比较常见的oss去做解释。
而缓存层,也不能继续用redis了,需要改成使用CDN(Content Delivery Network,内容分发网络)。可以将CDN简单理解为对象存储对应的缓存层。


image.png

现在就可以回答上面的提问,对用户来说,这张图片数据存在了对象存储那,当有需要的时候,会从CDN那被读出来。

CDN 的工作原理

有了CDN和对象存储之后,现在我们来看下他们之间是怎么工作的,我们平时看到的图片,可以右键复制查看它的URL。

image.png

会发现图片的URL长这样。

https://cdn.xiaobaidebug.top/1667106197000.png

其中前面的cdn.xiaobaidebug.top就是CDN的域名,后面的1667106197000.png是图片的路径名。

当我们在浏览器输入这个URL就会发起HTTP GET请求,然后经历以下过程。(kunlunaq.com是阿里CDN专用的DNS调度系统)


image.png
回源是什么?

上面的图片URL,是https://cdn域名/图片地址.png的形式。也就是说这张图片是访问CDN拿到的。那么,直接访问对象存储能不能拿到图片数据并展示?

当然能。这就像问,不走redis,直接从mysql中能不能读取到文本数据并展示一样。
但这样成本更高,这里的成本,可以指性能成本,也可以指调用成本。看下下面这个图。


image.png

可以看到直接请求oss的费用差不多是通过cdn请求oss的两倍。

但看到这里,问题又又来了,上面的截图里,红框里有个词叫"回源",那么什么是回源?

当我们访问https://cdn域名/图片地址.png时,请求会打到cdn服务器上面。但cdn服务器本质上就是一层缓存,并不是数据源,对象存储才是数据源。
第一次访问cdn获取某张图片时,大概率在cdn里并没有这张图片的数据,因此需要回到数据源那去取出这份图片数据。然后再放到cdn上。下次再次访问cdn时,只要缓存不过期,就能命中缓存直接返回,这就不需要再回源。

于是访问的过程就变成了下面这样:


image.png

那还有哪些情况会发生回源呢?
除了上面提到的cdn上拿不到数据会回源站外,还有cdn上的缓存过期失效了也会导致回源站。
另外,就算有缓存,且缓存不过期,也可以通过cdn提供的开放接口来触发主动回源,但这个我们比较少机会能接触到。

怎么判断是否发生回源

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

假设我要请求下面这张图https://cdn.xiaobaidebug.top/image/image-20220404094549469.png

为了更方便的查看响应数据的http header,我们可以用上postman。通过GET方法去请求图片数据。然后通过下面的tab切换查看response header信息。


image.png

此时查看response header下的X-Cache的值是 MISS TCP_MISS。意思是未命中缓存导致CDN回源查oss,拿到数据后再返回。

那此时CDN里肯定是有这张图片的缓存了。我们可以试着再执行一次 GET 方法获取图片。


image.png

X-Cache的值就变成了 HIT TCP_MEM_HIT,这就是命中缓存了。

这个是某里云的做法,其他比如腾某云啥的,也都大差不差,几乎都可以从response header里找到相关的信息。

相关文章

  • CDN原理及为自己的网站部署

    CDN是什么? CDN (Content Delivery Network or Content Ddistrib...

  • CDN | CDN是什么?

    CDN是什么? 用大白话来讲明白,CDN全称是Content Delivery Network,翻译过来即是内容分...

  • java专题之大型分布式系统中的缓存架构

    缓存概述 缓存的分类 CDN缓存 CDN缓存是什么 CDN(Content Delivery Network内容分...

  • 网络面试-0x08如何理解CDN?

    一、CDN是什么? CDN(Content Delilvery Network) 内容分发网络 构建在现有网络基础...

  • CDN在网站中扮演的是什么角色为什么大部分都在使用CDN

    CDN在网站中扮演的是什么角色呢?为什么大部分的网站都有使用CDN,是什么原因让CDN如此受欢迎呢? 对于这一系列...

  • CDN是什么?

    CDN 由于在不同的地域或者不同的运营商的用户访问网站的相应速度存在差异,为了提高用户的访问速度,需要在用户和服务...

  • CDN是什么

    今天收到了京东物流,突发奇想CDN服务不就是“云”上的京东物流吗!于是打算写一篇用京东物流作比较的CDN介绍,相信...

  • CDN是什么?

    随著国际网路的发展,客户在使用网路时对网站的浏览速度和效果愈加重视,但由于网民数量激增,网路访问路径过长,从而使客...

  • CDN 是什么?

    转载一篇介绍CDN的工作原理文章:CDN 是什么[https://mp.weixin.qq.com/s/pdw8m...

  • CDN与DNS

    一、前置知识 1、CDN是什么? CDN的全称是Content Delivery Network,即内容分发网络(...

网友评论

      本文标题:CDN 是什么?

      本文链接:https://www.haomeiwen.com/subject/drtncdtx.html