2026-08-19 · Инженерия
Раскладка частей multipart по узлам
Загрузка 100 ГБ — это не один объект, а десять тысяч частей. Как шлюз решает размещение и почему таблица частей живёт в метаданных.
Почему важно размещение
При multipart-загрузке каждая часть — отдельный PUT. Если все части попадают в одну стойку, отказ одного коммутатора обнуляет часы передачи. Поэтому шлюз раскладывает части по разным зонам отказа сразу по мере поступления, используя хэш от upload_id и номера части, и записывает получившуюся схему в сервис метаданных.
Часть становится надёжной в тот момент, когда прошла проверку: подпись, длину, контрольную сумму. Ничего не ждёт всего объекта, поэтому клиент, оборвавшийся на части 9 000, продолжает с части 9 001 без потерь.
Таблица частей
Узлы хранения намеренно устроены просто: они держат неизменяемые блоки с контрольными суммами и ничего не знают об объекте, которому те принадлежат. Таблица частей — какая загрузка владеет какими частями и где они лежат — живёт в сервисе метаданных, который версионируется и реплицируется внутри региона. Поэтому узел можно заменить без последствий, а выход узла из строя становится событием метаданных, а не потерей данных.
Удаление незавершённых загрузок
Незавершённые загрузки удаляются через семь дней. Клиент может продлить срок для конкретной загрузки, а консоль показывает открытые загрузки вместе с уже записанными байтами, чтобы никто не платил за забытую передачу.