告别Go GC!ClickHouse重构WAL-G,Rust让Postgres备份更高效
本文字数3119估计阅读时间8 分钟作者Sai Srirampur and Philip DubéPostgreSQL 备份是那些理应默默无闻的基础设施组件之一。它们在后台运行持续归档 WAL 文件WAL files上传备份并确保在出现问题时能够进行恢复。在 ClickHouse Cloud这一环节至关重要。WAL 归档是确保我们 PostgreSQL 服务持久性durability和可恢复性recoverability的关键所在。WAL-G 一直是这项工作的强大而可靠的工具。它技术成熟久经考验并为 PostgreSQL 社区提供了卓越的服务。然而随着我们在更严苛、资源受限的环境中部署 PostgreSQL我们开始遭遇一个特定问题内存可预测性。这促使我们开发了WAL-RUS这是一个基于 Rust 的 PostgreSQL 备份和 WAL 归档工具的开源实现旨在提供可预测的内存效率和 WAL-G 兼容性。问题WAL-G 采用 Go 语言编写Go 是一种垃圾回收garbage-collected语言。尽管 Go 语言便于构建可靠的基础设施软件但垃圾回收运行时使得内存使用难以预测特别是对于 WAL 归档这类长期运行的服务。挑战不仅在于常驻内存resident memory即实际使用的内存还在于虚拟内存virtual memory即从操作系统预留的内存。Go 运行时管理其自身的内存池并可能预留远超应用程序实际需求的虚拟内存。随着工作负载的变化这种内存占用会以难以理解和调优的方式波动。《Go GC 指南》Go GC guide将其描述为一种典型的“锯齿状”模式在垃圾回收周期之间内存使用量会增长回收后则会下降这导致难以预测峰值内存消耗并难以高效地分配资源。对于运维人员来说这带来了一个简单却重要的问题究竟应该为备份基础设施预留多少内存通常为了避免意外的内存压力答案是“超出所需”。预留给 WAL (Write-Ahead Log) 归档的内存就无法可靠地分配给 Postgres (PostgreSQL) 本身用于查询、共享缓冲区和页面缓存。 当禁用内存过量分配 (overcommit) 时Postgres 运行最为可靠这使得虚拟内存成为一项宝贵的资源而现代软件却常常将其忽视。WAL-G (Write-Ahead Log G) 仍然是一个成熟可靠的工具但随着我们将 Postgres 扩展到日益资源受限的环境中我们希望拥有一个内存占用更可预测的备份系统它能在提供相同功能的同时消耗更少资源并让容量规划变得更简单。解决方案WAL-RUS 介绍我们并非在寻求新功能。WAL-G 是一个成熟可靠的备份系统我们乐于为其做出贡献。我们的目标是在保留核心功能和兼容性的同时提供更可预测的资源使用模式。WAL-RUS 是一个基于 Rust (编程语言) 实现的 Postgres 备份和 WAL 归档工具旨在解决我们在内存可预测性和资源使用方面遇到的操作挑战。1. 可预测的资源使用与垃圾回收 (garbage-collected) 运行时不同Rust 允许我们直接控制内存分配和并发。WAL-RUS 采用有界工作池和精心控制的并发机制使得内存消耗更易于理解并减少了为备份基础设施过度配置资源的需要。2. 专为持续 WAL 归档而设计WAL-RUS 优先考虑 WAL-G 的守护进程 (daemon) 架构。它不会为每个 WAL 文件生成一个新进程并建立新连接而是维护持久的对象存储连接在后台持续处理归档请求。3. 针对流式工作负载进行优化WAL 归档本质上是一个流式处理问题读取 WAL 文件压缩它们然后上传到对象存储。WAL-RUS 在整个处理流程中最大限度地减少了不必要的缓冲和数据复制使其能够以更小、更可预测的内存占用完成相同的归档工作。4. WAL-G 兼容性WAL-RUS 沿用 WAL-G 的WALG_配置变量并持续进行互操作性测试。WAL-G 能够读取 WAL-RUS 生成的归档反之亦然这使得现有部署的迁移过程变得无缝便捷。基准测试为评估 WAL-RUS 的性能我们构建了一个可复现的基准测试。该测试在持续的 WAL 密集型 PostgreSQL 工作负载下对 WAL-RUS、WAL-G 和 pgBackRest 进行比较。此基准测试会持续生成 WAL并将其归档至 S3同时衡量每个归档工具在跟上 WAL 生成速度的同时内存使用效率如何。为确保公平比较所有这三款工具均配置了四个并发归档工作进程。内存使用内存效率是 WAL-RUS 设计的首要考量因此内存消耗成为我们首先考察的指标。在基准测试期间WAL-G 的峰值虚拟内存接近2.8 GB而 WAL-RUS 则保持在1 GB以下降幅超过70%。此外WAL-RUS 在整个运行过程中保持了稳定的内存占用这使得其在生产环境中的资源需求更易于预测和管理。pgBackRest 在此也值得肯定作为一款基于 C 语言实现且不依赖垃圾回收运行时的工具它对内存分配拥有严格的控制。WAL 归档吞吐量在整个基准测试中WAL-RUS 和 WAL-G 都始终保持极小的积压这表明它们能够跟上所生成的工作负载。pgBackRest 在 WAL 活动剧烈期间积累了更大的积压这体现了其在 daemon-based 和 process-based 归档吞吐量方面的架构权衡。CPU 利用率CPU 利用率虽然相对次要但仍值得关注。三者之间的 CPU 使用率相近主要用于 LZ4 压缩计算。总结与结论WAL-RUS 的诞生旨在解决一个实际问题以更小、更可预测的资源占用提供可靠的 PostgreSQL 备份和 WAL 归档。WAL-RUS 将 Rust 的显式内存管理与守护进程流式架构相结合在实现与 WAL-G 相当的归档吞吐量的同时显著降低了内存消耗。值得注意的是WAL-RUS 与现有的 WAL-G 归档和配置完全兼容这使得它易于现有部署采用。WAL-RUS 还引入了对使用 Postgres 17 的 WAL 摘要进行增量备份的支持我们正致力于将其贡献给 WAL-G 上游项目。我们并非因为 WAL-G 缺少功能而构建 WAL-RUS。WAL-G 仍然是一个成熟且经过实战检验的项目。我们构建 WAL-RUS 是因为我们希望在保持与 WAL-G 所建立生态系统兼容性的同时能更精细地控制资源使用。随着我们持续开发并提升 WAL-RUS 的健壮性我们计划将其作为 ClickHouse Cloud 中我们托管式 Postgres 服务的默认备份和 WAL 归档机制。该项目是开源的我们欢迎大家提供反馈、进行测试并贡献代码关于我们ClickHouse 是面向 AI 时代打造的高性能实时分析数据库能够以极致性能处理海量数据分析任务。凭借高并发、低延迟和云原生架构ClickHouse 广泛应用于可观测性、数据仓库、实时分析及 AI 数据基础设施等场景。我们致力于帮助企业在公有云平台上构建安全、弹性且高性价比的实时分析与 AI 数据平台加速释放数据价值推动智能化创新与数字化转型。目前Trip.com、DiDi、Meta、Sony、Netflix、Deutsche Bank、Sierra、Cloudflare 等全球领先企业均在使用 ClickHouse 支撑其关键业务和数据分析平台。

相关新闻

C++实现围棋游戏:从数据结构到DFS算法实战

C++实现围棋游戏:从数据结构到DFS算法实战

1. 项目概述:为什么用C写一个简单的围棋游戏?如果你学过C,并且已经厌倦了在控制台里打印“Hello World”或者写一些简单的计算器,那么用C来开发一个简单的围棋游戏,会是一个绝佳的练手项目。这听起来可能有点唬人&…

2026/11/12 8:27:30 阅读更多 →
HY-Motion+Unity实战:AI驱动3D数字人实时交互动作生成方案

HY-Motion+Unity实战:AI驱动3D数字人实时交互动作生成方案

1. 项目概述:当数字人需要“活”起来最近在做一个虚拟展厅的项目,客户的核心需求是让里面的3D数字人导览员能和访客进行实时问答互动。这听起来很酷,但实现起来第一个拦路虎就是动作——你总不能指望数字人像个木头桩子一样杵在那里&#xff…

2026/11/4 11:40:33 阅读更多 →
Footprint图表与订单流分析:金融交易中的成交量洞察技术

Footprint图表与订单流分析:金融交易中的成交量洞察技术

在金融交易领域,成交量分析是判断市场参与者行为的关键技术之一。Footprint 图表作为一种高级成交量分析工具,能够直观展示每个价格水平上的买卖力量对比,帮助交易者识别潜在的支持阻力位和市场转折点。本文将深入解析 Footprint 交易的核心原…

2026/11/9 16:28:56 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/11/12 5:00:00 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/11/12 5:13:20 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/11/12 5:13:20 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/11/11 17:16:37 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/11/11 17:16:37 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/11/12 5:13:20 阅读更多 →

日新闻

周新闻

月新闻