ObjectBasin

2026-08-19 · Инженерия

Раскладка частей multipart по узлам

Загрузка 100 ГБ — это не один объект, а десять тысяч частей. Как шлюз решает размещение и почему таблица частей живёт в метаданных.

Почему важно размещение

При multipart-загрузке каждая часть — отдельный PUT. Если все части попадают в одну стойку, отказ одного коммутатора обнуляет часы передачи. Поэтому шлюз раскладывает части по разным зонам отказа сразу по мере поступления, используя хэш от upload_id и номера части, и записывает получившуюся схему в сервис метаданных.

Часть становится надёжной в тот момент, когда прошла проверку: подпись, длину, контрольную сумму. Ничего не ждёт всего объекта, поэтому клиент, оборвавшийся на части 9 000, продолжает с части 9 001 без потерь.

Таблица частей

Узлы хранения намеренно устроены просто: они держат неизменяемые блоки с контрольными суммами и ничего не знают об объекте, которому те принадлежат. Таблица частей — какая загрузка владеет какими частями и где они лежат — живёт в сервисе метаданных, который версионируется и реплицируется внутри региона. Поэтому узел можно заменить без последствий, а выход узла из строя становится событием метаданных, а не потерей данных.

Удаление незавершённых загрузок

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

← Все записи