← На главную

POSIX-файлы в S3: S3 Files против ZeroFS

11.07.2026 18:15 · hackernews

Amazon S3 Files и ZeroFS оба монтируют POSIX-файловую систему поверх объектного хранилища, но внутри устроены принципиально по-разному. В S3 Files один файл на смонтированной папке соответствует одному объекту в S3-бакете — прямо как обычный ключ images/cat.jpg. Изменения текут в обе стороны: пишешь через NFS 4.1/4.2 — данные попадают в высокопроизводительное хранилище AWS (Amazon EFS), откуда асинхронно экспортируются обратно в S3. Экспорт запускается через примерно 60 секунд после последней записи; пока он не завершился, файла через S3 API не видно. Если одновременно изменить файл с двух сторон, версия из S3 выигрывает, а локальная улетает в lost+found.

ZeroFS (проект с открытым кодом на GitHub) работает иначе. Один файл на монтировании не равен одному объекту в бакете. Метаданные хранятся в LSM-дереве, а сами данные дробятся на экстенты, сжимаются, шифруются и упаковываются в неизменяемые сегменты. Со стороны S3 это просто бессмысленный набор объектов. Прочитать файл через GetObject не выйдет — нужны сам ZeroFS и пароль от шифрования. Взамен ZeroFS экономит: мелкие файлы не требуют отдельного PUT на каждый, их кусочки лежат вместе в одном сегменте. Для fsync через 9P данные и метаданные сначала уходят в объектное хранилище — и только после подтверждения возвращается успех. Никакого экспорта, второй стадии видимости нет.

По стоимости разница ощутимая. Для S3 Files к обычным тарифам S3 добавляется плата за высокопроизводительный слой: $0,30 за гигабайт в месяц на хранении, $0,03 за чтение и $0,06 за запись гигабайта. Минимальный биллинг — 10 КБ на файл. Если залить 10 000 ГБ данных и читать их маленькими запросами из resident-слоя, только хранение обойдётся в $3 230 в месяц, ещё $300 — чтение, плюс $600 за импорт. ZeroFS на тех же 10 000 ГБ с компрессией 2:1 потратит около $115 на хранение и копеечные S3 GET, но добавится стоимость сервера (хотя бы одного, 2 ГБ RAM сверх кэша) и локального дискового кэша. Для больших файлов, стримингом напрямую из S3, S3 Files может выйти дешевле.

Оба решения не дают мгновенной S3-видимости после записи. S3 Files экспортирует асинхронно, ZeroFS вообще не показывает смонтированные файлы наружу. Переименование в S3 Files — это копирование каждого объекта с новым ключом и удаление старого; 100 000 переименованных файлов синхронизируются «несколько минут». ZeroFS просто меняет запись в LSM-дереве — без копирования данных и без лишних объектов в бакете. Выбор сводится к одному: бакет должен оставаться обычным S3 для всех остальных инструментов — берите S3 Files. Бакет — только тыл для файловой системы — смотрите в сторону ZeroFS.

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