先明确问题:这不是“哪家云最好”

国内云与海外云的差异不是简单的快慢问题,而是用户位置、监管边界、网络路径、计费方式和运维习惯叠加后的结果。同一个静态博客,主要读者在国内时,备案域名加国内边缘节点通常能获得更稳定的访问;主要读者在欧美时,直接部署到海外区域反而更简单。

因此,我习惯把决策拆成四层:用户分布、合规与数据、网络路径、成本与维护。逐层判断,避免一开始就进入产品参数对比。

第一层:用户在哪里,延迟就在哪里

用户分布决定区域选择。可以先粗略统计访问来源,把用户分成中国大陆、亚太、欧美和其他地区。个人项目如果没有统计,可以先用小样本拨测或页面性能指标观察,而不是凭感觉。

用户结构建议起点需要额外验证
主要在国内备案域名 + 国内接入或边缘节点回源链路、缓存命中率、证书续期
国内与海外均衡静态资源全球分发,动态 API 按区域部署跨区数据同步、缓存失效、合规边界
主要在海外海外主区域 + 就近 CDN国内访问可用性是否需要专门优化

延迟只是第一眼指标。对静态站来说,缓存命中率和 TLS 握手距离常常比源站机器规格更影响体感。

第二层:合规和数据边界先于技术方案

如果网站面向中国大陆提供服务并使用国内节点,通常需要完成网站备案,并在页面底部放置备案号。个人博客尤其要注意:内容型站点保持文章浏览即可,评论、论坛、用户上传等功能会引入内容审核和备案类别变化等问题。

数据层面同样要先划边界。用户日志、统计数据、备份文件、对象存储桶的公开策略,都应该在架构图上标出来。海外服务并非可以随意存放所有数据,国内服务也不是所有业务都必须放到国内,关键是明确服务对象、数据来源和法规要求。

实践建议:把“公开静态内容、用户行为数据、运维日志、敏感配置”分成四类存储和访问策略。公开内容进 CDN,行为数据最小化采集,日志设置保留周期,敏感配置只放密钥管理服务。

第三层:网络路径决定真实体验

跨境链路的波动性容易被低估。同一个域名在不同运营商、不同时段的表现可能差异很大。静态资源可以通过全球 CDN 缓解,动态请求则更依赖区域部署和回源路径。

我会优先检查这些点:DNS 解析是否就近、CDN 是否命中、回源是否走合适协议、TLS 会话复用是否开启、HTTP/2 或 HTTP/3 是否可用。对图片和脚本,使用内容哈希文件名能显著提高长期缓存效果。

# 常用拨测视角
dig +short example.com
curl -w 'dns=%{time_namelookup} connect=%{time_connect} tls=%{time_appconnect} total=%{time_total}\n' \
  -o /dev/null -s https://example.com/

# 观察缓存与协议
curl -I https://example.com/ | grep -Ei 'cache|content-encoding|HTTP/'

拨测只能作为样本,不能替代真实用户监控。条件允许时,记录 Web Vitals 中的 LCP、INP 和 CLS,比单纯看服务器响应时间更接近用户体验。

第四层:成本要看单价,也要看运维成本

云厂商定价页展示的是资源单价,实际成本还包含流量、请求次数、存储读写、公网出口、日志存储和跨区传输。静态站常见的情况是计算几乎免费,流量和请求费用占大头;API 服务则可能被数据库、带宽和网关费用主导。

  • 流量:关注 CDN 出口、回源流量、跨区流量三类,不要只看实例带宽。
  • 请求:对象存储和 CDN 通常按请求次数计费,小文件多时影响明显。
  • 闲置:长期不用的快照、公网 IP、旧版本函数和测试桶是隐性成本。
  • 时间:个人项目的时间成本很真实。能用一个平台解决的问题,没必要为了微弱性能差异维护三套控制台。

一个可复用的决策流程

  1. 列用户分布,确定主要服务区域。
  2. 列数据类型,确认合规和隐私要求。
  3. 区分静态内容与动态请求,静态资源优先全球缓存。
  4. 选择最小可运行架构,记录费用口径。
  5. 上线后用真实访问数据复核区域和缓存策略。

这个流程不会自动给出唯一答案,但能避免常见错误:为了省钱选择距离用户很远的区域、为了架构先进引入无法维护的多云、或者忽略备案与数据边界导致后期迁移成本暴增。

小结

国内云与海外云的选择,本质是用户、合规、网络和维护能力的匹配。对个人博客来说,最稳妥的方案通常是把静态内容放在边缘,动态能力保持克制,费用结构简单,并能随时迁移。这样即使后续访问规模变化,也不需要推倒重来。