我们的首选成长型应用的主库
AMD EPYC 4464P
- 128 GB DDR5 ECC
- 2 × 1.92 TB NVMe SSD
- 1 Gbps 不限流量
- 7 个机房
12 个 Zen 4 核心,最高 5.4 GHz,擅长快速完成单条查询;128 GB DDR5 ECC 内存加 2 × 1.92 TB NVMe,可满足大多数 1 TB 以内的 OLTP 数据库。
所有 EPYC 配置均采用 ECC 内存条,在数据传往 CPU 的途中就能纠正比特错误,而不像 DDR5 的片上 ECC 那样只在芯片内部纠错。
内存容量从 128 GB 到 384 GB 不等,让热数据直接从缓冲池读取,而不必访问磁盘。
随机读取和 fsync 密集的提交直接落到本地 NVMe 上,中间没有网络块存储,也没有共享队列。
同一机房内的主库和副本可通过免费的私有 VLAN 互联,跨区域时则可通过 WireGuard 隧道连接。
推荐服务器
适用于从首次部署到繁忙生产环境的各个阶段。库存和价格实时更新;有货的推荐机型 2 分钟内上线。
我们的首选成长型应用的主库
12 个 Zen 4 核心,最高 5.4 GHz,擅长快速完成单条查询;128 GB DDR5 ECC 内存加 2 × 1.92 TB NVMe,可满足大多数 1 TB 以内的 OLTP 数据库。
大型 OLTP 或数据分析
24 个核心、256 GB 8 通道 DDR4 ECC 内存、2 × 3.84 TB NVMe 以及 10 Gbps 网络,适合大型缓冲池、并行查询和快速重建副本。
ClickHouse 与大数据
32 个 Zen 4 核心、384 GB 12 通道 DDR5 ECC 内存和 256 MB L3 缓存,轻松应对数十亿行数据的扫描与聚合,配备 10 Gbps 端口。
规格选型
以下区间仅为粗略参考,并非实测数据:关键在于您有多少数据是热数据,因此在选择之前,请先查看现有系统的缓存命中率。
| 数据库场景 | 决定规格的因素 | 推荐配置 |
|---|---|---|
| PostgreSQL 或 MySQL,约 500 GB 以内 | 热数据可装入 128 GB 内存;高速核心加快单条查询 | AMD EPYC 4464P |
| Valkey 或 Redis 缓存与会话 | 数据集全部放进内存,并为基于 fork 的快照留出余量 | AMD EPYC 4464P |
| OLTP, |
更大的缓冲池、更多核心,前置 PgBouncer | AMD EPYC 7443P |
| MongoDB 副本集成员 | WiredTiger 缓存约为内存的一半;工作集全部驻留内存 | AMD EPYC 7443P |
| ClickHouse 分析数十亿行数据 | 扫描依赖核心与内存带宽;NVMe 存放数据片段(part) | AMD EPYC 9354P |
专家建议
我们的工程师针对此类工作负载给出的简明实用建议。
提交只有写入稳定存储后才算真正持久化。在主库上,请保留安全的默认设置:PostgreSQL 中的 fsync = on,MySQL 或 MariaDB 中的 innodb_flush_log_at_trx_commit = 1 和 sync_binlog = 1。如果可以接受崩溃后丢失最后一瞬间的提交,PostgreSQL 的 synchronous_commit = off 能以这段时间窗口换取速度,且不会有数据损坏的风险。
cat /proc/mdstat 检查镜像状态。pg_test_fsync 测出磁盘的实际性能。recordsize 与页大小保持一致(初始值可设为:InnoDB 用 16K,PostgreSQL 用 8K),并限制 ARC 的大小,避免它与缓冲池争抢内存。从内存读取数据的数据库很少需要等待。先按热数据量确定内存大小,再逐一调优各个引擎,避免它们彼此之间或与操作系统争抢资源:
shared_buffers 设为内存的 25% 左右,effective_cache_size 约为 70%,work_mem 则保持适中,因为每条查询中的每次排序或哈希操作都可能各自占用这么多内存。innodb_buffer_pool_size 设为内存的 maxmemory 设得远低于物理内存,因为生成快照时会 fork 进程,而写时复制需要预留内存余量。max_memory_usage 限制每条查询的内存用量,以免一份繁重的报表拖垮整台服务器。之后持续关注缓存命中率:如果命中率在高负载时下降,增加内存通常比换用更快的磁盘更有效。
用于故障切换的副本应与主库位于同一机房,并通过免费的私有 VLAN 互联:这样延迟足够低,同步复制的开销完全可以承受。再通过 WireGuard 在另一个机房添加一个异步副本,用于灾难恢复;如果跨洋进行同步提交,每笔事务都要等待一次往返。
有了 root 权限,您可以只安装真正需要的软件。以下是此类工作负载久经验证的选择。
常见问题
只要是无法从别处重建的数据库,答案就是需要。内存中的一个比特翻转,可能被当作看似有效的数据页写入磁盘,随后被复制到每一个副本和备份中。ECC 能纠正单比特错误,并能检测出双比特错误。所有 EPYC 配置均采用 ECC 内存;高性能型系列的 Ryzen 配置使用非 ECC 的 DDR5 内存,用于缓存和无状态应用完全没问题,但用作主数据库就不那么稳妥了。
主库请保留默认的 RAID 1:即使一块 NVMe 故障,在更换硬盘期间也能继续运行,而按照我们的 SLA(服务等级协议),硬盘更换目标是在确诊故障后四小时内完成。RAID 0 可使容量和写入带宽翻倍,但只要一块硬盘故障就会丢失全部数据,因此请只将其用于可以重建的副本。ZFS 提供校验和、压缩和快照功能,代价是需要调优 recordsize 和 ARC。
对于 PostgreSQL,可用 pg_basebackup 将新服务器搭建为流复制副本,等它追上主库后,在短暂冻结写入期间将其提升为主库。MySQL 和 MariaDB 的做法相同:先用 mariadb-backup 或 XtraBackup 拷贝一份数据,再配置复制。逻辑导出更简单,但在大型数据库上速度较慢,而且所需的停机时间会随数据量增长。
ClickHouse 会把扫描分摊到每一个核心上,并能充分受益于内存带宽,因此拥有 32 个核心、12 通道 DDR5 和 384 GB 内存的 EPYC 9354P 自然是大表场景的首选。规模较小的分析负载选择 EPYC 7443P 即可。列式数据通常能压缩到原始大小的几分之一,因此 2 × 3.84 TB 的 NVMe 实际能容纳的数据,比其原始容量数字所显示的更多。
可以,而且放在同一台机器上,每次查询都能省去一次网络跳转。先为数据库设定固定的内存预算,剩下的交给应用;如果两者争抢资源,就把高负载的工作进程绑定到不同的核心上。一旦应用需要横向扩展,或者数据库需要副本,就把两者拆分开:私有 VLAN 能让它们之间的连接不经过公网。