01 它是干嘛的
CloudFront 是 AWS 的第一款 CDN:把网页、图片、视频等静态内容缓存到遍布全球的边缘节点,让用户就近获取,只有没缓存的内容才回源站。它和 S3、EC2 等自家服务天然打通,是 AWS 上几乎每个对外网站都会用到的加速层。
02 为什么会有它
访客离服务器越远,打开网页就越慢
在没有 CDN 的年代,网站通常只有一台服务器。如果它在美国,那么亚洲、欧洲的访客每打开一个页面,都要跨越半个地球往返很多次。网页里一张图是一次请求,一个页面几十次请求,来回一算就是好几秒,用户早就关掉走人了。
另一个难题是峰值。你按平时的流量买了机器,某天内容火了,流量涨了十倍,源站一下子被打满;为了这种偶发的高峰去买十倍的机器,又意味着全年大部分时间都在浪费钱。
CDN 的思路很像商业世界里早就存在的做法:既然货要在各地卖,与其让每个顾客都飞到总仓提货,不如在各地开分仓,提前把货铺过去。分仓就是边缘节点,铺货就是缓存。CloudFront 在 2008 年把这套机制做成了「点几下就能开通」的云服务,从此加速和安全都成了配置项,而不是一个需要自建的庞大工程。
03 它怎么工作
CloudFront 的机制是「就近接入 + 缓存命中 + 回源穿透」:让用户连上离他最近的节点,能直接给的内容就直接给,不能给的才替用户回源站取,取回来顺手存在本地给下一个人用。
一次访问是怎么被就近满足的:缓存命中与回源
- 1① 创建一个分发
在控制台指定内容的来源(如 S3 桶或你自己的服务器),CloudFront 会给一个专属域名。
- 2② 把域名解析指向它
把网站的访问地址交给 CloudFront,此后所有访客的第一站都先到它,这是加速生效的前提。
- 3③ 就近接入边缘节点
系统会自动把访客的请求送到地理与网络上都最近的节点,用户并不需要知道连的是哪台机器。
- 4④ 命中缓存直接返回
节点上已经有这份内容且未过期,就直接返回给用户,响应时间通常只有几十毫秒,源站毫无压力。
- 5⑤ 未命中则回源并留下副本
节点替用户去源站把内容取回来,一边交给用户、一边按规则留在本地缓存,下一个用户就直接命中了。
04 谁在用它
把页面和图片挂上 CDN,全球访客打开速度从数秒降到一秒以内,源站压力也大幅下降。
商品图与活动页缓存在边缘,大部分流量根本不落到源站,服务器不必为峰值扩容十倍。
大文件通过遍布全球的节点分发,用户下载更快,源站的带宽成本也明显降低。
面向多个国家与地区的业务,用同一张网络统一接入,不必逐地采购带宽与机房。
前端的页面、脚本、图片放在对象存储上,由 CloudFront 分发,无需自建服务器。
05 怎么用
不必写代码,配置几项即可上线;关键是把缓存规则想清楚,别把不该缓存的内容缓存出去。
- 01在控制台创建分发,选择内容来源:静态资源可选 S3 桶,动态内容填自己的服务器地址。
- 02配置缓存策略:静态目录设长有效期,带登录信息的接口路径设为不缓存。
- 03把网站域名解析指向 CloudFront 给的地址,并申请免费的 HTTPS 证书。
- 04如需从私有对象存储取内容,配置好访问授权,不要为了省事把整个桶设为公开。
- 05内容更新时按路径发起缓存刷新,或用带版本号的新文件名让它自然失效。
- 06开启日志与用量监控,观察命中率、流量与常见回源路径,据此继续优化。
避坑提示
- !带用户身份信息的接口千万不能缓存,否则可能把甲的页面返回给乙,属于严重的数据泄露。
- !缓存刷新是要收费的,别指望频繁刷新兜底;高频变更的内容用新文件名更省钱也更可靠。
- !一定要确认源站只接受 CloudFront 过来的请求,否则别人可以绕过加速层直连源站,加速与防护都白做。
06 关键概念
- 边缘节点
- 分布在各地的小机房,只负责缓存与转发,因此离用户近、响应快。
- 回源
- 节点上没有缓存内容时,替用户原路去问源站要,这个过程叫回源。
- 缓存命中率
- 一百次请求里有多少次不用回源。命中率越高,源站越轻松、用户越快。
- 缓存有效期
- 缓存内容多久算过期。设得越长越省回源,但内容更新越慢。
- 缓存刷新
- 主动作废某个节点上的旧内容,让它重新回源取最新版。