Stocare persistentă: memorie pe termen lung în era containerelor
Publicat: 2023-04-17Stocarea persistentă se referă la păstrarea datelor într-o manieră nevolatilă, astfel încât acestea să rămână disponibile chiar și după ce un dispozitiv sau o aplicație se oprește sau repornește. Stocarea și preluarea datelor permit aplicațiilor web să salveze informațiile și stările utilizatorului și să funcționeze în mod fiabil.
În aplicațiile monolitice, accesul la stocare este simplu, deoarece serverul și stocarea locuiesc împreună. Cu toate acestea, sistemele distribuite geografic fac accesul mai complex, deoarece sistemul de stocare trebuie să rămână disponibil pentru toate componentele din întreaga lume.
Containerizarea complică și mai mult problema, deoarece containerele sunt ușoare, apatride și efemere - caracteristici nepotrivite pentru stocarea datelor. Prin urmare, orice soluție de stocare persistentă trebuie să poată funcționa perfect cu containerele, adăugând un alt strat de complexitate.
Acest articol analizează stocarea persistentă explorând tipurile, arhitectura și cazurile de utilizare ale acesteia. De asemenea, oferă o demonstrație practică care ilustrează diferența dintre stocarea volumului și stocarea volumului persistent în Docker.
Tipuri de stocare persistentă
Există mai multe tipuri de stocare nevolatilă, inclusiv discuri rotative tradiționale (unități hard disk sau HDD), unități cu stare solidă (SSD), stocare atașată la rețea (NAS) și rețele de stocare (SAN).
- HDD-urile sunt dispozitive electro-mecanice de stocare a datelor care stochează și preiau date digitale folosind discuri rotative de suport magnetic. Discurile folosesc capete magnetice pe un braț de acţionare mobil care citesc și scriu date.
- SSD-urile , numite uneori dispozitive de stocare cu semiconductori, dispozitive cu stare solidă sau discuri cu stare solidă, folosesc ansambluri de circuite integrate pentru a stoca datele în mod persistent, utilizând de obicei dispozitive flash interconectate care nu conțin piese mobile. Natura lor staționară le face mai rapide și mai fiabile decât HDD-urile.
- Stocarea atașată la rețea este un grup de HDD-uri, SSD-uri sau ambele, conectate printr-o rețea locală folosind un sistem de fișiere precum New Technology File System (NTFS) sau al patrulea sistem de fișiere extins (EXT4).
- SAN-urile sunt dispozitive de stocare de mare viteză în rețea, la nivel de bloc, cum ar fi biblioteci de benzi sau matrice de discuri. Conexiunea lor apare la sistemul de operare ca stocare locală și nu este accesibilă prin rețeaua locală (LAN).
Arhitectură de stocare persistentă
Există trei abordări ale stocării persistente, fiecare cu cazuri de utilizare și limitări unice.
Arhitectură persistentă a obiectelor
Abordarea arhitecturii persistente a obiectelor folosește maparea obiect-relațională (ORM) pentru a stoca date ca obiecte într-o bază de date relațională sau cheie-valoare. Această abordare este utilă atunci când datele nu au o schemă definită, deoarece ORM-ul se ocupă de stocarea și preluarea lor.
Bloc Arhitectura persistentă
Arhitectura bloc persistentă utilizează dispozitive de stocare la nivel de bloc, care sunt utile atunci când stocați fișiere mari. Această abordare este benefică atunci când stocați cantități mari de date, deoarece puteți utiliza mai multe blocuri pentru a crește capacitatea de stocare.
Arhitectură persistentă Filestore
După cum sugerează și numele, abordarea arhitecturii persistente a depozitului de fișiere folosește un sistem de fișiere pentru a stoca date. O metodă implică utilizarea serverelor de baze de date, care oferă o modalitate centralizată de stocare a datelor. Soluțiile de găzduire în cloud precum Kinsta folosesc servere de baze de date care sunt ușor de atașat la aplicații și oferă persistență.
Arhitectura persistentă Filestore este utilă în aplicațiile care necesită regăsire frecventă a fișierelor și atunci când aveți nevoie de o interfață pentru a le gestiona.
Cazuri de utilizare persistente pentru stocare
Această secțiune discută câteva dintre cazurile de utilizare ale fiecărui tip de stocare.
Stocare persistentă a obiectelor
- Stocare în cloud: stocarea persistentă a obiectelor este utilizată în mod obișnuit în soluțiile de stocare în cloud pentru a stoca și a prelua cantități mari de date nestructurate, cum ar fi imagini, videoclipuri și documente. Furnizorii de cloud folosesc stocarea obiectelor pentru a oferi clienților servicii de stocare scalabile, foarte disponibile și durabile.
- Analiza datelor mari: stocarea persistentă a obiectelor este utilizată în analiza datelor mari pentru a stoca și gestiona seturi mari de date utilizate adesea pentru analiza datelor, învățarea automată și AI. Stocarea obiectelor permite accesarea rapidă și eficientă a datelor, făcându-le o componentă cheie a arhitecturilor de date mari.
- Rețele de livrare de conținut: stocarea persistentă a obiectelor este utilizată în rețelele de livrare de conținut (CDN) pentru a stoca și distribui conținut, cum ar fi imagini, videoclipuri și fișiere statice, pe o rețea globală de servere. Stocarea obiectelor permite CDN-urilor să livreze conținut de mare viteză utilizatorilor din întreaga lume, indiferent de locație.
Blocați stocarea persistentă
- Calculatoare de înaltă performanță (HPC) : medii HPC procesează rapid și eficient volume considerabile de date. Blocarea stocării persistente permite clusterelor HPC să stocheze și să recupereze seturi mari de date, cum ar fi simulări științifice, modelare meteorologică și analiză financiară. Stocarea în bloc este adesea preferată pentru HPC deoarece oferă acces de înaltă performanță, cu latență scăzută la date și permite operațiuni paralele de intrare/ieșire (I/O), ceea ce poate îmbunătăți semnificativ timpii de procesare.
- Editare video: aplicațiile de editare video necesită acces de înaltă performanță și latență redusă la fișiere video mari. De asemenea, trebuie să găzduiască un număr semnificativ de operațiuni I/O pe secundă și o latență scăzută pentru a reda și edita fișiere video în timp real. Stocarea în bloc oferă aceste capabilități, ceea ce o face o soluție ideală pentru fluxurile de lucru de editare video.
- Jocuri: aplicațiile de jocuri necesită, de asemenea, performanțe ridicate și latență scăzută pentru a accesa activele jocului și datele jucătorilor. Blocarea stocării stochează și preia rapid cantități mari de date, asigurându-se că mediile de joc se încarcă rapid și rămân receptive în timpul jocului.
Filestore Persistent Storage
- Media și divertisment: aplicațiile de editare video, animație și randare folosesc de obicei stocarea persistentă. Aceste aplicații necesită acces de înaltă performanță și latență scăzută la fișiere media mari, cum ar fi video, audio și imagini. Filestore oferă un sistem de fișiere partajat care poate fi accesat de mai mulți clienți, ceea ce îl face o soluție de stocare ideală pentru aceste aplicații.
- Gestionarea conținutului web: sistemele de gestionare a conținutului web (CMS) utilizează stocarea persistentă de stocare a fișierelor în sistemele de fișiere partajate pentru a stoca și gestiona conținutul site-ului web, cum ar fi text, imagini și fișiere multimedia. Filestore oferă o locație centrală pentru conținutul site-ului web, facilitând gestionarea și actualizarea acestuia. De asemenea, permite mai multor utilizatori să lucreze simultan la același conținut, îmbunătățind colaborarea și productivitatea.
Depozitare persistentă în containere
Containerele sunt ușoare, portabile, sigure și simple, oferind o fuziune între diferite aplicații. Ele trebuie să aibă un mecanism pentru a persista datele între repornirea containerului și eliminare. Containerele au stocare de fișiere sau un sistem de fișiere precum aplicațiile tradiționale, dar ori de câte ori le reconstruiești cu noi modificări, pierzi toate datele nepersistente.
De aceea, containerele oferă opțiunea de a include un volum de stocare sau de a monta un volum de stocare. Containerele tratează volumele de stocare ca pe un director. Orice date scrise pe volum intră în sistemul de fișiere gazdă.
Stocarea persistentă pentru containere trebuie să funcționeze în acest fel, deoarece repornirea unui container creează o instanță nouă și renunță la instanța veche. Dacă un container nu are o vizualizare consecventă a datelor, datele vor dispărea la repornirea containerului. Un volum de stocare păstrează datele între sesiuni și repornește containerul, permițând containerului să-și mențină starea chiar dacă este mutat sau repornit.
Volumul vs volum persistent
Containerele oferă 2 moduri de stocare a datelor persistente: folosind volume și volume persistente. Există o diferență semnificativă între ele. Un container gestionează datele în stocarea de volum. Când opriți un container, datele rămân și sunt disponibile atunci când reporniți containerul. Cu toate acestea, atunci când ștergeți sau eliminați un container, datele se pierd, deoarece ștergeți și spațiul de stocare subiacent.
Stocarea persistentă a volumului sau monturile de legare este o modalitate de stocare a datelor în afara sistemului de fișiere al containerului. În acest fel, datele nu se pierd nici măcar atunci când ștergeți containerul. Este persistent până când este șters manual.
Următoarea secțiune demonstrează ambele tipuri de volum cu exemple.
Container Persistent Storage Demo
Am creat o mică aplicație web pentru a demonstra stocarea persistentă cu containerele Docker. Puteți urma instalarea Docker și preluarea codului din acest depozit GitHub.
Aplicația este un formular elementar cu 2 câmpuri pentru introducerea utilizatorului:
- Titlu
- Textul documentului
Odată ce ați salvat intrarea utilizatorului, o puteți accesa deschizând fișierul din directorul de feedback cu numele furnizat în câmpul Titlu . Intrarea din câmpul Text document este conținutul fișierului.
Cum să utilizați stocarea volumului
Odată ce ați instalat aplicația pe propria mașină, aceasta poate utiliza stocarea de volum așa cum se arată în fișierul Dockerfile .
Acum, construiți imaginea și rulați containerul. Pentru a face acest lucru, executați următoarele comenzi.
docker build -t feedback-node:volumes . docker run -d -p 3000:80 --name feedback-app feedback-node:volumes
Odată ce aplicația rulează, navigați la localhost:3000 pentru a trimite feedback.
Faceți clic pe Salvare și navigați la localhost:3000/feedback/test.txt pentru a vedea dacă intrarea este stocată cu succes sau nu.
Scoateți și reporniți containerul pentru a vedea dacă intrarea persistă.
docker stop feedback-app docker start feedback-app
Dacă accesați acum aceeași adresă URL, vedeți că feedback-ul este încă acolo. Dar ce se întâmplă dacă scoateți containerul și îl reporniți?
docker stop feedback-app docker rm feedback-app docker run -d -p 3000:80 --name feedback-app feedback-node:volumes
Odată repornită, dacă reveniți la acea adresă URL, aceasta nu mai există, deoarece datele s-au pierdut când ați îndepărtat containerul. Datele de volum persistă doar la oprirea containerului, nu la îndepărtarea acestuia.
Pentru a atenua această problemă și a persista datele chiar și atunci când eliminați containerul, trebuie să utilizați stocarea de volum persistentă sau stocarea denumită. În primul rând, ar trebui să curățați recipientele și imaginile.
docker stop feedback-app docker rm feedback-app docker rmi feedback-node:volumes
Cum să utilizați stocarea de volum persistentă
Înainte de a testa acest lucru, trebuie să eliminați atributul VOLUME din fișierul Docker și să reconstruiți imaginea.
docker build -t feedback-node:volumes . docker run -d -p 3000:80 --name feedback-app -v feedback:/app/feedback feedback-node:volumes
După cum puteți vedea, în a doua comandă, utilizați indicatorul -v
pentru a defini volumul persistent în afara containerului, care persistă chiar și atunci când eliminați containerul.
La fel ca în pasul anterior, încercați să adăugați feedback și să îl accesați după ce opriți, eliminați și reporniți containerul.
docker stop feedback-app docker rm feedback-app docker run -d -p 3000:80 --name feedback-app -v feedback:/app/feedback feedback-node:volumes
După cum vedeți, chiar și după oprirea și îndepărtarea containerului, datele sunt accesibile și rămân.
rezumat
Stocarea persistentă este vitală pentru aplicațiile containerizate, deoarece permite păstrarea datelor în afara ciclului de viață al unui container. Cele două tipuri principale de stocare persistentă pentru aplicațiile containerizate sunt volumele și suporturile de legare, fiecare cu beneficiile și cazurile de utilizare.
Volumele sunt stocate în sistemul de fișiere al containerului, în timp ce monturile de legătură sunt accesibile direct pe mașina gazdă.
Stocarea persistentă permite partajarea datelor între containere, făcând posibilă construirea de aplicații complexe, cu mai multe niveluri. Stocarea persistentă este esențială pentru asigurarea stabilității și continuității aplicațiilor containerizate, oferind o modalitate fiabilă și flexibilă de stocare a datelor cruciale.
Și dacă utilizați Docker pentru a vă dezvolta aplicațiile web, veți găsi că este ușor să configurați implementările Dockerfile cu serviciul de găzduire a aplicațiilor Kinsta.