全面了解高性能利器——CDN(内容分发网络)

1,203 阅读10分钟

一、CDN的基本介绍

在讲解 CDN 之前我们先看个生活实例:

在淘宝购物: 我们在淘宝购物,大部分个人卖家只是在一个地方发货,江浙沪以外的地方好像收货都比较慢

在京东购物: 而我们在京东上买自营产品的话,它会根据我们的收货地点,在全国范围内找离我们最近、送达最快的仓库,不管我们在江浙沪,还是新疆西藏内蒙古,我们的收货时间都会大大减少。京东的物流体系就类似于 CDN。

从上面这个例子我们可以大致了解 CDN 的基本原理,即将相关静态资源放在各地的 CDN 服务器。

1. 简介: CDN 的全称是 Content Delivery Network,即内容分发网络,由于 CDN 是为加快网络访问速度而被优化的网络覆盖层,因此被形象地称为网络加速器,CDN 可以加快用户访问网络资源的速度和稳定性,减轻源服务器的访问压力。

2. 实现: 通过在网络各处放置节点服务器所构成的在现有的互联网基础之上的一层智能虚拟网络,CDN 系统能够实时地根据网络流量和各节点的连接和负载状况以及到用户的距离和响应时间等综合信息将用户的请求重新导向离用户最近的服务节点上,加快访问速度。

3. 目的: 使用户可就近取得所需内容,解决网络拥挤的状况,提高用户访问网站的响应速度。

4. 优势: CDN 节点解决了跨运营商和跨地域访问的问题,访问延时大大降低;大部分请求在 CDN 边缘节点完成,CDN 起到了分流作用,减轻了源站的负载。

二、CDN的工作流程

在不使用 CDN 的情况下:

  1. 用户在自己的浏览器中输入要访问的网站域名
  2. 浏览器向本地 DNS 服务器请求对该域名的解析
  3. 本地 DNS 服务器中如果缓存有这个域名的解析结果,则直接响应用户的解析请求
  4. 本地 DNS 服务器中如果没有关于这个域名的解析结果的缓存,则以递归方式向整个 DNS 系统请求解析,获得应答后将结果反馈给浏览器
  5. 浏览器得到域名解析结果,就是该域名相应的服务设备的 IP 地址
  6. 浏览器向服务器请求内容
  7. 服务器将用户请求内容传送给浏览器

在使用 CDN 的情况下: DNS 服务器根据用户 IP 地址,将域名解析成相应节点的缓存服务器 IP 地址,实现用户就近访问,使用 CDN 服务的网站,只需将其域名解析权交给 CDN 的全局负载均衡设备,将需要分发的内容注入 CDN,就可以实现内容加速了。

  1. 当用户点击网站页面上的内容 URL,经过本地 DNS 系统解析,DNS 系统会最终将域名的解析权交给 CNAME 指向的 CDN 专用 DNS 服务器

  2. CDN 的 DNS 服务器将 CDN 的全局负载均衡设备 IP 地址返回用户

  3. 用户向 CDN 的全局负载均衡设备发起内容 URL 访问请求

  4. CDN 全局负载均衡设备根据用户 IP 地址,以及用户请求的内容URL,选择一台用户所属区域的区域负载均衡设备,告诉用户向这台设备发起请求

  5. 基于以下这些条件的综合分析之后,区域负载均衡设备会向全局负载均衡设备返回一台缓存服务器的 IP 地址:

    • 根据用户 IP 地址,判断哪一台服务器距用户最近
    • 根据用户所请求的 URL 中携带的内容名称,判断哪一台服务器上有用户所需内容
    • 查询各个服务器当前的负载情况,判断哪一台服务器尚有服务能力
  6. 全局负载均衡设备把服务器的 IP 地址返回给用户

  7. 用户向缓存服务器发起请求,缓存服务器响应用户请求,将用户所需内容传送到用户终端。如果这台缓存服务器上并没有用户想要的内容,而区域均衡设备依然将它分配给了用户,那么这台服务器就要向它的上一级缓存服务器请求内容,直至追溯到网站的源服务器将内容拉到本地。

对比下 CDN 服务部署前后的区别:

image.png

三、CDN缓存

缓存是空间换时间的思路,通过使用多余的空间,换来更快的访问速度。

  • 不使用cdn缓存时,所有的用户都直接访问源服务器:

  • 使用cdn缓存时,客户端浏览器先检查是否有本地缓存是否过期,如果过期,则向 CDN 边缘节点发起请求,CDN 边缘节点会检测用户请求数据的缓存是否过期,如果 CDN 数据没有过期,则直接响应用户请求,此时一个完成 http 请求结束;如果 CDN 数据已经过期,那么 CDN 还需要向源站发出回源请求,来拉取最新的数据。

缓存优点:CDN 的分流作用不仅减少了用户的访问延时,也减少的源站的负载

缓存缺点:当网站更新时,如果 CDN 节点上数据没有及时更新,即便用户在浏览器使用 Ctrl+F5 的方式使浏览器端的缓存失效,也会因为 CDN 边缘节点没有同步最新数据而导致用户访问异常

解决 CDN 缓存更新的办法:

1.调用 CDN 服务商提供的刷新缓存接口

2.资源 url 参数加时间戳,每次更新时时间戳也跟随更新,重新使 CDN 边缘节点同步源服务器最新数据

http://www.cdn.com/static/images/test.png # 没加时间戳
http://www.cdn.com/static/images/test.png?_t=202012290910 # 加了时间戳

四、CDN & 静态资源

静态资源本身具有访问频率高、承接流量大的特点,因此静态资源加载速度始终是前端性能的一个非常关键的指标。CDN 是静态资源提速的重要手段。

淘宝

京东

掘金

我们随手打开一个网站点开一个静态资源,可以看到它都是从 CDN 服务器上请求来的,可以看出"静态资源走 CDN" 是最佳实践。

五、CDN的应用场景

1. 网站站点/应用加速

站点或者应用中大量静态资源的加速分发,建议将站点内容进行动静分离,动态文件可以结合云服务器 ECS,静态资源如各类型图片、html、css、js 文件等,建议结合 对象存储 OSS 存储海量静态资源,可以有效加速内容加载速度,轻松搞定网站图片、短视频等内容分发

2. 视音频点播/大文件下载分发加速

支持各类文件的下载、分发,支持在线点播加速业务,如 mp4、flv 视频文件或者平均单个文件大小在 20M 以上,主要的业务场景是视音频点播、大文件下载(如安装包下载)等,建议搭配对象存储 OSS 使用,可提升回源速度,节约近 2/3 回源带宽成本。

3. 视频直播加速

视频流媒体直播服务,支持媒资存储、切片转码、访问鉴权、内容分发加速一体化解决方案。结合弹性伸缩服务,及时调整服务器带宽,应对突发访问流量;结合媒体转码服务,享受高速稳定的并行转码,且任务规模无缝扩展。目前CDN直播加速已服务内部用户测试并优化,即将上线

4. 移动应用加速

移动 APP 更新文件( apk 文件)分发,移动 APP 内图片、页面、短视频、UGC 等内容的优化加速分发,提供 httpDNS 服务,避免 DNS 劫持并获得实时精确的 DNS 解析结果,有效缩短用户访问时间,提升用户体验。

六、CDN的结构组成

1. 部署架构

CDN 系统设计的首要目标是尽量减少用户的访问响应时间,为达到这一目标,CDN 系统应该尽量将用户所需要的内容存放在距离用户最近的位置。也就是说,负责为用户提供内容服务的 Cache 设备应部署在物理上的网络边缘位置,我们称这一层为 CDN 边缘层。CDN 系统中负责全局性管理和控制的设备组成中心层,中心层同时保存着最多的内容副本,当边缘层设备未命中时,会向中心层请求,如果在中心层仍未命中,则需要中心层向源站回源。

不同 CDN 系统设计之间存在差异,中心层可能具备用户服务能力,也可能不直接提供服务,只向下级节点提供内容。如果 CDN 网络规模较大,边缘层设备直接向中心层请求内容或服务会造成中心层设备压力过大,就要考虑在边缘层和中心层之间部署一个区域层,负责一个区域的管理和控制,也保存部分内容副本供边缘层访问。

如图是一个典型的 CDN 系统三级部署示意图:

2. 设备组成

CDN 网络中包含的功能实体主要由以下几个部分组成:

(1)内容缓存设备

内容缓存为 CDN 网络节点,位于用户接入点,是面向最终用户的内容提供设备,可缓存静态 Web 内容和流媒体内容,实现内容的边缘传播和存储,以便用户的就近访问。

(2)内容交换机

内容交换机处于用户接入集中点,可以均衡单点多个内容缓存设备的负载,并对内容进行缓存负载平衡及访问控制。

(3)内容路由器

内容路由器负责将用户的请求调度到适当的设备上,内容路由通常通过负载均衡系统来实现,动态均衡各个内容缓存站点的载荷分配,为用户的请求选择最佳的访问站点,同时提高网站的可用性。内容路由器可根据多种因素制定路由,包括站点与用户的临近度、内容的可用性、网络负载、设备状况等。负载均衡系统是整个 CDN 的核心,负载均衡的准确性和效率直接决定了整个 CDN 的效率和性能。

(4)内容管理系统

内容管理系统负责整个 CDN 的管理,是可选部件,作用是进行内容管理,如内容的注入和发布、内容的分发、内容的审核、内容的服务等。

参考文章: