cdn是什么?

       cdn即内容分发网络(Content Delivery Network),是现有Internet中增加一层新的网络架构(网络架构是进行通信连接的一种网络结构。即网络的大概框架,就像写作文大纲似的,或者象我国的高速铁路网“四纵四横”,就是一种架构。),由遍布全球的高性能节点构成。这些高性能的服务节点会按照一定的缓存策略存储业务内容,当用户向该业务内容发起请求时,请求会被调度至最接近用户的服务节点,直接由服务节点快速响应,有效降低用户访问延迟,提升可用性。

  说说我对cdn的理解,举个例子,就比如我想吃一种零食,但是这种零食只有千里之外的零食店才能买得到,但是突然这家零食店开了分店,把分店开到了我家旁边,那这样我就不用跋山涉水地到很远的地方买喜欢的零食,在我家旁边就能轻易买到,因为这家零食店非常火爆,经常被人挤得水泻不通,现在这家零食店开了几十家分店,这样就减少了总店的压力,还使客户购买商品更加方便。cdn在其中起的作用就是把总部的零食库从远处同步到分店,万一总店出了新品,客户想要的新品分店没有,那这个时候分店还没来得及进行商品同步,那可以打个电话给总店告知情况,总店就得赶紧把新品清单快速同步给分店,这样客户就很开心了,以后在分店也能吃到新品了~

  CDN 的核心点有两个,一个是缓存,一个是回源。

这两个概念都非常好理解。对标到上面描述的过程,“缓存”就是说我们把总店的零食清单(资源)copy 一份到 分店(CDN 服务器)这个过程,“回源”就是说 分店 发现自己没有这个种类的零食(一般是缓存的数据过期了),转头向总店(根服务器或者它的上层服务器)去要这个零食的信息(资源)的过程。

可以通过一张图来概括cdn的工作流程:

CDN的工作原理就是将您源站的资源缓存到位于全国各地的CDN节点上,用户请求资源时,就近返回节点上缓存的资源,而不需要每个用户的请求都回您的源站获取,避免网络拥塞、分担源站压力,保证用户访问资源的速度和体验。假设我们部署了一个软件系统,则它处在互联网的某个节点上,如图所示。

 

通常系统所在的节点由一个IP地址标定。所有指向该系统的请求都会在网络上经过多次路由后到达该节点。

如果我们在网络的多个位置部署系统,便可以使请求分配多个系统上,减少每个系统的并发请求数。不仅如此,我们还可以让每个用户的请求落到与该用户最近的一个系统上,这样便降低了网络延时,从而减小了平均响应时间,可谓一举两得。

这里所说的“最近”不是地理位置上的最近,而是网络拓扑结构上的“最近”。

在网络拓扑中,一个节点与另一个节点的距离会根据网络负载情况、内容的可用性、设备工作状况等发生变化,因此这种“最近”的关系是实时变动的。

但是上述系统会带来一个严重的维护问题:如果同一个系统被部署到不同的位置,则我们需要同时部署和维护不同位置的多个系统,会带来很高的系统间协作成本、部署维护成本。

因此,在实际生产中,会将图片、视频、附件等对流量消耗大且不经常改变的静态资源部署到互联网网络的多个位置,而核心系统只部署在一个位置。这就构成了我们常见的内容分发网络(Content Delivery Network,简称CDN)。

 

借用阿里云官网的例子,来简单介绍CDN的工作原理。

假设通过CDN加速的域名为www.a.com,,接入CDN网络,开始使用加速服务后,当终端用户(北京)发起HTTP请求时,处理流程如下:

  1. 当终端用户(北京)向www.a.com下的指定资源发起请求时,首先向LDNS(本地DNS)发起域名解析请求。
  2. LDNS检查缓存中是否有www.a.com的ip地址记录。如果有,则直接返回给终端用户;如果没有,则向授权DNS查询。
  3. 当授权DNS解析www.a.com时,返回域名CNAME www.a.tbcdn.com对应ip地址。
  4. 域名解析请求发送至阿里云DNS调度系统,并为请求分配最佳节点ip地址。
  5. LDNS获取DNS返回的解析ip地址。
  6. 用户获取解析ip地址。
  7. 用户向获取的ip地址发起对该资源的访问请求
  8. 如果该IP地址对应的节点已缓存该资源,则会将数据直接返回给用户,例如,图中步骤7和8,请求结束。
  9. 如果该IP地址对应的节点未缓存该资源,则节点向源站发起对该资源的请求。获取资源后,结合用户自定义配置的缓存策略,将资源缓存至节点,例如,图中的北京节点,并返回给用户,请求结束。

 

 

CDN的机制和缓存机制

机制:

一般来说,互联网更快速度地数据传输与源数据和客户端有密切关系。将源数据的缓存副本放置得与客户端比较接近,当用户需要访问数据时,从最接近的位置检索它将比从原

始结点检索会更快儿些。这种做法通常称为分布式缓存,这也是CDN 的作用所在。

具体地说,我们将关注是通过 HTTP 访问的文件。虽然所有用户看到相同的 URL文件,不同的用户将被路由到不同的 CDN 节点。这是 CDN的要点 : 将请求路由到就近的

CDN 节点,以提高响应速度。

cdn的缓存机制:

CDN边缘节点缓存策略因服务商不同而不同,但一般都会遵循http标准协议,通过http响应头中的Cache-control: max-age的字段来设置CDN边缘节点数据缓存时间。当客

户端向CDN节点请求数据时,CDN节点会判断缓存数据是否过期,若缓存数据并没有过期,则直接将缓存数据返回给客户端;否则,CDN节点就会向源站发出回源请求,从源站拉

取最新数据,更新本地缓存,并将最新数据返回给客户端。所以,如果我们修改了内容,最好加个版本号,来容CDN重新获取资源,从而减少不必要的麻烦,比如

app.js?v=20160717 或者 style.css?v=2016071701

CDN服务商一般会提供基于文件后缀、目录多个维度来指定CDN缓存时间,为用户提供更精细化的缓存管理。CDN缓存时间会对“回源率”产生直接的影响。若CDN缓存时间较短,CDN边缘节点上的数据会经常失效,导致频繁回源,增加了源站的负载,同时也增大的访问延时;若CDN缓存时间太长,会带来数据更新时间慢的问题。开发者需要增对特定的业务,来做特定的数据缓存时间管理。

cdn缓存命中率

如果CDN缓存命中率低,则会导致源站压力大,静态资源访问效率低。您可以针对导致CDN缓存命中率低的具体原因,选择对应的优化策略,来提高CDN的缓存命中率。

CDN在静态资源加速场景的应用,是将静态资源缓存在距离客户端最近的CDN节点上。您的客户端访问该资源时,直接从缓存中获取资源,避免通过较长的链路回源。因此,CDN缓存命中率的高低直接影响用户体验,而保证较高的缓存命中率也成为了CDN的核心课题。

CDN缓存命中率包括字节缓存命中率和请求缓存命中率。
  • 字节缓存命中率 = CDN缓存命中响应的字节数 / CDN所有请求响应的字节数
    说明 字节缓存命中率越低,回源流量越大,源站的流出流量越大,源站的带宽资源以及其他的负载越大,因此回源流量代表了源站服务器接收到的负载压力,在业务使用中主要关心字节缓存命中率。
  • 请求缓存命中率 = CDN缓存命中的请求数 / CDN所有的请求数

 

 

 

 

https://www.zhihu.com/question/36514327?rf=37353035

 

posted @ 2021-04-20 11:13  打代码的侠义豪情  阅读(1052)  评论(0)    收藏  举报