AWS 云计算:全球第一的光环下,藏着怎样的真相

AWS 云计算:全球第一的光环下,藏着怎样的真相?

AWS 是全球云计算市场占有率第一的厂商,这一地位已持续十余年。但”第一”是否等于”最好”?当我们抛开品牌光环,从架构设计、工程实践、性能数据、价格四个维度进行实测和分析后,得出的结论可能会颠覆很多人的认知。

本文所有结论均基于一手测试数据和抓包分析,不做任何主观外推。


一、设计理念:高可用的代价,用户买单

1.1 强制跨可用区:每次写入都要跨机房

AWS 的 RDS MySQL 默认部署模式是 Multi-AZ(多可用区),主备实例强制分布在不同的可用区。这一设计的出发点是高可用——单个机房故障时可以自动切换。

但代价是什么?

每一次写操作,至少需要跨可用区 2-3 次:

  1. 应用写入主库 → 跨 AZ 写入云盘(EBS 通过网络落盘)
  2. 半同步复制 → 跨 AZ 将 binlog 发送到备库
  3. 备库确认收到 → 跨 AZ 返回 ACK

实测 AWS 可用区间 RTT 约 0.75ms 。这意味着仅网络延迟这一项,每次写操作就要额外付出 1.5~2.25ms 的开销。

实际业务体感:

  • AWS 上一次最简单的 INSERT:3.32ms(业务实测)
  • 同样的业务在 IDC 物理机:微秒级(0.x ms)

差距不是百分之几十,而是 数倍到一个数量级

1.2 对比:阿里云的灵活选择

阿里云 RDS 提供集群模式,允许将 2 个节点部署在同一可用区,在对延迟极度敏感的场景下实现接近 IDC 的性能。用户可以根据自身业务特点在”极致高可用”和”极致低延迟”之间做选择。

AWS 和华为云目前不提供这种灵活性,用户被强制接受跨 AZ 的延迟开销。

1.3 云盘延迟:贵不等于快

AWS 的 EBS 云盘走网络存储,延迟远高于本地盘。实测数据(fio 4K 随机读写,iodepth=1):

云盘类型 读延迟 写延迟
AWS io2(最贵) 393 us 306 us
AWS io1 588 us 868 us
AWS gp3 686 us 994 us

gp3 写延迟接近 1ms ,而阿里云 ESSD 在同等场景下可以做到 0.1~0.2ms 级别。AWS 最高档的 io2 写延迟(306us)仍然是阿里云高性能云盘的 2-3 倍

对于数据库这种对 IO 延迟极度敏感的负载,这意味着每一个 commit 都在额外等待。


二、工程实践:350 秒连接静默丢弃事件

如果说设计理念的问题还可以归结为”理念之争”,那么以下这个事件则暴露了 AWS 在工程实践和事故响应上的严重问题。

2.1 问题现象

业务迁移到 AWS 第 8 代实例(M8/C8/R8,Nitrov6 架构)后,Java 服务每隔 20~30 分钟出现批量连接超时:

1
Connection is not available; request timed out after 5006ms

网络延迟稳定在 ~8ms,0% 丢包,MySQL 健康。

2.2 根因:ENI 连接跟踪超时从 5 天骤降至 350 秒

通过 80 分钟、84595 个包的系统性抓包分析,定位到根因:

AWS 第 8 代实例的 ENI(弹性网卡)安全组连接跟踪,将 TCP Established 默认超时从 432000 秒(5 天)悄然改为 350 秒。

实例代次 Nitro 版本 TCP Established 默认超时
第 7 代及以下 Nitrov5 及以下 432000s(5 天)
第 8 代(M8/C8/R8) Nitrov6 350s

这是一个 1234 倍的缩减 ,且行为极为恶劣——超时后 ENI 静默丢弃数据包,不发送 RST,不通知任何一方。抓包中 84595 个包 0 个 RST

客户端和服务端都以为对方还在,TCP 连接变成”僵尸”——直到下次使用时才发现已死,此时应用只能等待重传超时(数十秒到数分钟),表现为”突然卡住然后超时”。

2.3 AWS 的事故复盘令人失望

这一事件中 AWS 的表现:

  1. 文档滞后:用户 4 月初碰到问题,4 月 7 日定位到中间设备释放连接,4 月 15 日还在抓包验证。而 AWS 直到 4 月 11 日才在文档中加入警告段(通过 Wayback Machine 快照对比确认)

  2. 变更未通知:从 432000s 改到 350s 这种破坏性变更,C8gn GA 公告(2025-06)中未提及超时变更。用户升级实例后莫名遇到连接问题,排查成本极高

  3. 比 NAT Gateway 更”哑”

    • NAT Gateway / NLB 超时后至少一侧会收到 RST,应用能感知”对端断了”
    • ENI conntrack 超时:双侧都收不到 RST ,包被静默丢弃,应用只能靠 OS 重传超时来发现
  4. 复盘质量:AWS 官方的事件复盘未能清晰阐述根因,定位路径模糊

2.4 “350 秒”——AWS 的系统性问题

350 秒这个数字在 AWS 生态中反复出现:

组件 空闲超时 超时后行为
NAT Gateway 350s(固定) 发 RST
NLB(2024-09 前) 350s(固定) 发 RST
GWLB 350s 发 RST
ENI Conntrack(Nitrov6) 350s(默认) 静默丢弃

社区早在 2021 年就有人踩坑(Paramount Tech Blog),2022 年 DBA 博客记录了 JDBC 挂起问题,2023 年 urllib3 专门开了 Issue。这不是新问题,但 AWS 在 ENI 层面重蹈覆辙,且行为更恶劣(不发 RST)。


三、性能数据:Sysbench 实测全面落后

以下数据来自 10 个环境的标准化 Sysbench 测试,使用 16 表 x 1000 万行(约 50GB 数据),MySQL Buffer Pool 16GB,故意制造 IO 压力以考验真实磁盘性能。

3.1 只写场景(oltp_write_only)—— 单线程 QPS

这是最能体现”每次写操作延迟”的场景:

环境 1 线程 QPS 对比 IDC
IDC(物理机) 19,282 基准
IDC(trx1) 15,367 80%
阿里云 12,484 65%
阿里云(trx1+repl) 5,832 30%
AWS io2 8,881 46%
AWS io2(trx1) 3,575 19%
AWS gp3 1,689 9%

AWS gp3 单线程写入性能仅为 IDC 的 9%,仅为阿里云的 14%。 即使用最贵的 io2 云盘(价格是 gp3 的数倍),开启 trx1 后也只有 IDC 的 19%。

3.2 读写混合场景(oltp_read_write)—— 64 线程 QPS

环境 64 线程 QPS 对比阿里云
阿里云 83,569 基准
IDC 69,255 83%
AWS io2 51,002 61%
AWS gp3 64,869 78%

3.3 点查询场景(oltp_point_select)—— 64 线程 QPS

环境 64 线程 QPS 对比阿里云
阿里云 328,098 基准
IDC 299,555 91%
AWS io2 157,480 48%
AWS gp3 228,321 70%

AWS io2 在纯读场景下也只有阿里云的 48% ,令人诧异。

3.4 延迟对比(95 分位,单线程)

场景 IDC 阿里云 AWS io2 AWS gp3
点查询 0.04ms 0.07ms 0.09ms 0.67ms
只写 0.52ms 0.99ms 1.61ms 5.99ms
读写混合 2.81ms 3.30ms 3.89ms 15.00ms

AWS gp3 的只写延迟是 IDC 的 11.5 倍,是阿里云的 6 倍。

3.5 小结

即便使用 AWS 最贵的 io2 云盘(2T 云盘价格是 8C32G 机器的 8 倍),性能仍然大幅落后于阿里云使用普通云盘的配置。云盘延迟是 AWS 数据库性能的致命瓶颈。


四、价格:花更多的钱,买更差的性能

4.1 AWS RDS MySQL 成本

以 16C64G、GP3 2TB 20000 IOPS、3 节点(1 主 1 Multi-AZ 备 1 只读副本)为例:

Intel(db.m5d.4xlarge):

  • 计算:¥204,964/年(折后)
  • 存储(GP3 2TB x3):¥83,589/年(折后)
  • 监控(CloudWatch):¥25,713/年(折后)
  • 合计:约 ¥314,266/年

ARM(db.m6gd.4xlarge):

  • 计算:¥183,718/年(折后)
  • 存储:¥83,589/年(折后)
  • 合计:约 ¥267,307/年(不含监控)

最新一代 Intel(m7i.4xlarge,ap-southeast-1):价格更高。

4.2 性价比对比

维度 AWS(io2,最贵) AWS(gp3) 阿里云
只写 64 线程 QPS 79,754 43,519 110,923
读写混合 64 线程 QPS 51,002 64,869 83,569
云盘写延迟(iodepth=1) 306 us 994 us ~100-200 us
价格档位 极高

AWS 用最贵的云盘(io2),花了最多的钱,性能仍然不如阿里云用普通云盘。

io2 的 2T 云盘年费约为同规格机器的 8 倍——付出如此高昂的代价,换来的却是垫底的性能表现。

4.3 隐性成本

除了直接的资源费用,AWS 还有大量隐性成本:

  • 排障成本:350 秒静默丢连接这种问题,排查周期以周计,需要系统性抓包分析
  • 架构妥协成本:被迫跨 AZ 部署,无法选择同 AZ 低延迟模式
  • 升级风险成本:实例升代时默认行为发生破坏性变更,无事先通知
  • 学习曲线成本:需要深入了解 ENI 连接跟踪、NAT Gateway 固定超时等独有”坑点”

五、结论:惯性认知 vs 客观事实

AWS 能成为全球第一,有其历史原因:起步最早(2006 年)、生态最完善、全球覆盖最广。但”市场占有率第一”不等于”技术最优”,更不等于”性价比最高”。

从本文的实测数据来看:

维度 表现
设计理念 强制跨 AZ,牺牲延迟换高可用,不给用户选择权
工程实践 350s 超时静默丢包,变更不通知,复盘不透明
性能 全场景 Sysbench 垫底,gp3 只写仅为 IDC 的 9%
价格 同等配置显著高于竞品,io2 价格是机器的 8 倍
性价比 花最多的钱,得到最差的性能

很多企业选择 AWS 的原因是”大家都在用””全球第一应该不会错”——这是典型的幸存者偏差品牌惯性。当我们真正用数据说话时,会发现这个”全球第一”的光环,更多是依靠先发优势和生态锁定维持的,而非技术和性价比的领先。

对于数据库这类对延迟和 IO 性能极度敏感的工作负载,在有选择的情况下,AWS 恐怕是最不应该选的那一个。


注:本文所有性能数据均来自实际测试环境,测试工具为 sysbench,测试代码开源。网络分析基于 84595 个包的系统性抓包。价格数据来自官方控制台和报价器。文档变更时间线通过 Wayback Machine 快照验证。