Jetstack
Zpět na blog Blog

Cloudové úložiště — vaše soubory na správném místě

Publikováno 1. března 2024

Technická ilustrace k článku Jetstacku

Ukládání souborů málokdy znamená jediné rozhodnutí. Některé soubory mají být blízko aplikace kvůli rychlosti — obrázky, které vytížená zákaznická stránka načítá desetkrát za minutu. Jiné patří na levné „studené“ úložiště, protože se k nim sahá zřídka, ale musí se uchovat kvůli předpisům. Některé se mají doručovat přes síť pro distribuci obsahu (CDN), protože jsou veřejné a záleží na rychlosti odezvy. A jiné musí z regulatorních důvodů zůstat v konkrétní jurisdikci. Platforma, která každého zákazníka nutí vybrat si jedno úložiště a smířit se s jeho kompromisy, je platforma, které každý zákazník nakonec odroste. Zásuvná úložná vrstva nechá každý typ souboru — i každé prostředí — přistát tam, kam patří.

Úložná vrstva podporuje více zásuvných backendů. Objektové úložiště u několika poskytovatelů. Tradiční protokoly pro přenos souborů. Lokální disk pro vývoj a menší nasazení. Zbytek platformy — formuláře, pohledy, automatizace, úložiště souborů — pracuje se soubory, aniž by věděl, na kterém backendu vlastně leží. Přesně o tuhle abstrakci jde: tvůrci přemýšlejí v pojmech souborů, ne dodavatelů úložišť, a dodavatel úložiště je otázka konfigurace, ne architektonického závazku.

Směrování podle typu je místo, kde se zásuvnost vyplatí. Prostředí může pro různé typy souborů nastavit různé backendy. Fotky zákazníků jdou na jedno místo — rychlé, za CDN, regionálně rozprostřené. PDF faktur na druhé — levnější, archivní kvality, uchovávané podle předpisů. Surová data z propojení s vědeckým přístrojem na třetí — vysokokapacitní, levné, stavěné na hromadné jednorázové čtení. Toto směrování je pro uživatele i pro většinu platformy neviditelné; je to rozhodnutí učiněné jednou při konfiguraci a promítnuté do toho, kde soubory fyzicky leží.

Doručování přes CDN je podporováno tam, kde ho backend nabízí. Veřejné soubory — ty, které skončí na veřejných stránkách, v partnerských portálech nebo jako přílohy e-mailů s podepsanými odkazy — lze doručovat přes síť pro distribuci obsahu, takže odezva zůstane nízká bez ohledu na to, odkud se na ně někdo dívá. Pro mezinárodní prostředí nebo veřejně dostupná nasazení je CDN obvykle rozdíl mezi příjemným a vysloveně nepříjemným používáním. Prospěje to jak úložišti souborů, tak přílohám u záznamů.

Lokální záloha řeší situaci, kdy je vzdálené úložiště dočasně nedostupné. Pokud je nastavený backend pomalý, zhoršený nebo na pár minut úplně mimo, platforma se zachová smířlivě: nahrané soubory se dočasně uloží lokálně a zařadí k opětovnému pokusu, čtení se tam, kde to jde, vrátí k poslednímu známému stavu a uživatel uvidí něco jiného než tvrdou chybu. To je důležité, protože úložné backendy, jako každý vzdálený systém, občas zlobí, a platforma, která při pětiminutovém zaškobrtnutí backendu tvrdě selže na každé operaci se soubory, není platforma, na kterou se firmy chtějí spoléhat.

Ukládání neúspěšných nahrání je související funkce na straně zápisu. Soubor, který se úspěšně nahrál do platformy, ale nepodařilo se ho poslat do nastaveného backendu — protože backendu vypršel čas, vrátil přechodnou chybu nebo nahrání odmítl z důvodu, který už mezitím pominul — se neztratí. Platforma si data podrží lokálně, vede si záznam o neúspěšném odeslání a v rozumných intervalech to zkouší znovu, dokud backend soubor nepřijme. Právě tohle dělá ze spolehlivosti úložiště starost platformy, ne uživatele: uživatel neuvidí hlášku „soubor se nepodařilo uložit, zkuste to prosím později“, protože opakování proběhne samo.

Podepsané odkazy slouží k udělení časově omezeného přístupu k neveřejným souborům. Uživatel, který potřebuje sdílet dokument s někým zvenčí — bez zakládání účtu pro tuto stranu a bez trvalého zveřejnění dokumentu — vygeneruje podepsaný odkaz s nastavitelnou platností. Odkaz funguje jen ve zvoleném okně; potom přestane platit. Pro jednorázové sdílení důvěrného obsahu je to bezstarostná varianta toho, čím by jinak muselo být „prostě jim ten soubor pošlu mailem“.

Konfigurace pro každé prostředí je to, co dělá úložnou vrstvu použitelnou i tam, kde na jedné platformě běží víc zákazníků. Každé prostředí si volí vlastní sadu backendů — vlastní CDN, vlastní úložné kbelíky, vlastní pravidla směrování — aniž by se tyto volby přelévaly mezi prostředími. Provozovatel může prostředím nabídnout několik přednastavených konfigurací (sdílené výchozí nastavení pro malá prostředí, vyhrazený backend pro větší, konkrétní regionální variantu pro zákazníky s požadavky na místo uložení dat) a prostředí si vyberou, co jim sedí.

Průhlednost vůči zbytku platformy stojí za zdůraznění. Formuláře, které soubory nahrávají, pohledy, které je zobrazují, automatizace, které s nimi pracují, API, které je zpřístupňuje, úložiště souborů, které je organizuje — nic z toho úložný backend nevidí. Vidí soubory, s adresami a metadaty. O zbytek se stará úložná vrstva. Právě tohle oddělení dělá pozdější přechod mezi backendy rozumným: chování platformy se tím nezmění a stávající soubory lze přesunout, aniž by to ovlivnilo cokoli, co je používá.

Přechod mezi backendy je podporovaná operace. Když prostředí svému původnímu backendu odroste — překročí objem dat, změní se jeho regionální rozsah, posune se nákladový profil — dají se soubory v řízené migraci přesunout z jednoho backendu na druhý, s průhledně aktualizovanými adresami. Odkazy platformy se nemusí přepisovat, protože nikdy nebyly navázané na konkrétní backend.

Zpracování příslibů souborů — podrobněji rozebrané v článku o nahrávání souborů — je s úložnou vrstvou těsně provázané. Cesta od „uživatel vybral soubor“ k „soubor je bezpečně uložený ve správném backendu“ vede přes nástroj pro nahrávání, přes vrstvu příslibů, přes konfiguraci směrování až do backendu, s odolností a opakováním v každém kroku. Uživatel z toho nic nevidí. Vidí soubor, který se úspěšně nahrál, a záznam, který na něj odkazuje.

Pro prostředí, jejichž nároky na ukládání dat jsou opravdu netriviální — regulovaná odvětví, mezinárodní provoz, velký objem příloh, konkrétní nákladová omezení — bývá cloudová úložná vrstva tím, co dělá platformu použitelnou tam, kde by řešení s jediným backendem nestačilo. Pro prostředí s jednoduchými potřebami je neviditelná: zvolí výchozí nastavení, soubory skončí na rozumném místě a nikdy na to nemusí znovu myslet. Obojí je záměr.