Multipart upload: hoe grote bestanden betrouwbaar in object storage terechtkomen
Kort antwoord
Multipart upload splitst een groot bestand op in losse delen die onafhankelijk van elkaar uploaden en na aankomst van alle delen weer worden samengevoegd tot het uiteindelijke object. Faalt een deel halverwege, dan hoef je alleen dat deel opnieuw te proberen, niet het hele bestand. De meeste S3-compatible tools en SDK's schakelen automatisch over op multipart boven een bepaalde bestandsgrootte, dus in de praktijk hoef je dit zelf niet te activeren.
Hoe het werkt
Een gewone, rechtstreekse upload stuurt een bestand van begin tot eind als één ononderbroken stroom naar object storage. Dat werkt prima voor kleine bestanden, maar heeft een duidelijke zwakte bij grote bestanden: valt de verbinding weg bij 95 procent, dan is de hele upload mislukt, en meestal begin je opnieuw vanaf byte nul.
Multipart upload voorkomt dit door het bestand al op te delen in een reeks delen voordat het je machine verlaat. Elk deel upload je apart, als eigen request, en de object storage-service bewaart de delen die binnenkomen zonder het object als compleet te beschouwen. Zodra alle delen zijn aangekomen, laat jij (of je clienttool) de service weten dat de upload klaar is, waarna de delen in de juiste volgorde worden samengevoegd tot één object. Van buitenaf is het resultaat, zodra die samenvoegstap is voltooid, niet te onderscheiden van een object dat in één keer is geüpload.
Waarom dit belangrijk is voor betrouwbaarheid
Het praktische voordeel zit helemaal in de afhandeling van fouten. Netwerken verliezen verbindingen, zeker bij langlopende overdrachten, en een weggevallen verbinding halverwege een grote upload in één stroom betekent normaal gesproken dat de hele overdracht verloren gaat, zonder dat de al bestede tijd en bandbreedte iets hebben opgeleverd. Multipart upload verandert de eenheid van falen van "het hele bestand" in "één deel". Faalt een deel bij het uploaden, dan hoef je alleen dat deel opnieuw te proberen. Alles wat al is gelukt, blijft staan en wacht tot de rest volgt, in plaats van dat het samen met de rest verloren gaat.
Dit maakt het ook mogelijk om delen parallel te uploaden in plaats van strikt na elkaar. Dat is een van de redenen waarom multipart upload bij zeer grote bestanden vaak merkbaar sneller is, naast dat het robuuster is.
Wanneer het in werking treedt
In de praktijk hoef je hier zelden zelf over na te denken. De meeste S3-compatible clienttools en SDK's, waaronder de AWS CLI, rclone en boto3, bepalen automatisch of een upload als één request wordt verstuurd of wordt opgesplitst in delen, op basis van een ingebouwde drempelwaarde voor bestandsgrootte in de tool zelf. Onder die drempel krijg je een gewone, enkele upload. Erboven regelt de tool zelf het opsplitsen, de parallelle uploads van de delen en de laatste samenvoegstap, zonder dat je iets hoeft te veranderen aan hoe je de tool aanroept. Het is vooral nuttig om multipart upload conceptueel te begrijpen, zodat een mislukte grote upload, met de automatische herhaling van slechts één deel in plaats van het hele bestand, geen verrassing is.