裸金属 vs. AWS RDS:深入探讨 NUMA 感知调优与 PostgreSQL 性能

发布: (2026年3月8日 GMT+8 07:00)
7 分钟阅读
原文: Dev.to

Source: Dev.to

请提供您希望翻译的正文内容,我将按照要求保留源链接并翻译其余部分。

设置:32‑核 NUMA‑感知机器

为了保持比较公平,所有环境(裸金属 vs 云)都分配了 2 vCPU / 8 GB RAM

然而,底层的“金属”存在根本差异。我们的裸金属节点是一台强大的机器:

特性描述
CPU32 核(16 物理 + 16 超线程)
架构NUMA‑感知
存储本地 SSD (SAS)

不同于在带有“噪声邻居”的 hypervisor 上运行的云 VM(t3.large),我们的裸金属主机让 PostgreSQL 进程直接与物理核心和专用内存银行通信。这就是为什么 裸金属上的 2 vCPU ≠ 云上的 2 vCPU

测试配置

标签描述
CNPG Local ①CloudNativePG,local-path 存储,默认调优
CNPG Local ②同一集群,work_mem + 连接数调优
CNPG Local ③同一集群,shared_buffers 最大化
CNPG LonghornCloudNativePG,Longhorn 分布式存储
RDS StandardAWS RDS PostgreSQL 17.6,t3.large
Aurora IO‑OptAWS Aurora PostgreSQL 17.4,I/O‑优化版
Aurora StandardAWS Aurora PostgreSQL 17.4,标准版

1. 基准结果(平均 TPS)

在对完整矩阵进行多次迭代后,最终的平均性能排行榜如下:

环境平均 TPS(读‑写)性能状态
AWS RDS (t3.large)4,826.39峰值性能(可突发)
AWS Aurora (I/O‑Prov.)3,480.31高性能(昂贵)
CNPG + Tuning ③3,350.58效率之王(裸金属)
AWS Aurora Standard3,325.89AWS 标准层
CNPG + Tuning ②3,214.43高性能
CNPG + Longhorn1,654.84分布式存储开销

2. 峰值只读 TPS(最大读取)

Maximum read throughput achieved across all client/thread combinations:

环境峰值读取 TPS最佳配置
RDS Standard13,95510 c / 4 t
Aurora IO‑Optimized10,92810 c / 1 t
Aurora Standard10,02010 c / 1 t
CNPG Local ③8,32510 c / 1 t
CNPG Local ②8,06510 c / 1 t
CNPG Longhorn6,16510 c / 8 t
CNPG Local ①4,75810 c / 8 t

RDS Standard 在原始读取上领先,但 CNPG ① 与 ③(相同硬件)之间的 75 % 差距 证明配置与底层硬件同样关键。

3. 峰值读写 TPS(最大写入)

环境峰值写入 TPS最佳配置
RDS Standard2,83925 c / 8 t
CNPG Local ③2,53925 c / 1 t
Aurora IO‑Opt1,622100 c / 1 t
Aurora Standard1,557100 c / 8 t
CNPG Longhorn1,31825 c / 8 t
CNPG Local ①1,25425 c / 1 t

结果: 调优后的裸金属性能优于两种 Aurora 变体。Aurora 的写入路径涉及分布式存储复制,会增加延迟。我们使用 NUMA 感知的物理核心 加上本地 SSD SAS,在原始写入吞吐量方面表现更佳。

4. 改变一切的调优发现

阶段配置TPS延迟
CNPG 本地 ① (baseline)Default1,1160.896 ms
步骤 1 – 内存争用(调优 ②)work_mem 32 → 4 MB, max_connections 800 → 2002,4020.416 ms
步骤 2 – 缓冲池最大化(调优 ③)shared_buffers = 6 GB, enable HugePages3,3500.394 ms

步骤 1 背后的计算
800 个连接 × 32 MB = 25.6 GB 的潜在内存压力,在 8 GB 节点上 → 持续换页。限制连接数使系统稳定。

步骤 2 利用了主机的直接内存访问和 NUMA 亲和性,在不更换硬件的情况下将延迟降低了 56 %

① 0.896 ms  ████████████████████████
② 0.416 ms  ███████████
③ 0.394 ms  ██████████

5. 最终结论:性能与成本效率

“虽然 RDS Standard 由于 t3.large 实例的突发特性显示出更高的峰值 TPS,但它的价格显著更高,并且一旦 CPU 积分耗尽,长期性能不可预测。对于成本效率为优先的持续生产工作负载,裸金属上的 CNPG 显然是赢家——以 1/10 的成本提供约 70 % 的性能。”

突发式 CPU 陷阱

AWS t3 实例依赖积分制系统。积分用完后,性能会下降。我们的 32‑核裸金属 为您提供 专用资源——无需 CPU 积分,也没有“噪声邻居”。您可以 100 % 使用 CPU,100 % 的时间。

投资回报率因素

我们的裸金属主机(IDCloudHost Paket 13)配备 512 GB RAM。在 AWS 上,拥有 512 GB RAM 的实例费用极高。而在裸金属上,我们可以在这台机器上托管 数十 个高性能集群,费用固定约为每月 ~Rp 7 M。

关键要点

#洞察
1存储就是一切。 使用 Longhorn 的测试显示出巨大的性能下降。对于数据库来说,本地 SSD SAS 调优是不可谈判的。
2“云税”是真实存在的。 你为“托管”标签支付额外费用。使用 CNPG,在 K8s 上管理 Postgres 变得可行且更便宜。
3了解你的工作负载。 如果有不可预测的峰值,RDS 的突发容量非常好。对于稳定的高流量系统,裸金属是基础。
4默认配置是敌人。 work_memmax_connections 的交互是非线性的。永远不要相信默认设置。
5裸金属本身并不慢。 经过适当调优,我们在自有硬件上实现了 RDS 写入吞吐量的 69 %
6Aurora 的写入路径开销。 分布式存储优化的是持久性和读取扩展,而非原始单节点写入速度。
7存储选择 = 配置选择。 你选择的存储层决定了必须调整的调优参数。

ghorn vs. local‑path

性能差异为 33–50 %。存储后端与数据库配置同等重要,需要同等关注。

环境详情

  • CloudNativePG:v1.24 on K8s 1.31
  • 主机:裸金属 32 核(16 物理 / 16 超线程),NUMA 感知
  • 存储:2 × Samsung SM863a Enterprise SSD,RAID 1(SAS 接口)。即使没有 NVMe,适当调优后也实现了 Aurora Standard 性能的 100 %
  • AWS 区域:ap‑southeast‑3(印度尼西亚)
  • 规模因子:100(10 M 行)

— Iwan Setiawan,Hybrid Cloud & Platform Architect
portfolio.kangservice.cloud

0 浏览
Back to Blog

相关文章

阅读更多 »