跳转至

CDN

Content Distribution Network 内容分发网络

CDN 最初是为了快速分发静态资源而设计的,而如今 CDN 所能做的事情已经远远不止于此,比如:安全防御、协议升级、状态缓存、修改资源、访问控制等等

内容分发,指的就是获取源站资源的过程,主要有两种方式:

  • 主动分发:将内容从源站或者其他资源库推送到用户边缘的各个 CDN 缓存节点上,特别常用的资源甚至会直接缓存到手机 APP 的存储空间或者浏览器的 localStorage 中。
  • 被动回源:由用户访问所触发全自动、双向透明的资源缓存过程,如果不是自建 CDN,而是购买云厂商的 CDN 服务站点,多数采用的就是这种方式。

仅从网络传输的角度看,一个互联网系统的传输速度取决于以下四点因素:

  1. 用户客户端的入口带宽
  2. 网站服务器的出口带宽
  3. 用户与网站之间跨运营商涉及的互联节点的带宽
  4. 用户到网站之间的物理链路传输时延(爱打游戏的同学应该都清楚,延迟 Ping 值比带宽更重要)

第一个问题只能通过换一个更好的宽带才能解决之外,剩下三个都能通过CDN来显著改善。


文本类数据通常会写入 MySQL 数据库,由于 MySQL 的数据存储在磁盘上,为了提高读取性能,会加一层 Redis 做缓存,把数据放在内存里。

像图片视频这种媒体类型的对象,存储层通常使用专业的云对象存储,比如

  • 亚马逊的 S3
  • 阿里云的 OSS
  • 七牛云

而 CDN 则类似缓存层的作用

内部服务不需要 CDN

访问 CDN 资源,会先到 CNAME 对应的 CDN 专用的 DNS 调度服务器,然后由 DNS 调度系统返回最近的 CDN 服务器 IP

直接从 OSS 读取数据,叫做回源,直接回源比 CDN 回源资费要贵很多。

回源比例 = 回源次数 / 总请求次数

查看图片的 HTTP 返回头,有个类似 X-Cache 的字段(使用不同厂商的 CDN 名字不太一样),值若为

  • TCP MISS 表示未命中缓存导致 CDN 回源,首次访问不存在或者过期失效
  • TCP memory HIT 表示命中缓存

更换域名,所有资源都需要重新缓存,可以在 CDN 管理平台上提前手动将热点数据更新预热