Med beständig lagring avses lagring av data på ett icke-flyktigt sätt. Som ett resultat så förblir den tillgänglig även när en enhet eller en applikation stängs av eller startas om. Lagring och hämtning av data gör det möjligt för webbapplikationer att spara användarinformation och tillstånd och fungera på ett tillförlitligt sätt.

I monolitiska tillämpningar är lagringsåtkomsten enkel eftersom servern och lagret är samordnade. Geografiskt distribuerade system gör dock åtkomsten mer komplex. Detta beror exempelvis på att lagringssystemet måste vara tillgängligt för alla komponenter över hela världen.

Kinsta’s containeriserade Applikationshosting-plattform använder Kubernetes beständiga volymer för att associera Beständig lagring med en eller flera av en applikations processer. Kinsta’s användare kan definiera sina beständiga lagringskrav samtidigt som de skapar applikationer i MyKinsta’s instrumentpanel.

Den här artikeln tar en plattformsoberoende titt på beständig lagring genom att utforska dess typer, arkitektur och användningsområden. Den innehåller dessutom en praktisk demonstration som illustrerar skillnaden mellan volymlagring och beständig volymlagring i Docker.

Typer av beständig lagring

Det finns flera typer av icke-flyktig lagring, inklusive traditionella snurrande diskar (hårddiskar eller HDD: er), SSD: er (Solid State Drives), NAS (Network Attached Storage) och SAN (Storage Area Networks).

  • Hårddiskar är elektromekaniska datalagringsenheter. De lagrar och hämtar digitala data med hjälp av snurrande skivor av magnetiska medier. Skivorna använder magnetiska huvuden på en rörlig manöverarm som läser och skriver data.
  • SSD-enheter kallas ibland för halvledarlagrings-enheter, solid-tillstånds-enheter eller solid-tillstånds-diskar. De använder integrerade kretsar för att lagra data permanent, vanligtvis med hjälp av sammankopplade flash-enheter som inte innehåller några rörliga delar. Deras stationära karaktär gör dem exempelvis snabbare och mer tillförlitliga än hårddiskar.
  • Nätverksansluten lagring är en grupp av hårddiskar, SSD-enheter eller båda. De är anslutna via ett lokalt nätverk med hjälp av ett filsystem som NTFS (New Technology File System) eller EXT4 (Fourth Extended Filesystem).
  • SAN är nätverksbaserade höghastighetslagrings-enheter på blocknivå, som exempelvis bandbibliotek eller diskar. Deras anslutning visas för operativsystemet som lokal lagring och är inte tillgänglig via det lokala nätverket (LAN).

Arkitektur för beständig lagring

Det finns tre metoder för beständig lagring, var och en med unika användningsområden och begränsningar.

Arkitektur för beständig lagring av objekt

I den beständiga objektarkitekturen används ORM (object-relational mapping) för att lagra data som objekt i en relations- eller nyckelvärdesdatabas. Detta tillvägagångssätt är exempelvis användbart när data inte har ett definierat schema, eftersom ORM hanterar lagring och hämtning av data.

Block-beständig arkitektur

Denna typ av arkitektur använder lagringsenheter på blocknivå. Detta är exempelvis användbart när man lagrar stora filer. Det här tillvägagångssättet är fördelaktigt när man lagrar stora mängder data, eftersom man kan använda flera block för att öka lagringskapaciteten.

Fillagrings-beständig arkitektur

Som namnet antyder använder fillagrings-beständig arkitektur ett filsystem för att lagra data. En metod som innebär att man använder databasservrar, som ger ett centraliserat sätt att lagra data. Molnhosting-lösningar som Kinsta använder databasservrar som lätt kan kopplas till applikationer och som erbjuder beständighet.

Fillagrings-beständig arkitektur är användbar i applikationer som kräver en frekvent hämtning av filer och när du behöver ett gränssnitt för att hantera dem.

Användningsområden för beständig lagring

I det här avsnittet diskuteras några användningsområden för varje lagringstyp.

Beständig lagring av objekt

  • Molnlagring: Objektbeständig lagring används ofta i molnlagrings-lösningar för att lagra och hämta stora mängder ostrukturerade data. Det kan exempelvis handla om bilder, videor och dokument. Molnleverantörer använder objektlagring för att förse kunderna med skalbara, mycket tillgängliga och hållbara lagringstjänster.
  • Analys av stora data: Objektbeständig lagring används exempelvis inom stor data-analys för att lagra och hantera stora datamängder. Detta är ofta data som används för dataanalys, maskininlärning och artificiell intelligens. Objektlagring gör det möjligt att få tillgång till data snabbt och effektivt. Som ett resultat blir det en viktig komponent i arkitekturer för stora data.
  • Nätverk för innehållsleveranser: Objektbeständig lagring används i innehållsleveransnätverk (CDN) för att lagra och distribuera innehåll. Det handlar exempelvis om bilder, videor och statiska filer, i ett globalt nätverk av servrar. Objektlagring gör det möjligt för CDN: er att leverera höghastighetsinnehåll till användare över hela världen, oavsett var de befinner sig.

Blockbeständig lagring

  • Högpresterande databehandling (HPC): HPC-miljöer erbjuder en snabb och effektiv bearbetning av stora datamängder. Block-beständig lagring gör det möjligt för HPC-kluster att lagra och hämta stora datamängder. Det kan exempelvis handla om vetenskapliga simuleringar, vädermodellering och finansiell analys. Blocklagring är ofta att föredra för HPC eftersom den erbjuder en hög prestanda och låg latenstid för åtkomst till data. Den möjliggör dessutom parallella I/O-operationer (input/output), vilket kan förbättra bearbetningstiderna avsevärt.
  • Videoredigering: Videoredigeringsprogram kräver hög prestanda och låg latenstid för åtkomst till stora videofiler. De måste dessutom kunna hantera ett stort antal I/O-operationer per sekund och ha en låg latens. Detta krävs exempelvis för att rendera och redigera videofiler i realtid. Blocklagring ger dessa möjligheter. Som ett resultat är detta en idealisk lösning för arbetsflöden för videoredigering.
  • Spel: Speltillämpningar kräver också hög prestanda och låg latens för att få tillgång till speltillgångar och spelardata. Blocklagring lagrar och hämtar snabbt stora datamängder och ser till att spelmiljöer laddas snabbt och förblir responsiva under spelets gång.

Fillagrings-beständig lagring

  • Media och underhållning: Program för videoredigering, animering och rendering använder ofta beständig lagring. Dessa tillämpningar kräver hög prestanda och låg latenstid för åtkomst till stora mediefiler, exempelvis video, ljud och bilder. Fillagring tillhandahåller ett delat filsystem som kan nås av flera klienter. Det är därför en idealisk lagringslösning för dessa tillämpningar.
  • Hantering av webbinnehåll: Webbinnehållshanteringssystem (CMS) använder fillagrings-beständig lagring i delade filsystem för att lagra och hantera webbplatsinnehåll. Det handlar exempelvis om text, bilder och multimediefiler. Fillagring ger en central plats för webbplatsens innehåll, vilket gör det lättare att hantera och uppdatera detta. Det gör det dessutom möjligt för flera användare att arbeta med samma innehåll samtidigt, vilket förbättrar samarbetet och produktiviteten.

Beständig lagring i containers

Containers är lätta, bärbara, säkra och enkla. De erbjuder dessutom en fusion mellan olika applikationer. De måste ha en mekanism för att bevara data mellan omstart och borttagning av containrar. Containers har fillagring eller ett filsystem som traditionella applikationer. När du bygger om dem med nya ändringar förlorar du dock alla icke-beständiga data.

Det är därför som containrar erbjuder möjligheten att inkludera volymlagring eller att montera en lagringsvolym. Containers behandlar lagringsvolymer som en katalog. Alla data som skrivs till volymen hamnar i hostfils-systemet.

Beständig lagring för containrar måste fungera på det här sättet. Omstart av en container skapar nämligen en ny instans och den gamla instansen kasseras. Om en container inte har en konsekvent vy av data försvinner data när containern startas om. En lagringsvolym bevarar data över sessioner och omstarter av containern. Som ett resultat kan containern behålla sitt tillstånd även om den flyttas eller startas om.

Volym vs. beständig volym

Containers erbjuder 2 sätt att lagra beständiga data: med hjälp av volymer och beständiga volymer. Det finns en betydande skillnad mellan dem. En container hanterar data i volymlagring. När du stoppar en container finns data kvar och är tillgängliga när du startar om containern. Vid tillfällen när du tar bort en container försvinner dock data eftersom du även tar bort den underliggande volymlagringen.

Beständig volymlagring eller bind mounts är ett sätt att lagra data utanför containerns filsystem. Som ett resultat går inte data förlorad när du raderar containern. De är beständiga tills de tas bort manuellt.

I följande avsnitt demonstreras båda volymtyperna med exempel.

Demonstration av beständig lagring av containers

Vi har skapat en liten webbapplikation för att demonstrera beständig lagring med Docker-containrar. Du kan följa med genom att installera Docker och hämta koden från det här GitHub-arkivet.

Applikationen är ett elementärt formulär med 2 fält för användarinmatning:

  • Titel
  • Dokumenttext
Demo-applikationens grafiska gränssnitt med fälten Titel och Dokument Text.
Demo-applikationens grafiska gränssnitt med fälten Titel och Dokument Text.

När du har sparat användarinmatningen kan du komma åt den genom att öppna filen i feedback-katalogen med det namn som anges i fältet Titel. Inmatningen från fältet Dokument Text är filens innehåll.

Hur man använder volymlagring

När du har installerat applikationen på din egen maskin kan den använda volymlagring enligt vad som visas i Dockerfilen.

Dockerfil som visar hur volymlagring används.
Dockerfil som visar hur volymlagring används.

Nu bygger du avbildningen och kör containern. För att göra detta utför du följande kommandon.

docker build -t feedback-node:volumes .
docker run -d -p 3000:80 --name feedback-app feedback-node:volumes
Bygga applikationen med volymlagring.
Bygga applikationen med volymlagring.
Körning av containern visar att den hanterar volymlagring.
Körning av containern visar att den hanterar volymlagring.

När applikationen körs kan du navigera till localhost:3000 för att skicka feedback.

Skicka feedback till applikationen.
Skicka feedback till applikationen.

Klicka på Spara och navigera till localhost:3000/feedback/test.txt för att se om inmatningen har lagrats framgångsrikt eller inte.

Framgångsrik återkoppling bekräftas.
Framgångsrik återkoppling bekräftas.

Ta bort och starta om containern för att se om inmatningen kvarstår.

docker stop feedback-app
docker start feedback-app

Om du nu besöker samma webbadress ser du att återkopplingen finns kvar. Men vad händer om du tar bort containern och startar om den?

docker stop feedback-app
docker rm feedback-app
docker run -d -p 3000:80 --name feedback-app feedback-node:volumes

Om du återvänder till webbadressen när den har startats om finns den inte längre kvar eftersom uppgifterna försvann när du tog bort containern. Volymdata finns endast kvar när containern stoppas, inte när den tas bort.

Återkopplingsdata har gått förlorade.
Återkopplingsdata har gått förlorade.

För att minska det här problemet och för att data ska finnas kvar även när du tar bort containern måste du använda beständig volymlagring eller namngiven lagring. Först bör du rensa upp containrarna och avbildningarna.

docker stop feedback-app
docker rm feedback-app
docker rmi feedback-node:volumes

Så här använder du beständig volymlagring

Innan du testar detta måste du ta bort VOLUME-attributet från Dockerfilen och bygga om avbildningen.

Uppdaterad Dockerfil för att ta bort VOLUME-attributet.
Uppdaterad Dockerfil för att ta bort VOLUME-attributet.
docker build -t feedback-node:volumes .
docker run -d -p 3000:80 --name feedback-app -v feedback:/app/feedback feedback-node:volumes

Som du kan se använder du i det andra kommandot flaggan -v för att definiera den beständiga volymen utanför containern. Den finns sedan kvar även när du tar bort containern

Precis som i föregående steg kan du prova att lägga till feedback och få tillgång till den när du stoppar, tar bort och startar om containern.

Lägga till ny feedback för ett uthållighetstest.
Lägga till ny feedback för ett uthållighetstest.
docker stop feedback-app
docker rm feedback-app
docker run -d -p 3000:80 --name feedback-app -v feedback:/app/feedback feedback-node:volumes

Som du ser är uppgifterna tillgängliga även efter att du har stoppat och tagit bort containern.

Efter att containern har stoppats och tagits bort finns uppgifterna kvar.
Efter att containern har stoppats och tagits bort finns uppgifterna kvar.

Sammanfattning

Beständig lagring är viktigt för containeriserade applikationer eftersom det gör det möjligt att bevara data utanför containerns livscykel. De två huvudtyperna av beständig lagring för containeriserade program är volymer och bind mounts. Var och en har sina fördelar och användningsområden.

Volymer lagras i containerns filsystem, medan bind mounts är direkt tillgängliga på host-maskinen.

Beständig lagring gör det möjligt att dela data mellan containrar. Som ett resultat blir det möjligt att bygga komplexa applikationer med flera nivåer. Beständig lagring är exempelvis viktigt för att säkerställa stabilitet och kontinuitet i containeriserade applikationer, vilket ger ett tillförlitligt och flexibelt sätt att lagra viktiga data.

Utvecklar du en applikation som kräver beständig lagring? Bläddra i vårt bibliotek med snabbstartsexempel för att se hur du distribuerar din applikation till Kinsta från Git-hostar som GitHub , GitLab och Bitbucket.

Vår officiella dokumentation om beständig lagring hjälper dig att snabbt få din applikation och dess data online.

Steve Bonisteel Kinsta

Steve Bonisteel är en teknisk redaktör på Kinsta som började sin författarkarriär som printjournalist och jagade ambulanser och brandbilar. Han har bevakat internetrelaterad teknik sedan slutet av 1990-talet.