26-CDN

Zoella Lv3

一、概念

CDN 全称为 “Content Delivery Network”,即内容分发网络。
CDN 是一种特殊的 DNS服务器。

二、原理

当使用域名访问某一个网站时(比如访问 www.baidu.com),分为两步:

  • 首先解析出该域名所对应的 IP地址(DNS 域名解析)
  • 然后将 Http请求包 路由到 IP地址 所对应的服务器

(注:IP地址和网卡相绑定,一个服务器可以有多个网卡,即可能有多个IP地址)

1、域名解析

域名解析分为两种:

  • 将域名解析为IP地址
  • 将域名解析为另一个域名(CNAME)

购买一个域名之后,需要去映射一个 IP地址,用 Map 表示:{域名:IP}。
也可以给某域名取一个别名,比如给 www.baidu.com 取一个别名 test.baidu.com,用 Map 表示:{域名:CNAME},这里的CNAME就是别名。

域名解析,实际上就是解析出指定域名所对应的 IP地址,或该域名的一个 CNAME。

没有CNAME的情况:
图1

有CNAME的情况:
图1

特别注意:在有 CNAME 的情况下,CNAME 在域名解析的过程中承担了代理的角色,这是 CDN 实现的关键。

2、资源分类

服务器上的资源分为两种:

  • 静态资源:这种资源通常很少变动,比如图片,视频,css,js 等等
  • 动态资源:这种资源不同用户不同时刻访问通常是不一样的,比如 ftl,jsp 等等。

(1)集群(动态资源)

在全国各地部署服务器,每个服务器上都有相同的动态资源,并且还需配置相应的数据库,这就涉及到数据同步等问题。这种做法专业一点就是集群,目前集群架构最多是三地五中心,因为全国多地集群成本太高。

(2)CDN服务器(静态资源)

在每个服务器上只部署静态资源是成本较低的方式,因为静态资源通常不涉及数据库,也能提高用户访问速度。

现在有很多 CDN供应商,只要把系统接入并将静态资源传给 CDN服务,这些静态资源将会自动分布到世界各地。

在访问静态资源时,DNS系统 进行域名解析的过程中,如何解析出离用户最近的 IP地址?
这就需要使用 CDN服务器,该服务器知道用户当前所在位置,和用户访问的域名对应哪些 IP地址,及这些 IP地址 分别在哪。

这样,只要用户在通过某域名访问静态资源时,配置自己电脑的 DNS地址 为 CDN专用DNS服务器,就可以解决问题了,但不能要求所有用户都去修改自己电脑的 DNS地址,这时就要利用 DNS 中的 CNAME 了。

3、负载均衡和缓存

(1)负载均衡系统

如果没有返回 IP地址,本地DNS服务器 会向对应的 CDN服务器 再次发送请求,通过 CDN负载均衡系统 进行智能调度:

  • 看用户的 IP 地址,查表得知地理位置,找相对最近的边缘节点
  • 看用户所在的运营商网络,找相同网络的边缘节点
  • 检查边缘节点的负载情况,找负载较轻的节点
  • 其他,比如节点的“健康状况”、服务能力、带宽、响应时间等

结合以上因素,得到最合适的边缘节点,并把该节点返回给用户,用户就能就近访问 CDN 的缓存代理。

整体流程如下:

图3

(2)缓存代理

缓存系统是 CDN 的另一个关键组成部分,缓存系统会缓存最常用的资源,有两个衡量 CDN服务质量 的指标:

  • 命中率:用户访问的资源恰好在缓存系统里,可直接返回给用户,命中次数与所有访问次数之比
  • 回源率:缓存里没有,必须用代理的方式回源站取,回源次数与所有访问次数之比

缓存系统可以划分层次为:一级缓存节点和二级缓存节点,一级缓存直连源站,二级缓存直连用户。
在回源时,二级缓存首先找一级缓存,一级缓存没有才回源站,可有效减少真正的回源。

图4

现在的商业 CDN命中率都在 90% 以上,相当于把源站的服务能力放大了 10 倍以上

补充

域名解析有多种记录类型,最常用的有:

  • A记录:一个域名对应一个IP地址
  • CNAME:一个域名对应另外一个域名
  • NS:将子域名指定其他DNS服务器解析
  • Title: 26-CDN
  • Author: Zoella
  • Created at : 2024-10-29 09:15:20
  • Updated at : 2024-11-04 10:52:51
  • Link: https://zoella-w.github.io/2024/10/29/26-CDN/
  • License: This work is licensed under CC BY-NC-SA 4.0.