这一个月,我把手上负责的出海业务静态资源全部切到了AWS CloudFront,回源站放回上海机房,做这件事之前,组里就有两种声音:一是说CloudFront全球节点多,稳;二是说国内厂商的海外节点也不差了,还便宜,我这个人不爱听广告,只信日志和监控面板,现在30天数据出来了,我直接拿事实说话。
先说测试环境,业务是面向东南亚和欧洲用户的App内图片、CSS、JS资源,源站国内,数据量大概日均请求600万次,平均文件体积220KB,我特意挑了阿里云CDN的海外加速作为对比项,因为这是国内出海业务最常用的方案之一,两边都开了默认压缩和缓存策略,回源协议都是HTTP/2。
从核心性能数据看,CloudFront在新加坡和东京的首字节时间(TTFB)分别稳定在38ms和45ms,而阿里云对应的数字是52ms和67ms,差距不算悬殊,但连看10天,CloudFront的抖动明显小,P95和P99只有个位数的波动,法兰克福和弗吉尼亚的测试更明显,CloudFront的下载速度几乎是国内CDN海外节点的1.4倍,特别是在晚高峰时段,丢包率差了将近3个百分点,这说明什么?AWS的骨干网互联确实不是白给的,尤其跨大洲的回源路径优化,国内厂商还是有差距。
但光看性能是不全面的,运维这行,最怕就是性能好但账单吓人,我拉了一个月的成本明细,CloudFront的理论费用构成是:流量费按区域阶梯计价,新加坡0.085美元/GB,欧洲0.09美元/GB,加上请求费每万次0.0075美元,以及回源流量费(从源站到边缘节点)也是按量收费,而阿里云海外加速的流量单价大约低20%,请求费更是低了将近40%,最坑的是回源流量,CloudFront的回源带宽费单独收,我每天回源流量大约1.8TB,这部分一个月下来直接占了总账单的22%,国内CDN很多套餐里把回源流量算得比较含糊,甚至有些直接免了,所以账面价格CloudFront比阿里云贵了31%,这是实打实的结论。

在CloudFront上跑了一个月生产流量,我把账单和性能摊开聊聊
贵的部分有没有换来别的价值?有,我对比了缓存命中率,CloudFront平均92.4%,阿里云是88.1%,别小看这4个点,意味着我源站的出网带宽每天少跑了近200GB,源站服务器的CPU和带宽压力明显降低,更关键的是刷新和失效API,CloudFront的批量失效操作基本在10秒内生效,而阿里云有时候要等两分钟以上,对我这种频繁发版的公司来说,这体验差异很大,CloudFront的实时日志接入Kinesis后,我可以在5秒内看到边缘节点的请求详情,而国内CDN家的日志中心一般有5到10分钟的延迟,排查问题的时候,这分钟级差异很要命。
我也要提缺点,最直接的痛点是国内访问CloudFront完全没有边缘节点,国内用户会默认解析到日本或新加坡,延迟直线上升,如果业务有国内流量,必须搭配其他加速方案,或者用Global Accelerator做穿梭隧道,那是另一套成本,CloudFront的配置项非常细,但控制台和文档都是英文,对刚从国内控制台转过来的人来说,学习曲线很陡,我组里一个初级运维光搞懂行为和缓存策略就花了三天。
最后说结论,如果你的用户主要在海外,特别是欧美和东南亚,且你已在用AWS生态,CloudFront是值得多花钱的,它的稳定性、API响应速度和日志实时性,能直接降低运维压力,但如果你的业务重心在国内,或者预算卡得紧,国内CDN的海外节点也够用了,没必要为那10%的性能提升多付三成费用,我个人以后的做法是:核心动态API走CloudFront,静态资源让国内CDN分流,场景不同,选型不同,这才是正常的思路,不吹不黑,数据就摆在这儿,谁用谁知道。
发表评论