← На главную

WAL-RUS от ClickHouse Cloud: бэкап PostgreSQL на Rust, -70% памяти

27.06.2026 23:32 · hackernews

ClickHouse Cloud упирались в проблему с памятью при бэкапах PostgreSQL. WAL-G — проверенный инструмент для непрерывного архивирования WAL, но он написан на Go. А Go — это сборщик мусора. Даже если приложение использует немного памяти, рантайм резервирует виртуальную память с запасом, и её расход скачет «пилообразным» паттерном — растёт между циклами GC, потом падает. Для операторов это головная боль: сколько памяти выделять под бэкапы? Ответ обычно «с запасом», а запас — это память, которую не отдашь самому Postgres.

ClickHouse Cloud построили WAL-RUS — открытую реализацию бэкап-инструмента для Postgres на Rust. Rust даёт прямой контроль над памятью и конкурентностью. WAL-RUS использует bounded worker pools — предсказуемое количество горутин (точнее, потоков) — и держит постоянные соединения с объектным хранилищем, вместо того чтобы спавнить новый процесс под каждый WAL-файл. Архивация — это стриминг: чтение, сжатие, загрузка. WAL-RUS минимизирует буферизацию и копирование данных.

Совместимость с WAL-G полная: те же переменные WALG_, архивы взаимно читаемы. Миграция — просто подмена бинарника.

В бенчмарке с постоянной генерацией WAL и четырьмя параллельными воркерами результат впечатляет. WAL-G пикнул почти на 2.8 GB виртуальной памяти. WAL-RUS — меньше 1 GB, то есть снижение более чем на 70%. При этом отставание (backlog) у WAL-RUS и WAL-G было минимальным — оба успевали за нагрузкой. pgBackRest (на C) тоже хорошо контролирует память, но показал больший backlog в пиках WAL-активности из-за своей архитектуры с процессами, а не демоном.

CPU у всех трёх примерно одинаков — в основном уходит на LZ4-сжатие.

WAL-RUS не пытается заменить WAL-G по функционалу — он создан для предсказуемого расхода ресурсов. ClickHouse Cloud планируют сделать его дефолтным механизмом архивации для своего managed Postgres. Проект открыт, принимают фидбек и контрибуции. Также уже добавили поддержку инкрементальных бэкапов через WAL summaries из Postgres 17 — эту фичу собираются апстримить в WAL-G.

Читать оригинал →