Tilbage til bloggen

S3-kompatibel, helt ærligt

“S3-kompatibel” står trykt på alle object storage-sider på internettet. Det fortæller dig næsten ingenting. Det interessante spørgsmål er ikke, om du kan PutObject — det er, om du nogensinde kan få alle dine objekter ud igen og gå din vej.

Det er den del, ingen sætter på marketing-siden. Så lad os tale om den.

S3-API’et er standarden, og det er fint nok

Der findes ingen ISO-komité for object storage. Det, der i stedet skete, var, at Amazon i 2006 sendte et HTTP-API på gaden, alle skrev klienter mod det, og API’et blev de facto-standarden af ren og skær tyngdekraft. aws s3, boto3, s3cmd, rclone, mc, SDK’erne til Go og Rust og JS — de taler alle den samme dialekt. Peg dem mod et andet endpoint, og de virker for det meste bare.

Det er et oprigtigt godt udfald. En stabil wire-protokol, som et dusin uafhængige implementeringer sigter efter, er netop det, portabilitet bygges på. Når nogen siger “S3-kompatibel”, lover de at overholde den kontrakt.

Problemet er, at kontrakten er stor, og “kompatibel” laver en hel del stille arbejde.

Hvad reel kompatibilitet faktisk betyder

Hvem som helst kan implementere GET, PUT og DELETE på en bucket. Det er bordskånner, ikke kompatibilitet. De funktioner, der afgør, om du rent faktisk kan flytte dig, er de kedelige:

  • Klienter og signaturer. Virker SigV4-auth med de standard SDK’er, uændret, bare ved at skifte endpoint-URL’en ud? Eller har du brug for en leverandørs særlige fork?
  • Signerede URL’er. Pre-signed GET/PUT-URL’er er måden, halvdelen af nettet uploader filer på. Hvis de ikke er implementeret på samme måde, brækker hver eneste upload-formular, du har skrevet, ved en migrering.
  • Versionering. Hvis din app læner sig op ad objektversioner, og det nye sted ikke eksponerer dem, flytter du ikke bare data — du mister historik.
  • Lifecycle-regler. Udløb, transitions, abort-incomplete-multipart. De koder reel forretningslogik. Hvis de ikke følger med over, sidder du og omskriver policy i hånden.
  • Multipart-uploads. Store objekter afhænger af det. Subtile forskelle i part-size-grænser eller ETag-adfærd dukker op som korrupte filer klokken 3 om natten.

Kompatibilitet er hele den flade, din kode allerede rører ved — ikke de tre verber i demoen.

Hvordan portabilitet stille bliver en gidselsituation

Her er trækket. En udbyder taler S3 godt nok til at få dig ind ad døren. Så bolter de proprietære “value-add”-funktioner på — et skræddersyet query-lag, en speciel event-pipeline, en SDK-udvidelse, en lifecycle-dims, der kun findes i konsollen — og opfordrer dig til at bygge på dem. Hver enkelt er oprigtigt bekvem. Hver enkelt er også en tråd, der syr dig fast til netop den leverandør.

Du opdager det ikke, før du prøver at komme væk. Dine buckets er stadig “S3-kompatible”, javist. Men din app afhænger nu af tre ting, der kun findes der.

Og så er der den rigtige fælde: egress-gebyrer. Dine data kom billigt ind. At læse dem ud igen til et hvilket som helst andet sted koster penge per gigabyte. Jo større dit datasæt voksede sig, jo dyrere bliver udgangen — hvilket er præcis omvendt af, hvordan en fair aftale burde fungere. Portabilitet, du ikke har råd til at gøre brug af, er ikke portabilitet. Det er en høflig gidselsituation.

Portabilitet du kan teste, ikke bare stole på

Vi byggede Kaligon Cloud object storage til at være kedeligt på den måde, der betyder noget. Det taler S3-API’et. Peg en hvilken som helst S3-klient mod endpointet — aws-cli, rclone, boto3, hvad du end allerede har — og det virker. Versionering, lifecycle-regler og signerede URL’er opfører sig, som standarden siger, de skal, fordi standarden er produktet, ikke en marketing-afkrydsning.

Den del, der gør portabilitet reel: ingen egress-gebyrer mellem Kaligon-ressourcer i samme region, og én flad takst for udgående internet-egress. At flytte data mellem dine egne buckets og instanser koster ingenting. At forlade os bliver ikke dyrere, efterhånden som dine data vokser. Prisen er én flad pris per ressource — ingen committed-use-tiers, der stille hæver omkostningen ved at skifte mening. Du kan se den på pris-siden.

Så stol ikke på os — test os. Kør rclone copy mod en Kaligon-bucket og en konkurrents, begge veje, og hold øje med måleren. Hele pointen med en standard er, at du ikke skal behøve at tage nogens ord for det.