海外访问速度慢的原因并不是因为服务器配置不好,而是由于物理距离和路由绕行的叠加造成的累积延迟。比如一个源站在美国西海岸的外贸站,在欧洲的用户发出一次请求时,往返的时间可能会超过150毫秒,再加上页面上几十次静态资源请求叠加在一起之后,首屏加载时间超过3秒钟的情况也很常见。CDN加速的作用就是把图片、CSS样式表以及JavaScript代码等静态文件提前推送到离用户最近的边缘节点上,使得每次请求都不再需要经过漫长的海上航行才能到达目的地。

第一步就是动静分离,即源站只保留用户登录、购物车、订单结算等需要动态计算的部分,而把商品图、Banner、JS和CSS全部迁移出去,并放到对象存储中,再通过CDN加速域名来访问。如果这一步没有做好,后面所采用的缓存策略以及安全防护措施的效果就会大打折扣。
缓存规则要根据不同的资源种类来分层进行设置,比如图片、字体、样式表可以设置为30天有效的长时缓存,而HTML页面则限制在10分钟之内以保证更新速度,后台入口、购物车以及支付接口等不放在缓存里以免产生数据混淆。使用Brotli压缩算法可以把文本类资源的体积减少到原来的三分之一左右。节点的选择上主要考虑北美地区的美国西部和东部地区,在欧洲用法兰克福作为中心并且要考虑好数据的合法性问题,在东南亚地区则是利用新加坡节点来覆盖整个区域。
安全设置也不可以忽略不计,源站IP要放在CDN后面,安全组只允许CDN回源IP段通过;防盗链白名单只有本站域名可以访问,并且允许空Referer来兼容海外移动设备直接访问的情况,防止第三方站点盗用图片流量。经过测试发现,在精细化的缓存和压缩策略的作用下,静态资源回源流量可以减少到总流量的20%左右,跨地域访问延迟也会下降40%-70%。
要清楚认识到的是,CDN加速所解决的是“分发路径”的问题,源站本身的数据库查询效率以及动态接口响应速度仍然需要单独去评估。上线之后要一直关注缓存命中率、回源率这两个参数,在缓存命中率保持在八成以上、回源率处于低水平的情况下才能算是配置生效了,并不是说只做了一个域名解析转换就完成了任务。