CDN

2020/04/29 计算机网络

CDN(Content Distributed Network)是内容分发网络的缩写。

由于 Github Pages 的速度一直不怎么样,今天就想起来要加速一下;本来 Pages 就是静态博客,加个 CDN 就得了。刚开始还想找个免费的蹭下,后来发现还要认证就算了,还是直接上阿里云比较省心,全家桶。

这一两年还算补了下网络知识,发现很多东西都是旧瓶装新酒罢了,CDN 也不例外;CDN 本质上就是分布式缓存服务器,为客户的服务器分摊流量压力。

以下这张图是从阿里云文档里扒出来的。

原理

cdn

如上图,用户要访问https://www.a.com。在https://www.a.com使用 CDN 服务之后,跟普通的请求的差别其实不大。

  1. 用户访问https://www.a.com

  2. 本地 DNS 根据返回该域名事先设置好别名(CNAME);

  3. 本地 DNS 向 DNS 调度系统查询最合适的节点 IP;

  4. 向用户返回节点 IP;

  5. 用户向节点请求;

  6. 如果节点不存在缓存,则转发给源站(真正的内容提供商),如果存在缓存且缓存有效,则直接返回缓存;

  7. 节点根据缓存策略进行缓存;

  8. 返回内容给用户;

这里的关键就在 DNS 调度系统,DNS 调度系统会选出最好(根据 IP 所在地等信息进行判断)的 CDN 节点 IP 给用户;

这里要提下,有一种负载均衡策略就是通过 DNS 来做的,事先为域名生成多条 A 记录,用户访问时,DNS 服务器就会从这些 A 记录中随机(这里不太清楚具体的选择策略)选出一个,这样就能达到用户分流的效果。DNS 负载均衡策略主要存在以下缺点:

  1. DNS 是多级解析的,每级都可能进行缓存;
  2. 无法监控服务器状态;
  3. 负载均衡策略过于简单;

我们在购买 CDN 服务时,其中一个步骤就是将目标域名解析为云服务商私有域名的别名(CNAME),这应该最关键的配置了,只有将域名映射到云服务端私有域名上,才能对流量进行控制。

阿里云 CDN 服务

下面就简单说明一下为 Pages 添加 CDN 的步骤,我用的是全站加速(其实是由于普通的 CDN 总是 301 重定向,目前还没找到原因,迫不得已用的全站,不过步骤基本一样)。

  1. 添加域名信息;

    domainname

    其中加速域名,就是希望资源加载速度能快点加载的域名;但这里要注意,不是实际要访问的域名,而是用来该问加速资源用的域名,例如为https://pages.github.io中的 css, js 之类的资源分配的资源域名https://pages-cdn.github.io。之所以要跟实际访问域名区分开,是因为实际的域名已经对 DNS A 记录了,不能再添加 CNAME 记录。

    源站信息也是要注意的,源站可以是资源所在服务器的 IP 或者域名,当然,跟以上的加速域名是不一样的。

  2. 等审核完,会出现一条记录,需要我们添加一条域名解析 CNAME 记录,云解析这里就不细说了。

    domainname

  3. 这里还有个回源配置的回源 Host以及静态协议跟随回源要设置一下;这里的回源 Host是用来指定主机的,由于服务器可能存在虚拟主机,所以需要用域名指定主机,HTTP/1.1 的 Host 头部一个道理;注意,如果是 HTTPS 的站点,CDN 也必须要配置 HTTPS,阿里云上的 HTTPS 设置中就有免费的,申请后等一下审核就行;

    domainname

  4. 最后一个关键步骤就是将需要缓存的目录、文件和缓存时间进行设置。

除了第一次访问慢点之外,后面访问的速度还不错。

Search

    Table of Contents