{"id":35006,"date":"2019-10-31T22:01:47","date_gmt":"2019-10-31T19:01:47","guid":{"rendered":"https:\/\/prohoster.info\/blog\/5-printsipov-zdravogo-smysla-dlya-sozdaniya-cloud-native-apps\/"},"modified":"2019-10-31T22:01:47","modified_gmt":"2019-10-31T19:01:47","slug":"5-printsipov-zdravogo-smysla-dlya-sozdaniya-cloud-native-apps","status":"publish","type":"post","link":"https:\/\/prohoster.info\/ro\/blog\/news\/5-printsipov-zdravogo-smysla-dlya-sozdaniya-cloud-native-apps","title":{"rendered":"5 principii de bun sim\u021b pentru crearea aplica\u021biilor cloud-native","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Aplica\u021biile \u201ecloud-native\u201d sau pur \u0219i simplu \u201e\u00een cloud\u201d sunt create special pentru a func\u021biona \u00een infrastructuri cloud. De obicei, acestea sunt construite ca un set de microservicii slabe legate, ambalate \u00een containere, care sunt gestionate de o platform\u0103 cloud. Aceste aplica\u021bii sunt preg\u0103tite \u00een mod implicit pentru a face fa\u021b\u0103 defec\u021biunilor, ceea ce \u00eenseamn\u0103 c\u0103 func\u021bioneaz\u0103 \u00een mod fiabil \u0219i se scaleaz\u0103 chiar \u0219i \u00een cazul unor defec\u021biuni grave la nivelul infrastructurii. Pe de alt\u0103 parte, exist\u0103 un set de restric\u021bii (contracte) pe care platforma cloud le impune aplica\u021biilor \u00een containere pentru a le putea gestiona automat.<\/p>\n<p><img decoding=\"async\" alt=\"5 principii de bun sim\u021b pentru crearea aplica\u021biilor cloud-native\" src=\"\/wp-content\/uploads\/2019\/06\/1f4af6f356ed36d3fbd8adef333501fa.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nFiind con\u0219tien\u021bi de necesitatea \u0219i importan\u021ba migr\u0103rii c\u0103tre aplica\u021biile cloud, multe organiza\u021bii \u00eenc\u0103 nu \u0219tiu cu ce s\u0103 \u00eenceap\u0103. \u00cen acest articol, vom explora o serie de principii, respectarea c\u0103rora \u00een dezvoltarea aplica\u021biilor \u00een containere va permite valorificarea poten\u021bialului platformelor cloud \u0219i asigurarea unei func\u021bion\u0103ri fiabile \u0219i a scalabilit\u0103\u021bii aplica\u021biilor chiar \u0219i \u00een fa\u021ba unor defec\u021biuni grave \u00een infrastructura IT. Scopul final al acestor principii este s\u0103 \u00eenv\u0103\u021b\u0103m cum s\u0103 cre\u0103m aplica\u021bii care pot fi gestionate automat de platformele cloud, cum ar fi Kubernetes.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3>Principiile de proiectare a software-ului<\/h3>\n<p>\n\u00cen lumea program\u0103rii, prin principii se \u00een\u021beleg reguli destul de generale care trebuie respectate \u00een dezvoltarea software-ului. Acestea pot fi aplicate \u00een lucrul cu orice limbaj de programare. Fiecare principiu are scopuri proprii, iar instrumentul prin care se ating acestea sunt de obicei \u0219abloanele \u0219i practicile. Exist\u0103, de asemenea, o serie de principii fundamentale pentru crearea unui software de calitate, din care deriv\u0103 toate celelalte. Iat\u0103 c\u00e2teva exemple de principii fundamentale:<\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/KISS_(%D0%BF%D1%80%D0%B8%D0%BD%D1%86%D0%B8%D0%BF)\">KISS<\/a><\/noindex> (Keep it simple, stupid) \u2013 a nu complica;<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/Don%E2%80%99t_repeat_yourself\">DRY<\/a><\/noindex> (Don\u2019t repeat yourself) \u2013 a nu te repeta;<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/YAGNI\">YAGNI<\/a><\/noindex> (You aren\u2019t gonna need it) \u2013 a nu crea ceea ce nu este necesar imediat;<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%A0%D0%B0%D0%B7%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BE%D1%82%D0%B2%D0%B5%D1%82%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D0%BE%D1%81%D1%82%D0%B8\">SoC<\/a><\/noindex> (Separation of concerns) \u2013 a separa responsabilit\u0103\u021bile.<\/li>\n<\/ul>\n<p>\nDup\u0103 cum se poate observa, aceste principii nu impun reguli specifice, ci fac parte din a\u0219a-numitele considera\u021bii de bun sim\u021b bazate pe experien\u021b\u0103 practic\u0103, pe care le \u00eemp\u0103rt\u0103\u0219esc mul\u021bi dezvoltatori \u0219i la care ace\u0219tia se refer\u0103 frecvent.<br \/>\n\u00cen plus, exist\u0103 <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/SOLID_(%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%BD%D0%BE-%D0%BE%D1%80%D0%B8%D0%B5%D0%BD%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5)\">SOLID<\/a><\/noindex> \u2013 un set de primele cinci principii de programare \u0219i proiectare orientat\u0103 pe obiect, formulate de Robert Martin. SOLID include principii complementare, generalizate \u0219i deschise interpret\u0103rilor, care \u2013 aplicate \u00een ansamblu \u2013 ajut\u0103 la crearea unor sisteme software de calitate superioar\u0103 \u0219i la men\u021binerea acestora pe termen lung.<\/p>\n<p>Principiile SOLID se refer\u0103 la domeniul OOP \u0219i sunt formulate \u00een termeni precum clase, interfe\u021be \u0219i mo\u0219tenire. \u00cen mod similar, pentru aplica\u021biile de cloud, se pot formula principii de dezvoltare, cu elementul de baz\u0103 fiind containerul, nu clasa. Urm\u00e2nd aceste principii, se pot crea aplica\u021bii bazate pe containere care r\u0103spund mai bine nevoilor \u0219i obiectivelor platformelor de cloud, precum Kubernetes.<\/p>\n<h3>Containere orientate pe cloud: abordarea Red Hat<\/h3>\n<p>\nAst\u0103zi, pentru majoritatea aplica\u021biilor se poate realiza relativ u\u0219or \u00eempachetarea \u00een containere. \u00cens\u0103, pentru ca aplica\u021biile s\u0103 fie automate \u0219i orchestrate eficient \u00eentr-o platform\u0103 de cloud precum Kubernetes, este necesar\u0103 o munc\u0103 suplimentar\u0103.<br \/>\nFundamentul ideilor prezentate mai jos este metodologia <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/SOLID_(%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%BD%D0%BE-%D0%BE%D1%80%D0%B8%D0%B5%D0%BD%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5)\">Aplica\u021bia \u00een Dou\u0103sprezece Factori<\/a><\/noindex> \u0219i numeroase alte lucr\u0103ri care acoper\u0103 diferite aspecte ale cre\u0103rii aplica\u021biilor web, de la gestionarea codului surs\u0103 la modele de scalare. Principiile descrise se refer\u0103 exclusiv la dezvoltarea aplica\u021biilor bazate pe containere, construite pe baza microserviciilor \u0219i destinate platformelor de cloud, cum ar fi Kubernetes. Elementul de baz\u0103 \u00een analizele noastre este imaginea containerului, iar prin mediu \u021bint\u0103 de execu\u021bie a containerelor \u00een\u021belegem platforma de orchestrare a containerelor. Scopul principiilor propuse este de a crea containere pentru care majoritatea platformelor de orchestrare pot automatiza sarcini de programare (scheduling \u2013 alegerea gazdei pentru lansarea instan\u021bei containerului), scalare \u0219i monitorizare. Principiile sunt prezentate \u00een ordine aleatorie.<\/p>\n<h3>Principiul unei singure sarcini (Single Concern Principle, SCP)<\/h3>\n<p>\nAcest principiu este \u00een mare m\u0103sur\u0103 similar cu principiul unei singure responsabilit\u0103\u021bi (Single Responsibility Principle, <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%9F%D1%80%D0%B8%D0%BD%D1%86%D0%B8%D0%BF_%D0%B5%D0%B4%D0%B8%D0%BD%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D0%BE%D0%B9_%D0%BE%D1%82%D0%B2%D0%B5%D1%82%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D0%BE%D1%81%D1%82%D0%B8\">SRP<\/a><\/noindex>), care face parte din setul SOLID \u0219i stipuleaz\u0103 c\u0103 fiecare obiect ar trebui s\u0103 aib\u0103 o singur\u0103 responsabilitate, iar aceast\u0103 responsabilitate ar trebui s\u0103 fie complet \u00eencapsulat\u0103 \u00een clas\u0103. Esen\u021ba SRP este c\u0103 fiecare responsabilitate reprezint\u0103 un motiv de schimbare, iar clasa ar trebui s\u0103 aib\u0103 un singur motiv pentru a se schimba.<\/p>\n<p>\u00cen SCP, \u00een loc de cuv\u00e2ntul \u201eresponsabilitate\u201d (responsibility), folosim cuv\u00e2ntul \u201e\u00eendatorire\u201d (concern), pentru a indica un nivel mai \u00eenalt de abstractizare \u0219i o utilizare mai larg\u0103 a containerului, comparativ cu clasa OOP. \u0218i dac\u0103 scopul SRP este de a avea doar un singur motiv pentru schimbare, SCP are ca obiectiv cre\u0219terea capacit\u0103\u021bii de reutilizare \u0219i \u00eenlocuire a containerelor. Urm\u00e2nd SRP \u0219i cre\u00e2nd un container care rezolv\u0103 o singur\u0103 \u00eendatorie \u0219i face acest lucru \u00eentr-un mod func\u021bional complet, \u00ee\u021bi \u00eembun\u0103t\u0103\u021be\u0219ti \u0219ansele de reutilizare a acestui container \u00een diferite contexte de aplica\u021bie.<\/p>\n<p>Principiul SCP stipuleaz\u0103 c\u0103 fiecare container ar trebui s\u0103 rezolve o singur\u0103 \u00eendatorie \u0219i s\u0103 o fac\u0103 bine. \u00cen plus, SCP \u00een lumea containerelor este mai u\u0219or de realizat dec\u00e2t SRP \u00een lumea OOP, deoarece containerele \u00een general execut\u0103 un singur proces, iar cea mai mare parte a timpului acest proces rezolv\u0103 o singur\u0103 \u00eendatorie.<\/p>\n<p>Dac\u0103 un microserviciu containerizat trebuie s\u0103 rezolve simultan mai multe \u00eendatorii, acesta poate fi \u00eemp\u0103r\u021bit \u00een containere cu o singur\u0103 \u00eendatorie \u0219i reunite \u00een cadrul aceluia\u0219i pod (unitate de desf\u0103\u0219urare a platformei containerizate) prin intermediul \u0219abloanelor sidecar \u0219i init-container. \u00cen plus, SCP faciliteaz\u0103 \u00eenlocuirea unui container vechi (de exemplu, un server web sau un broker de mesaje) cu unul nou, care rezolv\u0103 aceea\u0219i \u00eendatorie, dar are func\u021bionalitate extins\u0103 sau se scaleaz\u0103 mai bine.<\/p>\n<p><img decoding=\"async\" alt=\"5 principii de bun sim\u021b pentru crearea aplica\u021biilor cloud-native\" src=\"\/wp-content\/uploads\/2019\/06\/a029e1ca36ace66550c94087e4aecc8e.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Principiul utilit\u0103\u021bii monitoriz\u0103rii (High Observability Principle, HOP)<\/h3>\n<p>\nAtunci c\u00e2nd se utilizeaz\u0103 containere ca o modalitate unificat\u0103 de ambalare \u0219i desf\u0103\u0219urare a aplica\u021biilor, aplica\u021biile \u00een sine sunt considerate ca un \u201eblack box\u201d. Totu\u0219i, dac\u0103 acestea sunt containere cloud, ele trebuie s\u0103 ofere mediu de execu\u021bie API-uri speciale pentru a controla integritatea containerelor \u0219i, dac\u0103 este necesar, s\u0103 ia m\u0103suri corespunz\u0103toare. F\u0103r\u0103 aceste API-uri, nu va fi posibil\u0103 unificarea automatiz\u0103rii actualiz\u0103rii containerelor \u0219i gestionarea ciclului lor de via\u021b\u0103, ceea ce, la r\u00e2ndul s\u0103u, va afecta rezilien\u021ba \u0219i u\u0219urin\u021ba de utilizare a sistemului software.<\/p>\n<p><img decoding=\"async\" alt=\"5 principii de bun sim\u021b pentru crearea aplica\u021biilor cloud-native\" src=\"\/wp-content\/uploads\/2019\/06\/7df1320108d9b635c10c6cf41d5dfef6.jpg\" style=\"display:block;margin: 0 auto;\" \/> <br \/>\n\u00cen practic\u0103, aplica\u021bia de tip container trebuie, cel pu\u021bin, s\u0103 aib\u0103 un API pentru diferite tipuri de teste de s\u0103n\u0103tate: teste de activitate (liveness) \u0219i teste de preg\u0103tire (readiness). Dac\u0103 aplica\u021bia pretinde mai mult, atunci trebuie s\u0103 ofere \u0219i alte mijloace de control al st\u0103rii. De exemplu, \u00eenregistrarea evenimentelor importante prin STDERR \u0219i STDOUT pentru agregarea jurnalelor folosind Fluentd, Logstash \u0219i alte instrumente similare. De asemenea, integrarea cu biblioteci de trasare \u0219i colectare de metrici, precum OpenTracing, Prometheus etc.<\/p>\n<p>\u00cen general, aplica\u021bia poate fi \u00een continuare considerat\u0103 un \u201eblack box\u201d, dar trebuie echipat\u0103 cu toate API-urile necesare platformei pentru a-i monitoriza \u0219i gestiona cel mai bine func\u021bionarea.<\/p>\n<h3>Principiul conformit\u0103\u021bii cu ciclul de via\u021b\u0103 (Life-cycle Conformance Principle, LCP)<\/h3>\n<p>\nLCP este o antitez\u0103 a HOP. Dac\u0103 HOP afirm\u0103 c\u0103 un container trebuie s\u0103 ofere platformei API-uri pentru citire, LCP impune aplica\u021biei capacitatea de a percepe informa\u021bii de la platform\u0103. \u00cen plus, containerul trebuie nu doar s\u0103 primeasc\u0103 evenimente, ci \u0219i s\u0103 reac\u021bioneze la ele. De aici provine \u0219i denumirea principiului, care poate fi considerat o cerin\u021b\u0103 de a oferi platformei API-uri pentru scriere.<\/p>\n<p><img decoding=\"async\" alt=\"5 principii de bun sim\u021b pentru crearea aplica\u021biilor cloud-native\" src=\"\/wp-content\/uploads\/2019\/06\/f32f5d133597ae3905206badc6677f92.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nPlatformele au diferite tipuri de evenimente care ajut\u0103 la gestionarea ciclului de via\u021b\u0103 al containerului. \u00cens\u0103 decizia despre care dintre acestea trebuie percepute \u0219i cum s\u0103 reac\u021bioneze trebuie s\u0103 revin\u0103 aplica\u021biei \u00een sine.<\/p>\n<p>Este clar c\u0103 unele evenimente sunt mai importante dec\u00e2t altele. De exemplu, dac\u0103 o aplica\u021bie gestioneaz\u0103 prost \u00eenchiderea brusc\u0103, aceasta trebuie s\u0103 accepte mesajele signal: terminate (SIGTERM) \u0219i s\u0103 ini\u021bieze c\u00e2t mai repede procedura de \u00eenchidere pentru a se asigura c\u0103 finalizeaz\u0103 \u00eenainte de a primi signal: kill (SIGKILL), care urmeaz\u0103 dup\u0103 SIGTERM.<\/p>\n<p>\u00cen plus, pentru ciclul de via\u021b\u0103 al aplica\u021biei, evenimentele precum PostStart \u0219i PreStop pot fi importante. De exemplu, dup\u0103 lansare, aplica\u021bia poate necesita un timp de \u201e\u00eenc\u0103lzire\u201d \u00eenainte de a putea r\u0103spunde la cereri. Sau aplica\u021bia ar trebui s\u0103 elibereze resurse \u00eentr-un mod specific la \u00eenchiderea sa.<\/p>\n<h3>Principiul imutabilit\u0103\u021bii imaginii containerului (Image Immutability Principle, IIP)<\/h3>\n<p>\nSe consider\u0103 \u00een mod obi\u0219nuit c\u0103 aplica\u021biile containerizate ar trebui s\u0103 r\u0103m\u00e2n\u0103 neschimbate dup\u0103 construirea lor, chiar \u0219i atunci c\u00e2nd sunt lansate \u00een medii diferite. Din aceasta deriv\u0103 necesitatea de a externaliza stocarea datelor \u00een timpul execu\u021biei (cu alte cuvinte, de a utiliza mijloace externe pentru aceasta) \u0219i de a se baza pe configura\u021bii externe, adaptate la mediul specific de execu\u021bie, \u00een loc s\u0103 se modifice sau s\u0103 se creeze containere unice pentru fiecare mediu. Dup\u0103 orice modificare a aplica\u021biei, imaginea containerului trebuie reconstruit\u0103 \u0219i desf\u0103\u0219urat\u0103 \u00een toate mediile utilizate. Apropo, un principiu similar se folose\u0219te \u00een managementul sistemelor IT, cunoscut sub numele de principiul imutabilit\u0103\u021bii serverelor \u0219i infrastructurii. <\/p>\n<p>Scopul IIP este de a preveni crearea unor imagini containerizate separate pentru diferite medii de execu\u021bie \u0219i de a utiliza aceea\u0219i imagine \u00een toate medii, \u00eempreun\u0103 cu configura\u021bia corespunz\u0103toare pentru fiecare mediu. Respectarea acestui principiu permite implementarea unor practici importante pentru automatizarea sistemelor cloud, cum ar fi roll-back-ul (\u00eentoarcerea) \u0219i roll-forward-ul (avansarea) actualiz\u0103rilor aplica\u021biei.<\/p>\n<p><img decoding=\"async\" alt=\"5 principii de bun sim\u021b pentru crearea aplica\u021biilor cloud-native\" src=\"\/wp-content\/uploads\/2019\/06\/86b93724830b37f82bf289b797407480.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Principiul dispozi\u021biei proceselor (Process Disposability Principle, PDP)<\/h3>\n<p>\nUna dintre cele mai importante caracteristici ale unui container este efemeritatea sa: un exemplu de container poate fi creat cu u\u0219urin\u021b\u0103 \u0219i distrus cu u\u0219urin\u021b\u0103, astfel c\u0103 poate fi \u00eenlocuit cu un alt exemplu oric\u00e2nd. Motivele pentru o astfel de \u00eenlocuire pot fi multiple: e\u0219ecul unui test de func\u021bionalitate, scalarea aplica\u021biei, migrarea pe un alt host, epuizarea resurselor platformei sau alte situa\u021bii. <\/p>\n<p><img decoding=\"async\" alt=\"5 principii de bun sim\u021b pentru crearea aplica\u021biilor cloud-native\" src=\"\/wp-content\/uploads\/2019\/06\/858287b23c276363313e35cf18b81190.jpg\" style=\"display:block;margin: 0 auto;\" \/> <br \/>\nPrin urmare, aplica\u021biile containerizate trebuie s\u0103 \u00ee\u0219i p\u0103streze starea cu ajutorul unor resurse externe sau s\u0103 foloseasc\u0103 scheme distribuite interne cu redundan\u021b\u0103. De asemenea, aplica\u021bia trebuie s\u0103 se porneasc\u0103 rapid \u0219i s\u0103 se \u00eencheie rapid, fiind preg\u0103tit\u0103 pentru un posibil e\u0219ec fatal nea\u0219teptat al hardware-ului.<\/p>\n<p>Una dintre practicile care ajut\u0103 la implementarea acestui principiu este crearea containerelor de dimensiuni mici. Mediile cloud pot alege automat gazda pentru a rula instan\u021ba unui container, astfel c\u0103 cu c\u00e2t containerul este mai mic, cu at\u00e2t se va lansa mai repede \u2013 se va copia pur \u0219i simplu mai rapid pe gazda \u021bint\u0103 prin re\u021bea.<\/p>\n<h3>Principiul autosuficien\u021bei (Self-containment Principle, S-CP)<\/h3>\n<p>\nConform acestui principiu, \u00een etapa de construire, containerul include toate componentele necesare. Containerul trebuie s\u0103 fie construit av\u00e2nd \u00een vedere c\u0103 \u00een sistem exist\u0103 doar un nucleu Linux curat, astfel \u00eenc\u00e2t toate bibliotecile suplimentare necesare trebuie s\u0103 fie incluse \u00een containerul \u00eensu\u0219i. De asemenea, trebuie s\u0103 fie incluse \u0219i asemenea lucruri precum mediul de execu\u021bie pentru limbajul de programare corespunz\u0103tor, platforma aplica\u021biei (dac\u0103 este nevoie) \u0219i alte dependen\u021be care vor fi necesare \u00een timpul func\u021bion\u0103rii aplica\u021biei containerizate. <\/p>\n<p><img decoding=\"async\" alt=\"5 principii de bun sim\u021b pentru crearea aplica\u021biilor cloud-native\" src=\"\/wp-content\/uploads\/2019\/06\/ecc7425510d63e4914c0c9a7e90b02a6.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Excep\u021biile se fac doar pentru configura\u021biile care variaz\u0103 de la un mediu la altul \u0219i care trebuie furnizate \u00een timpul execu\u021biei, de exemplu, prin Kubernetes ConfigMap.<\/p>\n<p>Aplica\u021bia poate include mai multe componente containerizate, cum ar fi un container separat de SGBD \u00een cadrul unei aplica\u021bii web containerizate. Conform principiului S-CP, aceste containere nu trebuie s\u0103 fie combinate \u00eentr-unul singur, ci trebuie s\u0103 fie astfel concepute \u00eenc\u00e2t containerul SGBD s\u0103 con\u021bin\u0103 tot ce este necesar pentru func\u021bionarea bazei de date, iar containerul aplica\u021biei web s\u0103 con\u021bin\u0103 tot ce este necesar pentru func\u021bionarea aplica\u021biei web, inclusiv serverul web. Ca rezultat, \u00een timpul execu\u021biei, containerul aplica\u021biei web va depinde de containerul SGBD \u0219i va apela la acesta dup\u0103 necesitate.<\/p>\n<h3>Principiul restric\u021bion\u0103rii \u00een timpul execu\u021biei (Runtime Confinement Principle, RCP)<\/h3>\n<p>\nPrincipiul S-CP define\u0219te modul \u00een care ar trebui s\u0103 fie construit un container \u0219i ce ar trebui s\u0103 con\u021bin\u0103 fi\u0219ierul binar al imaginii. \u00cens\u0103, containerul nu este doar o \u201ecutie neagr\u0103\u201d ale c\u0103rei singur\u0103 caracteristic\u0103 este dimensiunea fi\u0219ierului. \u00cen timpul execu\u021biei, containerul ob\u021bine \u0219i alte dimensiuni: volumul de memorie utilizat\u0103, timpul procesorului \u0219i alte resurse sistemice.<\/p>\n<p><img decoding=\"async\" alt=\"5 principii de bun sim\u021b pentru crearea aplica\u021biilor cloud-native\" src=\"\/wp-content\/uploads\/2019\/06\/a52e6a656892e57479ac014a3e6f4316.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nAici intervine principiul RCP, conform c\u0103ruia containerul trebuie s\u0103 decapaciteze cerin\u021bele sale de resurse sistemice \u0219i s\u0103 le transmit\u0103 platformei. Av\u00e2nd profiluri de resurse pentru fiecare container (c\u00e2t\u0103 resurs\u0103 de CPU, memorie, re\u021bea \u0219i sistem de stocare are nevoie), platforma poate efectua optimizarea transportului \u0219i a scal\u0103rii automate, gestion\u00e2nd capacit\u0103\u021bile IT \u0219i men\u021bin\u00e2nd nivelurile SLA pentru containere.<\/p>\n<p>\u00cen plus fa\u021b\u0103 de satisfacerea cerin\u021belor de resurse ale containerului, aplica\u021bia este de asemenea important s\u0103 nu dep\u0103\u0219easc\u0103 limitele stabilite de ea \u00eens\u0103\u0219i. Altfel, \u00een cazul unei penurii de resurse, platforma va avea mai multe \u0219anse s\u0103 includ\u0103 aplica\u021bia pe lista celor care trebuie \u00eentrerupte sau migrate.<\/p>\n<p>C\u00e2nd vorbim despre orientarea spre cloud, avem \u00een vedere \u00een primul r\u00e2nd modul de lucru. <br \/>\nMai sus, am formulat o serie de principii generale care stabilesc fundamentul metodologic pentru construirea unor aplica\u021bii containerizate de calitate pentru medii cloud.<\/p>\n<p>Trebuie men\u021bionat c\u0103, pe l\u00e2ng\u0103 aceste principii generale, ve\u021bi avea nevoie de metode \u0219i tehnici avansate suplimentare pentru lucrul cu containere. De asemenea, avem c\u00e2teva recomand\u0103ri scurte care sunt mai specifice \u0219i ar trebui aplicate (sau nu) \u00een func\u021bie de situa\u021bie:<\/p>\n<ul>\n<li>\u00cencerca\u021bi s\u0103 reduce\u021bi dimensiunea imaginilor: elimina\u021bi fi\u0219ierele temporare \u0219i nu instala\u021bi pachete inutile \u2013 cu c\u00e2t dimensiunea containerului este mai mic\u0103, cu at\u00e2t se compileaz\u0103 \u0219i se copiaz\u0103 mai repede pe gazda \u021bint\u0103 prin re\u021bea.<\/li>\n<li>Focaliza\u021bi-v\u0103 pe User-ID-uri arbitrare: nu utiliza\u021bi comanda sudo sau user-id-uri speciale pentru a rula containerele dvs.<\/li>\n<li>Eticheta\u021bi porturile importante: numerele de porturi pot fi specificate \u0219i \u00een timpul execu\u021biei, dar este mai bine s\u0103 le indica\u021bi folosind comanda EXPOSE \u2013 altor persoane \u0219i programe le va fi mai u\u0219or s\u0103 utilizeze imaginile dvs. <\/li>\n<li>P\u0103stra\u021bi datele persistente pe volume: datele care trebuie s\u0103 r\u0103m\u00e2n\u0103 dup\u0103 distrugerea containerului ar trebui s\u0103 fie scrise pe volume.<\/li>\n<li>Specifica\u021bi metadatele imaginii: etichetele, notele \u0219i anota\u021biile faciliteaz\u0103 utilizarea imaginilor - al\u021bi dezvoltatori v\u0103 vor fi recunosc\u0103tori.<\/li>\n<li>Sincroniza\u021bi gazda \u0219i imaginile: pentru unele aplica\u021bii de container, este necesar\u0103 sincronizarea containerului cu gazda pe anumite atribute, cum ar fi timpul sau identificatorul ma\u0219inii.<\/li>\n<li>\u00cen concluzie, v\u0103 \u00eemp\u0103rt\u0103\u0219im \u0219abloane \u0219i cele mai bune practici care vor ajuta la implementarea mai eficient\u0103 a principiilor men\u021bionate anterior:<br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/www.slideshare.net\/luebken\/container-patterns\">www.slideshare.net\/luebken\/container-patterns<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/docs.docker.com\/engine\/userguide\/eng-image\/dockerfile_best-practices\">docs.docker.com\/engine\/userguide\/eng-image\/dockerfile_best-practices<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"http:\/\/docs.projectatomic.io\/container-best-practices\">docs.projectatomic.io\/container-best-practices<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/docs.openshift.com\/enterprise\/3.0\/creating_images\/guidelines.html\">docs.openshift.com\/enterprise\/3.0\/creating_images\/guidelines.html<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/www.usenix.org\/system\/files\/conference\/hotcloud16\/hotcloud16_burns.pdf\">www.usenix.org\/system\/files\/conference\/hotcloud16\/hotcloud16_burns.pdf<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/leanpub.com\/k8spatterns\/\">leanpub.com\/k8spatterns<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/12factor.net\/\">12factor.net<\/a><\/noindex><\/li>\n<\/ul>\n<p>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/events.redhat.com\/profile\/form\/index.cfm?intcmp=701f20000012s47AAA&amp;PKFormID=0x5789474c4\"><b>Webinar despre noua versiune OpenShift Container Platform - 4<\/b><\/a><\/noindex><br \/>\n11 iunie la 11.00<\/p>\n<p>Ce ve\u021bi \u00eenv\u0103\u021ba:<\/p>\n<ul>\n<li>Red Hat Enterprise Linux CoreOS Imutabil<\/li>\n<li>Re\u021bea de servicii OpenShift<\/li>\n<li>Cadru Operator<\/li>\n<li>Cadru Knative<\/li>\n<\/ul>\n<p>Sursa: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/redhatrussia\/blog\/455024\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u00ab\u041e\u0431\u043b\u0430\u0447\u043d\u043e-\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435\u00bb (cloud native) \u0438\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u00ab\u043e\u0431\u043b\u0430\u0447\u043d\u044b\u0435\u00bb \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0432 \u043e\u0431\u043b\u0430\u0447\u043d\u044b\u0445 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430\u0445. \u041e\u0431\u044b\u0447\u043d\u043e \u043e\u043d\u0438 \u0441\u0442\u0440\u043e\u044f\u0442\u0441\u044f \u043a\u0430\u043a \u043d\u0430\u0431\u043e\u0440 \u0441\u043b\u0430\u0431\u043e \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0445 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432, \u0443\u043f\u0430\u043a\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435, \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043e\u0431\u043b\u0430\u0447\u043d\u043e\u0439 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u043e\u0439. \u0422\u0430\u043a\u0438\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0433\u043e\u0442\u043e\u0432\u044b \u043a \u0441\u0431\u043e\u044f\u043c, \u0430 \u0437\u043d\u0430\u0447\u0438\u0442 \u043d\u0430\u0434\u0435\u0436\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0438 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0434\u0430\u0436\u0435 \u043f\u0440\u0438 \u0441\u0435\u0440\u044c\u0435\u0437\u043d\u044b\u0445 \u043e\u0442\u043a\u0430\u0437\u0430\u0445 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043d\u043e\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f. \u041e\u0431\u0440\u0430\u0442\u043d\u0430\u044f \u0441\u0442\u043e\u0440\u043e\u043d\u0430 \u043c\u0435\u0434\u0430\u043b\u0438 \u2013 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":26340,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[702],"tags":[],"class_list":["post-35006","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-news"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u00ab\u041e\u0431\u043b\u0430\u0447\u043d\u043e-\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435\u00bb (cloud native) \u0438\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u00ab\u043e\u0431\u043b\u0430\u0447\u043d\u044b\u0435\u00bb \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0432 \u043e\u0431\u043b\u0430\u0447\u043d\u044b\u0445 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430\u0445.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/ro\/blog\/news\/5-printsipov-zdravogo-smysla-dlya-sozdaniya-cloud-native-apps\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"ro_RO\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd475 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u043e\u0432 \u0437\u0434\u0440\u0430\u0432\u043e\u0433\u043e \u0441\u043c\u044b\u0441\u043b\u0430 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f cloud-native apps | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u00ab\u041e\u0431\u043b\u0430\u0447\u043d\u043e-\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435\u00bb (cloud native) \u0438\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u00ab\u043e\u0431\u043b\u0430\u0447\u043d\u044b\u0435\u00bb \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0432 \u043e\u0431\u043b\u0430\u0447\u043d\u044b\u0445 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430\u0445.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/ro\/blog\/news\/5-printsipov-zdravogo-smysla-dlya-sozdaniya-cloud-native-apps\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T19:01:47+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:01:47+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd475 principii de bun sim\u021b pentru crearea aplica\u021biilor cloud-native | ProHoster","description":"Aplica\u021biile \u201ecloud-native\u201d sau pur \u0219i simplu \u201ecloud\u201d sunt create special pentru a func\u021biona \u00een infrastructurile de cloud.","canonical_url":"https:\/\/prohoster.info\/ro\/blog\/news\/5-printsipov-zdravogo-smysla-dlya-sozdaniya-cloud-native-apps","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"ro_RO","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd475 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u043e\u0432 \u0437\u0434\u0440\u0430\u0432\u043e\u0433\u043e \u0441\u043c\u044b\u0441\u043b\u0430 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f cloud-native apps | ProHoster","og:description":"\u00ab\u041e\u0431\u043b\u0430\u0447\u043d\u043e-\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435\u00bb (cloud native) \u0438\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u00ab\u043e\u0431\u043b\u0430\u0447\u043d\u044b\u0435\u00bb \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0432 \u043e\u0431\u043b\u0430\u0447\u043d\u044b\u0445 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430\u0445.","og:url":"https:\/\/prohoster.info\/ro\/blog\/news\/5-printsipov-zdravogo-smysla-dlya-sozdaniya-cloud-native-apps","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T19:01:47+00:00","article:modified_time":"2019-10-31T19:01:47+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"35006","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-21 21:27:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 02:11:30","updated":"2026-01-21 21:27:19","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts\/35006","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/comments?post=35006"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts\/35006\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/media\/26340"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/media?parent=35006"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/categories?post=35006"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/tags?post=35006"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}