Proiectați software pentru un mediu cloud native
TerminatConectați infrastructura repetabilă, procesele înlocuibile, starea durabilă și comportamentul observabil. Evaluați proiectarea cloud native dincolo de împachetarea în containere.
Publicat de TaigaCum scriem
Verificați ce ați înțelesO platformă înlocuiește un worker de raportare după o defecțiune. Ce face reîncercarea sigură?Faceți exercițiul
Ce veți învăța
- Deosebiți împachetarea în containere de comportamentul cloud native.
- Identificați riscurile privind starea, reîncercarea și înlocuirea într-un serviciu generat.
- Definiți un contract de platformă pe care agenții și oamenii îl pot verifica.
Definiți comportamentul necesar
Practicile cloud native susțin dezvoltarea și operarea repetabile în medii publice, private sau hibride. CNCF pune accent pe sisteme care rămân gestionabile, observabile și reziliente pe măsură ce se schimbă. Containerele și orchestrarea pot susține această abordare. Nu dovedesc singure toate aceste proprietăți.
Începeți cu un serviciu fictiv de raportare. Un instrument AI creează un endpoint, un worker și o imagine de container. O demonstrație produce PDF-ul corect. Înainte de producție, echipa trebuie să răspundă la altă întrebare: ce se întâmplă când platforma înlocuiește workerul în timpul unui job?
Este o întrebare despre proiectarea aplicației, dar și despre infrastructură. O repornire poate restaura procesul, pierzând însă lucrul său neterminat.
Separați procesul de starea durabilă
Prototipul păstrează joburile din coadă și rapoartele terminate pe discul containerului. Înlocuirea containerului le poate elimina pe ambele. Adăugarea de workeri poate produce și răspunsuri diferite, în funcție de workerul care primește cererea.
Proiectarea revizuită folosește o stocare durabilă pentru joburi și un serviciu aprobat de stocare a obiectelor. O cerere consemnează identitatea jobului. Un worker preia jobul, creează rezultatul și consemnează locația lui. Verificările de acces se aplică în continuare când un utilizator descarcă raportul.
| Aspect | Întrebare pentru serviciul de raportare |
|---|---|
| Stare | Ce înregistrări trebuie să supraviețuiască înlocuirii procesului? |
| Configurație | Cum rulează același artefact în fiecare mediu? |
| Identitate | Ce identitate de serviciu poate citi jobul și scrie rezultatul? |
| Stare de funcționare | Poate workerul să accepte lucru și să îl termine? |
| Oprire | Ce se întâmplă cu un job preluat când un worker se oprește? |
| Capacitate | Ce limită se aplică prima: workerii, baza de date, stocarea sau alt serviciu? |
Păstrați secretele în afara imaginii. Furnizați-le prin sistemul aprobat pentru secrete. Notați ce modificări de configurație necesită o lansare nouă sau repornirea unui proces.
Proiectați reîncercările înainte de a adăuga workeri
Să presupunem că workerul salvează un PDF, apoi se oprește înainte de a confirma jobul. Coada livrează din nou jobul. A doua încercare nu trebuie să creeze o a doua debitare a clientului sau să trimită mesaje contradictorii de terminare.
Folosiți o operațiune idempotentă unde este potrivit. Repetarea aceleiași cereri logice trebuie să păstreze efectul intenționat. Definiți o identitate stabilă a cererii, consemnați durabil rezultatul și verificați ce se întâmplă în fiecare punct de eșec. AWS descrie tehnica în ghidul pentru reîncercări sigure.
Reîncercările necesită și limite. Folosiți un timp maxim de așteptare, o limită de reîncercări și o întârziere care evită cererile repetate simultan. Păstrați lucrul eșuat pentru inspecție în loc să îl reîncercați la nesfârșit.
Faceți starea dorită verificabilă
O configurație declarativă precizează instalarea intenționată. Un controller lucrează pentru a menține acea stare. De exemplu, un Kubernetes Deployment gestionează replicile aplicației și actualizările controlate. Aplicația trebuie totuși să gestioneze corect înlocuirea.
Gestionați versiunile infrastructurii și ale configurației aplicației. Verificați modificările prin procesul normal de livrare. Observați terminarea efectivă a joburilor, timpul de așteptare al joburilor din coadă, defecțiunile și limitele dependențelor. Un proces care rulează poate totuși să nu poată produce un raport.
Alegeți o platformă pe care echipa o poate opera
Cloud native nu cere transformarea fiecărei aplicații în microservicii. O aplicație modulară pe un mediu de execuție gestionat își poate îndeplini cerințele. Mai multe servicii introduc mai multe interfețe, decizii de instalare și muncă operațională.
Oferiți agentului de dezvoltare contractul efectiv al platformei: mediul de execuție acceptat, metoda de identitate, serviciile de date, regulile de instalare și dovezile necesare. Testați comportamentul la întrerupere și înlocuire împreună cu cererile reușite. Continuați cu disponibilitatea și limitele defecțiunilor.
Faceți exercițiul
Un serviciu fictiv de raportare stochează joburile și fișierele terminate pe discul containerului. Desenați fluxul prin cerere, job, fișier și descărcare. Marcați starea durabilă. Definiți ce se întâmplă dacă workerul se oprește după scrierea unui fișier, dar înainte de confirmarea jobului.
Descărcați fișa de lucru (Markdown)Debifarea acestei opțiuni șterge tot progresul salvat în acest browser.
Progresul rămâne în acest browser. Fără cont, fără urmărire.
Surse și lecturi suplimentare
- CNCF: Cloud Native Definition v1.1 ↗
- Kubernetes: Deployments ↗
- AWS Builders’ Library: Making retries safe with idempotent APIs ↗