S3 / MinIO: object storage¶
Раздел 02 · Механизмы · Сравнения
Тип материала: архитектурный разбор. Схемы и примеры иллюстративные, если не указано иное.
Область версий: Amazon S3 API: 2026-11-02; MinIO OSS RELEASE.2025-04-22T22-12-26Z, не AIStor. Проверка источников: 2026-11-02.
1. Архитектура и модель данных¶
FACT. Bucket/key адресует immutable-in-place object version: обновление публикует новое полное содержимое объекта, а не произвольную SQL row mutation. S3 — managed API, MinIO — отдельная реализация S3-compatible API. Совместимость не делает их failure domains, lifecycle и durability policies одинаковыми.
flowchart LR
Writer --> Data[Immutable data objects]
Data --> Commit[Conditional manifest or catalog commit]
Commit --> Reader[Snapshot-aware reader]
Reader --> Data
Data -. independent policy .-> Backup[Versioning replication or backup]
2. Физическое хранение и путь записи¶
S3 скрывает физические детали; внутренняя раскладка конкретного объекта UNKNOWN для пользователя. MinIO OSS использует erasure coding по наборам drives: data/parity shards позволяют пережить определённые failures при достаточном quorum. Конкретная topology задаёт read/write quorum и recovery; нельзя назначать универсальную переносимость потери дисков.
Текущие min.io docs перенаправляют на AIStor. Здесь OSS baseline закреплён Git tag; AIStor-only функции не считаются подтверждёнными для OSS.
Источники механизма: документация 1, документация 5.
3. Индексы и путь чтения¶
GET/HEAD по key и LIST prefix — object API, не B-tree/secondary index по содержимому. Range GET помогает читать Parquet footer/column ranges, но сеть и request cost остаются. Metadata catalog/table format добавляют pruning; один только directory convention не даёт transactional snapshot.
Источники механизма: документация 1.
4. Транзакции и consistency guarantees¶
Amazon S3 документирует strong consistency PUT/DELETE/GET/LIST в соответствующей scope. Atomic update отдельного key не равен multi-object transaction, POSIX append или rename. Conditional writes If-Match/If-None-Match помогают CAS на object; поддержка конкретной операции/API проверяется отдельно для MinIO baseline. ETag нельзя универсально считать MD5, особенно при multipart/encryption.
Источники механизма: документация 1, документация 2.
5. Репликация, partitioning и sharding¶
S3 replication между buckets/Regions — отдельный асинхронный процесс со своей конфигурацией; она не наследует single-key strong read guarantee как мгновенную global publication. MinIO erasure coding внутри deployment и site replication — разные механизмы. Prefixes не являются database shards с транзакционными границами.
Источники механизма: документация 1, документация 4.
6. Конкурентная запись и конфликты¶
Два writers одного key без condition могут перезаписать результат друг друга. Table formats используют metadata commit protocol/catalog, а не небезопасное «LIST files и overwrite manifest». Multipart upload не публикует готовый object до completion; orphan uploads нужно очищать. Публикация data files до manifest позволяет readers видеть только committed набор при корректном протоколе.
Источники механизма: документация 2.
7. Отказы и восстановление¶
Versioning сохраняет версии, но не защищает от всех действий привилегированного пользователя; Object Lock добавляет retention/legal hold в поддерживаемой конфигурации. Lifecycle delete, encryption-key loss и accidental overwrite требуют отдельных мер. MinIO healing восстанавливает shards при наличии достаточных данных, но не является backup от логической ошибки.
Источники механизма: документация 3, документация 5.
8. Масштабирование и ограничения¶
Большие sequential objects эффективнее миллионов маленьких для многих analytical scans. Parallel requests увеличивают bandwidth до service/network/client limits; retries/backoff обязательны. MinIO capacity зависит от drives, erasure sets, сети и headroom на healing; S3 capacity model не переносится на собственный кластер.
9. Performance trade-offs¶
Преимущества — дешёвый для многих workloads durable blob/archive и разделение compute/storage; цена — API requests, network/egress, отсутствие row locks и множество small-file operations. «Дешёвый storage» не доказывает дешёвый query или быстрый restore. Iceberg/Delta/Hudi добавляют table semantics, а не меняют объект в OLTP page.
10. Мониторинг и эксплуатация¶
S3 request errors/latency, replication status, inventory/lifecycle и incomplete multipart; MinIO drive/node health, quorum errors, healing backlog, free space и audit. Проверять IAM/policies, encryption-key recovery, immutable retention и restore permissions. Контрольные manifest/hash проверяют полноту независимо от успешного LIST.
11. Сценарии FinTech и iGaming¶
INFERENCE. Raw Kafka archive, historical betting events, backup ledger и evidence bundles. Object retention может поддерживать audit, но правовую достаточность определяют требования и процедуры; здесь юридическое соответствие не заявлено. Table format выбирается отдельно от S3 provider.
12. Когда не выбирать¶
Не выбирать raw objects для конкурентного balance UPDATE или per-request row lock. Не монтировать S3 как POSIX filesystem, ожидая тех же rename/fsync/locking guarantees. Не считать replication/erasure coding независимой резервной копией.
13. Вопросы на собеседовании¶
Strong LIST делает lake transactional? Нет, читатель всё ещё может увидеть только часть multi-object публикации без commit protocol.
ETag всегда checksum содержимого? Нет, зависит от upload/encryption API.
Erasure coding равно backup? Нет, защищает от части физических failures, не от авторизованного удаления.
14. Практические SQL/config примеры¶
{"Rules":[{"ID":"abort-incomplete","Status":"Enabled","Filter":{"Prefix":"raw/"},"AbortIncompleteMultipartUpload":{"DaysAfterInitiation":7}}]}
Пример S3 lifecycle JSON очищает незавершённые uploads, не committed data. Число дней — учебная policy. JSON проверен; AWS/MinIO API и quorum failure не выполнялись.
15. Дополнительные источники¶
- Первичный источник 1
- Первичный источник 2
- Первичный источник 3
- Первичный источник 4
- Первичный источник 5
Типичные ошибки проектирования¶
Смешивать commit, видимость projection и backup; приписывать формату функции query engine; игнорировать версии и cleanup horizon. Product-specific ошибки и безопасные альтернативы разобраны в разделах 4–9.
Практические упражнения¶
Составьте журнал одной записи: какие файлы/metadata появляются до публикации, что увидит reader при сбое и какой cleanup безопасен. Затем предложите restore drill с проверкой итоговой полноты, включая поздние исправления.