Спойлер для тех кто не в курсе:

В начале 2025 года компания MinIO в лице сооснователя Harshavardhana начала поэтапно сворачивать свою версию Community Edition. В феврале из open-source версии был вырезан веб-интерфейс администрирования - управление политиками, мониторинг, репликация, IAM - всё это переехало в коммерческий продукт AIStor с ценником от $96 000 в год. Пользователям оставили лишь базовый object browser и CLI-утилиту mc. В мае последовало удаление поддержки OIDC-аутентификации. В октябре MinIO прекратил публикацию Docker-образов и готовых бинарников - причём аккурат в момент раскрытия критической CVE-уязвимости. А в декабре 2025-го проект официально перешёл в режим maintenance mode: никаких новых фич, pull request'ы не принимаются, только точечные security-фиксы по усмотрению компании.

Мой опыт с Minio

В моей инфраструктуре MinIO присутствует на нескольких стендах с 3ТБ данных, и также в домашней лабе для бэкапов Synology, всех ПК, репозиториев кода. 10 января вышла интересная статья про альтернативы Minio, где я заинтересовался вопросом миграции своего "нажитого". Критерии поиска были такие - S3 Full Compatibility, OpenLicense (Apache 2.0 и тд), Web UI для администрирования, небольшое потребление ресурсов, а также желательно чтобы было из коробки Versioning, Crashrecovery, Deduplication, Lifecycle policy, Object Locking, IAM, и желательно метрики

Желание не всегда совпадает с реальностью..
Желание не всегда совпадает с реальностью..

Табличка по альтернативам - приоритету слева направо (простота, full s3, надежность)

Решение

Простота

S3 API

Репликация

Версии

Locking

Lifecycle

RustFS

9/10 ?

✅ 100%

? Высокая (распред.)

Garage

9/10 ?

⚠️ Базовый

? Отличная (CRDT)

⚠️ Частично

MinIO + OpenMaxIO

8/10 ?

✅ 100%

? Высокая (Erasure)

SeaweedFS

7/10 ?

✅ Высокая

? Высокая (O(1))

Apache Ozone

4/10 ?

✅ Высокая

? Максимальная (Raft)

Ceph (RGW)

3/10 ?

✅ Высокая

? Максимальная (CRUSH)

MinIO и Garage сразу вылетают по лицензии, поддержки CE и отсутствии версионирования

Если отвлечься от первой колонки "Простота", то можно предположить что победитель тут RustFS или SeaweedFS, но к сожалению это не так.

ПОЧЕМУ не RustFS:

  1. Агрессивная пиар кампания, построенная на « костях » Minio, громкие заголовки. В последние месяцы проект очень активно пушится через заказные статьи на Medium. Явно прослеживается модель - набрать аудиторию корпоративных пользователей. В этом нет ничего плохого, но риск смены лицензии очень высокий, вопрос лишь времени

  2. На сайте rustfs используются термины вроде "Limitless Scalability" и "EB-level storage capacity". Для проекта, архитектура которого еще до конца не стабилизировалась, заявлять поддержку эксабайтных хранилищ смешно.

  3. По баг-репортам, понятно, что на объектах размером 512KB и 1MB производительность RustFS падает в 2 раза по сравнению с MinIO И также мой личный тест на слабом железе был завален rustfs'ом (Ошибки при concurrency: Под высокой параллельной нагрузкой (warp mixed тесты) система начинает сыпать ошибками, упирается в высокий iowait). Кластерный режим (Distributed mode) до сих пор носит статус экспериментального

Почему не остальные SeaweedFS / Ceph / Apache Ozone S3 и тд:

  1. Высокая кривая в установке и поддержке. Куча нод - master, filer, volume, gateway. В общем для самых отважных

  2. Дорого для инфраструктуры

Что в сухом остатке

Вариантов не много, больше всего душа лежала к SeaweedFS, проект стабильный и надежный, но поддерживать и следить за этим парком нод не очень хочется, минус еще - ручное расширение volume нод, в итоге пошел другим путем..

Я просто взял и написал свой S3, то есть S4

... в котором есть все из коробки:

Имел ли я на это право?) Считаю, что да. Как бы это не безумно звучало, но хочешь сделать хорошо, сделай это сам. Во-первых хотелось нормальной альтернативы Minio, которой по сути на данный момент нет. Во-вторых за плечами несколько лет разработки бэка, поэтому сделать аналог S3 не такая и проблема

Из чего состоит S4 ?

S4Console - веб админка
S4Console - веб админка

Github https://github.com/s4core/s4core
Сайт https://s4core.com
Документация https://docs.s4core.com

  1. Написан на Rust

  2. Полная совместимость с S3 API - Object Locking (WORM), Versioning & Lifecycle, IAM & RBAC со встроенной системой ролей (Reader, Writer, SuperUser) и
    JWT-авторизацией.

  3. Дедупликация данных - Content-Addressable Storage: система считает SHA-256 хеш контента. Загрузишь один и тот же файл 10 раз - физически на диске он будет
    лежать в одном экземпляре.

  4. Готовый веб интерфейс и мониторинг - В комплекте современная админка на Next.js + эндпоинт для Prometheus, позволяющий отслеживать латентность, IOPS и коэффициент
    дедупликации в реальном времени.

  5. Архитектура хранения - В отличие от решений, которые кладут каждый объект в отдельный файл на диске, S4 использует Bitcask-style storage. Миллиард объектов
    хранится всего в ~1000 больших файлах - никакого Inode Exhaustion. Объекты меньше 4 КБ сохраняются прямо в метаданных (база redb), что даёт молниеносное чтение
    без лишних операций ввода-вывода. Данные не перезаписываются «поверх» - любая запись это append в конец лога.

  6. Crash Recovery-Каждый блоб защищён CRC32-контрольной суммой, fsync гарантирует сброс на диск до ответа клиенту. Метаданные хранятся в ACID-базе redb. Даже
    если база метаданных потеряна - движок при старте сканирует все volume-файлы, проверяет CRC32 каждого блоба и полностью восстанавливает индекс и карту
    дедупликации из append-only логов. Данные не теряются.

Немного про архитектуру

  • s4-server- приложение: конфигурация, TLS, запуск воркеров.

  • s4-api - сетевой слой на Axum: парсинг S3-запросов, аутентификация AWS Signature V4, роутинг.

  • s4-core -сердце системы: append-only тома, ACID-индекс на redb, дедупликатор (SHA-256), CRC32-валидация и crash recovery.

  • s4-features - бизнес-логика поверх ядра: версионирование, Object Lock, lifecycle-политики, IAM с JWT.

  • s4-compactor -фоновый процесс: находит «мёртвые» блобы в старых томах, переносит живые в новый том, освобождает место.

А теперь про установку и тестирование

Quick start for DEV:

  git clone https://github.com/s4core/s4core.git
  cd s4core
  cargo build --release
  ./target/release/s4-server
  # Готово — S4 слушает на http://127.0.0.1:9000

Docker:

docker run -d \
  --name s4core \
  -p 9000:9000 \
  -v s4-data:/data \
  -e S4_ACCESS_KEY_ID=myaccesskey \
  -e S4_SECRET_ACCESS_KEY=mysecretkey \
  -e S4_ROOT_PASSWORD=password12345 \
  s4core/s4core:latest

Логинимся и проверяем:

aws --endpoint-url http://localhost:9000 s3 mb s3://test-bucket
aws --endpoint-url http://localhost:9000 s3 cp file.txt s3://test-bucket/
aws --endpoint-url http://localhost:9000 s3 ls s3://test-bucket

Production ready:

  services:
    s4core:
      image: s4core/s4core:latest
      restart: unless-stopped
      ports:
        - "9000:9000"
      volumes:
        - s4-data:/data
      environment:
        - S4_ACCESS_KEY_ID=myaccesskey
        - S4_SECRET_ACCESS_KEY=mysecretkey
        - S4_ROOT_PASSWORD=password12345

    s4-console:
      image: s4core/s4console:latest
      restart: unless-stopped
      ports:
        - "3000:3000"
      environment:
        - S4_BACKEND_URL=http://s4core:9000
      depends_on:
        - s4core

  volumes:
    s4-data:

После запуска:

Почему модель лицензирования OpenCore (Apache 2.0 + ELv2)?

Весь основной код S4Core - это Apache 2.0: используй, форкай, встраивай в свои продукты без ограничений. Никаких скрытых лимитов, никакого «community edition с обрезанными фичами».

Корпоративные возможности (LDAP, multi-node репликация, приоритетная поддержка с SLA) живут в отдельной директории ee/ под Elastic License 2.0 - исходный код открыт для аудита. На данный момент в разработке.

Зачем так?
Крупные компании с требованиями к SLA и энтерпрайз-интеграциям - получает поддержку и дополнительный функционал от моей команды.

Чего не хватает в S4Core и что будет реализовано:

  1. Кластерный режим с репликацией - горизонтальное масштабирование, consistent hashing, Raft-репликация. Уже в разработке, планирую выкатить в ближайшие недели (возможно еще неделя потребуется на тестирование).

  2. Compaction Worker - фоновый сборщик мусора: переносит живые блобы из старых томов в новые, освобождая место после удалений.

  3. Расширенный IAM - полноценные группы, политики на уровне бакетов (Bucket Policies), гранулярные права доступа. Многое из этого уже присутвует в S4Core, но для EE надо шире.

  4. CLI-утилита (аналог mc в MinIO) - консольный инструмент для администрирования: алиасы серверов, ls/cp/rm/mirror, управление пользователями и политиками. Пока в раздумье с этим, так как CLI уже есть включая aws cli и куча других

  5. Расширенный Lifecycle - перемещение между классами хранения, фильтрация по тегам и размеру, автоматическая очистка незавершённых multipart-загрузок.

  6. Audit Log - раздел «кто, что и когда сделал» для полной прозрачности действий на сервере. .. и еще порядка 10 пунктов

Что будет в Enterprise версии, и будет НЕ доступно в CE?

Масштабирование и отказоустойчивость:

  • Горизонтальное масштабирование на неограниченное количество нод

  • Raft-репликация с автоматическим failover

  • Cross-region репликация и гео кластеры

  • Автоматическое перераспределение данных при добавлении/удалении нод

Корпоративная авторизация:

  • LDAP / Active Directory

  • RADIUS

  • SAML 2.0 / OpenID Connect (SSO)

  • Kerberos

  • Multi-tenant изоляция с отдельными квотами и политиками

Интеграция с внешними сервисами:

  • HashiCorp Vault - управление ключами шифрования (KMS)

  • Event-уведомления об операциях с объектами

  • Elasticsearch - полнотекстовый поиск по метаданным

  • Splunk / Datadog / Grafana Cloud - расширенная телеметрия

  • Расширенные метрики Prometheus

Безопасность и compliance:

  • Encryption at Rest (AES-256) с ротацией ключей

  • Подробный Audit Log с экспортом в SIEM-системы

  • Immutable Audit Trail для регуляторных требований

Поддержка и SLA:

  • Приоритетная техподдержка

  • Помощь с миграцией, оптимизацией

Эпилог

S4Core ещё в активной фазе тестирования, но даже текущая alpha-версия уже прошла серьёзные нагрузочные тесты: несколько терабайт данных, смесь крупных и мелких файлов, тестирование на древнем железе с HDD. По итогу процент отказа - 0%, ни одного потерянного объекта. Для сравнения с другими решениями опубликую отдельную статью с реальными цифрами.

Буду рад найти единомышленников в развитии проекта, а также в тестировании ?

Всем спасибо, кто дочитал!

Комментарии (44)


  1. Canti
    05.03.2026 18:01

    Круто, интересно, пойду изучать


  1. QtRoS
    05.03.2026 18:01

    А вот эта БД-шка redb - она тоже на memory mapped files, как и lmdb? Судя по беглому поиску - да. Похоже, в текущей архитектуре это слабое звено и потенциально станет точкой отказа. Хороший материал по теме: Are You Sure You Want to Use MMAP in Your Database Management System? Еще в документации SQLite тоже есть по теме, для удобства процитирую:

    But there are also disadvantages:

    1. An I/O error on a memory-mapped file cannot be caught and dealt with by SQLite. Instead, the I/O error causes a signal which, if not caught by the application, results in a program crash.

    2. The operating system must have a unified buffer cache in order for the memory-mapped I/O extension to work correctly, especially in situations where two processes are accessing the same database file and one process is using memory-mapped I/O while the other is not. Not all operating systems have a unified buffer cache. In some operating systems that claim to have a unified buffer cache, the implementation is buggy and can lead to corrupt databases.

    3. Performance does not always increase with memory-mapped I/O. In fact, it is possible to construct test cases where performance is reduced by the use of memory-mapped I/O.

    4. Windows is unable to truncate a memory-mapped file. Hence, on Windows, if an operation such as VACUUM or auto_vacuum tries to reduce the size of a memory-mapped database file, the size reduction attempt will silently fail, leaving unused space at the end of the database file. No data is lost due to this problem, and the unused space will be reused again the next time the database grows. However if a version of SQLite prior to 3.7.0 runs PRAGMA integrity_check on such a database, it will (incorrectly) report database corruption due to the unused space at the end. Or if a version of SQLite prior to 3.7.0 writes to the database while it still has unused space at the end, it may make that unused space inaccessible and unavailable for reuse until after the next VACUUM.

    Because of the potential disadvantages, memory-mapped I/O is disabled by default

    Похоже в redb похожим вопросом уже задавались.


    1. x4team_only Автор
      05.03.2026 18:01

      Привет! Спасибо за развернутый комментарий
      В контексте архитектуры S4 с redb и mmap выбор осознанный, и оно не станет точкой отказа. Главная проблема mmap это падение процесса при I/O ошибке диска, в S4 это норм, redb тут используется как индекс метаданных, а сами данные лежат в append-only логах. В случае жесткого краша (или потери файла БД) срабатывает механизм Crash Recovery: S4 сканирует заголовки томов и с нуля перестраивает индекс

      Далее, описанные в SQLite баги с унифицированным кэшем на Windows остаются проблемой windows)) S4 core делал с прицелом на серверный Linux

      I/O. Запись/чтение самих объектов не проходит через mmap, большие блобы пишутся и читаются через tokio fs прямо в append-only тома , redb держит только крошечные < 4KB

      Отказ от mmap требует реализации собственного buffer pool manager, ну или альтернативы к примеру rocksdb, что невероятно усложняет код и повышает вероятность багов, на что не подписывался пока)

      В целом, на днях будет новая альфа релиз, загоню синтетические тесты на краш, отпишусь тут


      1. dvglab
        05.03.2026 18:01

        LMDB Garage на NFS разваливается, тут похоже будет тоже самое.


        1. x4team_only Автор
          05.03.2026 18:01

          Зачем такое делать на NFS? Какой-то антипаттерн
          S4 core это сверхбыстрая single-нода, которая изначально проектировалась для работы исключительно на локальных дисках. У S4Core есть crash recovery, ну а для для серьезных кластеров с петабайт данных выбирайте Ceph или Ozon, они из коробки по архитектуре созданы для таких вариантов


      1. hapcode
        05.03.2026 18:01

        А вы не сравнивали redb c fjall? Я так понимаю, сейчас это основные key-value либы на расте, наряду со sled, который уже не поддерживается.


        1. x4team_only Автор
          05.03.2026 18:01

          Привет, нет. Посмотрел сейчас, это отличия lsm дерево vs b дерево, немного не моя архитектура - у меня B)
          разница в скорости чтения и записи, по факту примерно одинаково, только в первом случае скорость чтения будет ниже, а во втором быстрее, ну и другие подводные камни тоже. Попробую изучить на выходных


        1. x4team_only Автор
          05.03.2026 18:01

          Привет еще раз) Мне понравилась архитектура fjall и его подход, пока в раздумьях перейти на этот вариант


      1. Revertis
        05.03.2026 18:01

        redb тут используется как индекс метаданных, а сами данные лежат в append-only логах.

        Но в статье вы гордитесь тем, что все файлы меньше 4кб помещаются прямо в мету. Как быть?


        1. x4team_only Автор
          05.03.2026 18:01

          Изначально архитектура на этом и основывалась, что все что меньше 4кб это в основном метаданные (теги, acl и тд). Возможно, все таки стоит добавить флаг strick_wal, при котором абсолютно все файлы (даже < 4KB) будут дублироваться в append-only , но тут есть подводный камень - падение IOPS, ну и перерасход места, компактор(мусоросборщик) ахренеет от таких мелких файлов, чтение упадет. Но как вариант можно такое сделать как альтернативу если ваши данные настолько мелкозернистые


        1. QtRoS
          05.03.2026 18:01

          @x4team_only поддержу комментарий - основная мысль статьи считывается как "у меня все очень надежно". При этом как минимум в одном компоненте есть признанный индустрией коварный антипаттерн. Коварный потому, что в основном работает, но ломается в граничных случаях из-за отсутствия контроля. Такое очень трудно отлаживать и чинить в час X.

          И уже на уровне мнения - я, например, попросту игнорирую все статьи по типу "наша новая замечательная БД не обладает недостатками всех существующих баз данных и не содержит tradeoff'ов", когда вижу под капотом memory mapped files. Сразу можно сделать выводы о том, какая боль в конечном счете ждет пользователей. Сама по себе это отличная технология, но кейсы ее применения в БД eventually неудачные.


          1. x4team_only Автор
            05.03.2026 18:01

            Привет, все-таки когда писал статью, были раздумья, чего можно опасаться в архитектуре. И пока нет распределенности/репликации/масштабирования, думать что single нода это что-то супер надежное - както слишком наивно, лично для меня. Для текущей версии, стабильность можно проверить только краш рекавери на сложных смешанных данных .
            Вчера увидел комментарий от @hapcode про fjall , и стало интересно, и сегодня весь день провел на чтение этой темы про fjall + lsm tree, вероятно это будет следующим шагом для дальнейшего апгрейда архитектуры S4Core.

            Если есть какие-либо предложения, буду рад помощи


  1. babaiiika
    05.03.2026 18:01

    Очень круто!


    1. x4team_only Автор
      05.03.2026 18:01

      Спасибо) За последние 2 недели было очень много работы с модулями S4, следите за релизами


  1. bbc_69
    05.03.2026 18:01

    Круто! Добавил в закладки.