Мы переписали клиент на Rust: минус 60% памяти
Синхронизация файлов — это тысячи мелких операций и постоянный фон. Вот что дал переход на Rust и где мы споткнулись.
Клиент Beta Space работал на популярном стеке и справлялся. Проблемы начались, когда у части команд появились десятки тысяч файлов и несколько устройств на человека: память росла, а синхронизация начинала конкурировать с браузером за ресурсы.
Что мы хотели получить
- Предсказуемое потребление памяти на больших папках.
- Быстрый старт без разогрева кэша.
- Один бинарь вместо набора зависимостей.
Что получилось
После переписывания ядра синхронизации потребление памяти упало на 60%, старт — с 2,4 до 0,7 секунды. Заодно исчезли несколько классов ошибок, связанных с гонками при параллельной записи.
Компилятор не сделал нас умнее, но он не дал выпустить то, что мы бы точно выпустили на другом стеке.
Где было тяжело
Основная сложность — не язык, а совместимость: старые версии клиента должны были работать с новым протоколом. Мы держали два протокола полгода и только потом отключили старый.
Переписывать работающий продукт — риск. Но в нашем случае это была не смена моды, а решение конкретной проблемы, которую пользователи замечали каждый день.