CDN¶
Content Distribution Network 内容分发网络
CDN 最初是为了快速分发静态资源而设计的,而如今 CDN 所能做的事情已经远远不止于此,比如:安全防御、协议升级、状态缓存、修改资源、访问控制等等
内容分发,指的就是获取源站资源的过程,主要有两种方式:
- 主动分发:将内容从源站或者其他资源库推送到用户边缘的各个 CDN 缓存节点上,特别常用的资源甚至会直接缓存到手机 APP 的存储空间或者浏览器的 localStorage 中。
- 被动回源:由用户访问所触发全自动、双向透明的资源缓存过程,如果不是自建 CDN,而是购买云厂商的 CDN 服务站点,多数采用的就是这种方式。
仅从网络传输的角度看,一个互联网系统的传输速度取决于以下四点因素:
- 用户客户端的入口带宽
- 网站服务器的出口带宽
- 用户与网站之间跨运营商涉及的互联节点的带宽
- 用户到网站之间的物理链路传输时延(爱打游戏的同学应该都清楚,延迟 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 管理平台上提前手动将热点数据更新预热