Why we rewrote WAL-G for Postgres backups in Rust: Meet WAL-RUS

Bài tóm tắt ClickHouse 2026 4. Điều chỉnh Độ khó: Trung bình

ClickHouse · 2026 · 4. Điều chỉnh · Độ khó: Trung bình — bài gốc

Bài của nhà cung cấp (Managed Postgres trong ClickHouse Cloud), giới thiệu công cụ mã nguồn mở của họ; số liệu benchmark do chính họ đo. Mọi nhận định dưới đây là theo ClickHouse.

Bối cảnh

  • Với Postgres managed, lưu trữ WAL liên tục (WAL archival) là thứ bảo đảm độ bền và khả năng khôi phục. Họ dùng WAL-G (viết bằng Go), công cụ trưởng thành và ổn định.
  • Khi đưa Postgres vào môi trường ít tài nguyên hơn, vấn đề là bộ nhớ khó đoán: runtime có GC cho đường "răng cưa" giữa các chu kỳ GC, và Go giữ trước nhiều virtual memory hơn mức dùng thật. Postgres chạy ổn nhất khi tắt overcommit, nên virtual memory cũng là tài nguyên khan hiếm; bộ nhớ dành dư cho backup là bộ nhớ không cấp được cho shared buffers và page cache.

Thay đổi chính

  • Viết WAL-RUS bằng Rust, không thêm tính năng: worker pool có giới hạn, kiểm soát concurrency; giữ kiến trúc daemon của WAL-G (kết nối object storage bền thay vì mỗi file WAL một process); pipeline đọc → nén → upload hạn chế buffer và sao chép.
  • Tương thích hai chiều: dùng cùng biến cấu hình WALG_, WAL-G đọc được archive của WAL-RUS và ngược lại, có test liên tục, nên migrate từ từ được.
  • Benchmark (4 worker, tải ghi WAL nặng, lên S3): đỉnh virtual memory của WAL-G gần 2,8 GB, WAL-RUS dưới 1 GB (giảm hơn 70%) và ổn định; throughput tương đương WAL-G. pgBackRest (C, không GC) cũng kiểm soát bộ nhớ tốt nhưng tồn đọng nhiều hơn khi WAL dồn dập, do kiến trúc theo process. CPU tương đương (chủ yếu là nén LZ4).
  • Thêm incremental backup dựa trên WAL summary của Postgres 17 (đang đưa ngược vào WAL-G). Dự định thành cơ chế backup mặc định của dịch vụ.

Bài học cho SWE

  • Lý do viết lại ở đây không phải tốc độ mà là độ dự đoán được của tài nguyên trong môi trường chật; đây là một kiểu lý do đổi runtime khác với "nhanh hơn" (Đổi ngôn ngữ và runtime).
  • Viết lại an toàn nhờ giữ tương thích định dạng và cấu hình với công cụ cũ, để hai bản chạy song song và quay lui được.
  • Backup/WAL archival là một phần của câu chuyện độ bền, nằm cạnh replication; nó cũng tốn tài nguyên trên chính máy database (Failover, replica và dự phòng dữ liệu).

Liên quan