告别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/7/31 2:17:15 阅读更多 →
HY-Motion+Unity实战:AI驱动3D数字人实时交互动作生成方案

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

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

2026/7/31 2:16:14 阅读更多 →
Footprint图表与订单流分析:金融交易中的成交量洞察技术

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

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

2026/7/31 2:16:14 阅读更多 →

最新新闻

7天精通OpenUtau:开源虚拟歌手编辑器的完整使用指南

7天精通OpenUtau:开源虚拟歌手编辑器的完整使用指南

7天精通OpenUtau:开源虚拟歌手编辑器的完整使用指南 【免费下载链接】OpenUtau Open singing synthesis platform / Open source UTAU successor 项目地址: https://gitcode.com/gh_mirrors/op/OpenUtau 你是否曾梦想创作属于自己的虚拟歌手音乐,…

2026/7/31 3:00:28 阅读更多 →
Aspera ascp安装与配置指南:突破跨国大数据传输瓶颈

Aspera ascp安装与配置指南:突破跨国大数据传输瓶颈

1. 项目概述:为什么我们需要Aspera?如果你曾经尝试从ENA(欧洲核苷酸档案库)、NCBI SRA(序列读取档案库)或者一些大型天文数据中心下载动辄几十GB甚至上TB的测序数据、天文图像,那你一定对浏览器…

2026/7/31 3:00:28 阅读更多 →
Office 365时代VBA实战指南:从零掌握Excel自动化核心技巧

Office 365时代VBA实战指南:从零掌握Excel自动化核心技巧

1. 项目概述:为什么在Office 365时代,VBA依然值得你投入? 如果你经常和Excel打交道,处理着成百上千行的数据,每天重复着筛选、排序、格式调整、跨表复制粘贴这些枯燥的“体力活”,那你一定不止一次地想过&a…

2026/7/31 3:00:28 阅读更多 →
AI Agent开发实战:从环境配置到生产部署的完整指南

AI Agent开发实战:从环境配置到生产部署的完整指南

1. 先搞清楚学 Agent 到底能解决什么问题如果你正在看 Agent 相关的教程或项目,大概率是遇到了这几个实际问题:想快速上手但不知道从哪个框架开始;跑通了官方 Demo 但一到自己的业务就报错;或者听说 Agent 能自动处理任务&#xf…

2026/7/31 3:00:28 阅读更多 →
Unity开发微信小游戏:告别H5的性能瓶颈与平台适配实战指南

Unity开发微信小游戏:告别H5的性能瓶颈与平台适配实战指南

1. 项目概述:为什么Unity开发微信小游戏是“告别H5”? 如果你还在用传统的H5技术栈(比如Cocos Creator、LayaAir,或者原生Canvas/WebGL)吭哧吭哧地做微信小游戏,每次上线前都为性能、包体、兼容性焦头烂额&…

2026/7/31 3:00:28 阅读更多 →
Dify平台构建数据治理RAG知识库实战指南

Dify平台构建数据治理RAG知识库实战指南

1. 项目概述:当RAG遇上数据治理去年我在帮一家中型企业搭建内部知识库时,发现他们80%的文档都散落在不同员工的电脑和邮件里。这正是RAG(检索增强生成)技术大显身手的场景——通过Dify平台,我们最终构建了一个能自动理…

2026/7/31 2:59:27 阅读更多 →

日新闻

物理复制比逻辑复制好在哪?数据库复制原理详解

物理复制比逻辑复制好在哪?数据库复制原理详解

数据库复制是把主库数据同步到备库的机制,分为逻辑复制和物理复制两种。逻辑复制传输的是 SQL 语句或行变更事件,物理复制传输的是存储引擎底层的物理日志。阿里云 PolarDB(云原生数据库)采用物理复制,在同步延迟、数据…

2026/7/31 0:00:34 阅读更多 →
BilibiliDown:3分钟学会B站视频下载的终极指南

BilibiliDown:3分钟学会B站视频下载的终极指南

BilibiliDown:3分钟学会B站视频下载的终极指南 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader 😳 项目地址: https://gitcode.com/gh_mirrors/bi/Bilib…

2026/7/31 0:00:34 阅读更多 →
有哪些游戏数据AI平台?游戏行业Data+AI融合方案盘点

有哪些游戏数据AI平台?游戏行业Data+AI融合方案盘点

当前,游戏行业的“DataAI融合”已从概念验证进入价值落地阶段。根据IDC 2025年数据,中国AI游戏云市场规模已达18.6亿元;同时,游戏研发环节AI渗透率高达86%,生成式AI内容普及率超过50%。面对庞大的市场,游戏…

2026/7/31 0:00:34 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/31 1:03:03 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/29 14:34:28 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/29 15:00:03 阅读更多 →

月新闻