5 mÔistlikku pÔhimÔtet cloud-native rakenduste loomiseks

„Pilvemaandatud“ (cloud native) vĂ”i lihtsalt „pilve“ rakendused luuakse spetsiaalselt toimima pilvplatvormides. Need on tavaliselt ĂŒles ehitatud nĂ”rkade sidemetega mikroteenustest, mis on pakitud konteineritesse, mida haldab pilveplatvorm. Sellised rakendused on vaikimisi hĂ€irekindlad, mistĂ”ttu toimivad ja skaleeruvad nad usaldusvÀÀrselt ka tĂ”siste infrastruktuuri rikete korral. Teiselt poolt on piirangute kogum (lepingud), mida pilveplatvorm rakendustele rakendab, et suuta neid automaatreĆŸiimis hallata.

5 mÔistlikku pÔhimÔtet cloud-native rakenduste loomiseks

MĂ”istes hĂ€sti ĂŒlemineku tĂ€htsust ja vajalikkust pilve rakendustele, ei tea paljud organisatsioonid siiski, kust alustada. Selles postituses vaatame mitmeid pĂ”himĂ”tteid, mille jĂ€rgimine konteinerirakenduste arendamisel vĂ”imaldab tĂ€ielikult Ă€ra kasutada pilveteenuseid ning saavutada rakenduste usaldusvÀÀrne toimimine ja skaleerimine isegi tĂ”siste IT-infrastruktuuri tĂ”rgete korral. Siin esitatud pĂ”himĂ”tete lĂ”ppeesmĂ€rk on Ă”ppida looma rakendusi, mida saavad automaatselt hallata pilveplatvormid nagu Kubernetes.

Tarkvaraarenduse pÔhimÔtted

Programmeermise maailmas mĂ”istetakse pĂ”himĂ”tete all ĂŒsna ĂŒldiseid reegleid, mida tuleb jĂ€rgida tarkvara arendamisel. Neid saab rakendada igas programmeerimiskeeles. Igal pĂ”himĂ”ttel on oma eesmĂ€rgid, mille saavutamiseks kasutatakse tavaliselt malle ja praktikaid. Samuti on rida pĂ”hieesmĂ€rke kvaliteetse tarkvara loomise pĂ”himĂ”tteid, millest kĂ”ik teised pĂ”himĂ”tted tulenevad. Toome vĂ€lja mĂ”ned pĂ”hieesmĂ€rkide nĂ€ited:

  • KISS (Keep it simple, stupid) – mitte keeruliseks muuta;
  • DRY (Don’t repeat yourself) – Ă€ra korduma;
  • YAGNI (You aren’t gonna need it) – Ă€ra loo seda, mida sul hetkel ei ole vaja;
  • SoC (Separation of concerns) – lahenda mured eraldi.

Nagu nĂ€ha, need printsiibid ei sea mingit konkreetset reeglistikku, vaid kuuluvad “terve mĂ”istuse” kategooriasse, mis tugineb praktilisele kogemusele ja mida jagavad paljud arendajad ning millele nad regulaarselt viitavad.
Lisaks on olemas SOLID – viis esimest objekti-orienteeritud programmeerimise ja projekteerimise printsiipi, mille sĂ”nastas Robert Martin. SOLID hĂ”lmab ĂŒldistatud ja tĂ”lgendatavates vastastikku tĂ€iustavaid printsiiple, mis – kui neid kokku rakendada – aitavad luua kvaliteetsemaid tarkvarasĂŒsteeme ja paremini neid pikaajaliselt hooldada.

SOLID pĂ”himĂ”tted kuuluvad OOP valdkonda ja on formuleeritud selliste mĂ”istete ja kontseptide keeles nagu klassid, liidesed ja pĂ€rimine. Analoogiliselt on ka pilvepĂ”histe rakenduste jaoks vĂ”imalik sĂ”nastada arenduse pĂ”himĂ”tted, kus pĂ”hielemendiks ei ole klass, vaid konteiner. Nende pĂ”himĂ”tete jĂ€rgimine vĂ”imaldab luua konteineripĂ”hiseid rakendusi, mis vastavad paremini pilveteenuste, nagu Kubernetes, eesmĂ€rkidele ja ĂŒlesannetele.

PilvepÔhised konteinerid: Red Hat'i lÀhenemine

TÀnapÀeval on konteineritesse suhteliselt lihtne panna praktiliselt igasuguseid rakendusi. Kuid et rakendusi oleks tÔhusalt automatiseeritud ja orkestreeritud pilveplatvormil nagu Kubernetes, on vajalik teha lisapingutusi.
Allpool esitatud ideede aluseks on metodoloogia Kaksteistfaktoriline rakendus ja palju teisi töid, mis kĂ€sitlevad veebirakenduste loomise erinevaid aspekte, alates allika juhtimisest kuni skaleerimisemudelite jaotamiseni. Kirjeldatud pĂ”himĂ”tted kehtivad ainult konteineripĂ”histe rakenduste arendamiseks, mis on loodud mikroteenuste alusel ja mĂ”eldud pilveplatvormidele, nagu Kubernetes. Meie arutluse aluseks on konteineri pilt, ning sihtkeskkonnana mĂ”istetakse konteinerite orkestreerimise platvormi. Pakutud pĂ”himĂ”tete eesmĂ€rk on luua konteinerid, mille jaoks enamikul orkestreerimisplatvormidel on vĂ”imalik automatiseerida ĂŒlesannete ajastamist (scheduling – hosti valimine konteineri eksemplari kĂ€ivitamiseks), skaleerimist ja jĂ€lgimist. PĂ”himĂ”tted esitatakse vabakujuliselt.

Ühe mure pĂ”himĂ”te (Single Concern Principle, SCP)

See pĂ”himĂ”te on paljuski sarnane ĂŒhe vastutuse pĂ”himĂ”ttega (Single Responsibility Principle, SRP), mis on SOLID'i osa ja ĂŒtleb, et igal objektidel peab olema ĂŒks vastutus, ja see vastutus peab olema tĂ€ielikult kapseldatud klassis. SRP olemus seisneb selles, et iga vastutus on muutuste pĂ”hjus, ning klassil peab olema ĂŒks ja ainult ĂŒks muutuste pĂ”hjus.

SCP puhul kasutame sĂ”na "vastutus" (responsibility) asemel sĂ”na "ĂŒlesanne" (concern), et viidata kĂ”rgemale abstraktsioonitasemele ja laiemale konteineri mÀÀratlemisele vĂ”rreldes OOP-klassi. Ja kui SRP eesmĂ€rk on omada ainult ĂŒhte muutuste pĂ”hjust, siis SCP taga on soov suurendada konteinerite uuesti kasutamise ja asendamise vĂ”imalusi. JĂ€rgides SRP-d ja luues konteineri, mis lahendab ainult ĂŒhe ĂŒlesande ja teeb seda funktsionaalselt tĂ€iendavalt, suurendate tĂ”enĂ€osust, et selle konteineri mudelit saab kasutada erinevates rakenduse kontekstides.

SCP pĂ”himĂ”te ĂŒtleb, et iga konteiner peab lahendama ĂŒhe kindla ĂŒlesande ja tegema seda hĂ€sti. SCP saavutamine konteinerite maailmas on lihtsam kui SRP OOP-is, kuna konteinerid tĂ€idavad tavaliselt ĂŒhte protsessi, mis enamiku ajast tegeleb ĂŒhe ja ainulaadse ĂŒlesandega.

Kui mingisugune konteineripĂ”hine mikroteenus peab lahendama korraga mitmeid ĂŒlesandeid, saab selle jagada ĂŒhekordseteks konteineriteks ja koostada need ĂŒhe podi (konteineripakettide levitamiseks mĂ”eldud ĂŒksus) alla, kasutades sidecar ja init-konteineri mudeleid. Lisaks lihtsustab SCP vana konteineri (nt veebiserveri vĂ”i sĂ”numi vahendi) asendamist uuega, mis lahendab sama ĂŒlesande, kuid omab laiendatud funktsionaalsust vĂ”i paremat skaleeritavust.

5 mÔistlikku pÔhimÔtet cloud-native rakenduste loomiseks

KÔrge jÀlgitavuse pÔhimÔte (High Observability Principle, HOP)

Konteinerite kasutamine rakenduste standardiseeritud pakkimise ja kĂ€ivitamise viisina tĂ€hendab, et rakendused ise kĂ€sitletakse kui „must kasti“. Siiski, kui need on pilve-konteinerid, peavad nad pakkuma kĂ€ituskeskkonnale spetsiifilisi API-liideseid, et kontrollida konteinerite seisukorda ja vajadusel vĂ”tta vastavad meetmed. Ilma selleta ei ole vĂ”imalik standardiseerida konteinerite uuendamise automatiseerimist ja nende elutsĂŒkli haldamist, mis omakorda halvendab tarkvarasĂŒsteemi töökindlust ja kasutusmugavust.

5 mÔistlikku pÔhimÔtet cloud-native rakenduste loomiseks
Praktikas peaks konteinerirakendusel olema vĂ€hemalt API erinevate staatuse kontrollide jaoks: aktiivsuse (liveness) ja valmisoleku (readiness) testide jaoks. Kui rakendus nĂ”uab rohkem, peaks see pakkuma ka muid vahendeid oma seisundi kontrollimiseks. NĂ€iteks oluliste sĂŒndmuste logimist STDERR ja STDOUT kaudu, et logisid koguda selliste tööriistade abil nagu Fluentd, Logstash ja teised sarnased. Samuti integreerimine jĂ€lgimise ja mÔÔtmiste kogumise teekidega, nagu OpenTracing, Prometheus jne.

Üldiselt vĂ”ib rakendust endiselt kĂ€sitleda kui 'must kaste', kuid seda tuleb varustada kĂ”igi API-dega, mis on vajalikud platvormile, et seda parimal viisil jĂ€lgida ja juhtida.

ElutsĂŒkli vastavuse printsiip (Life-cycle Conformance Principle, LCP)

LCP on HOP-i vastand. Kui HOP ĂŒtleb, et konteiner peab platvormile pakkuma API-liideseid lugemiseks, siis LCP nĂ”uab rakenduselt vĂ”imet vastu vĂ”tta teavet platvormilt. Samuti peab konteiner mitte ainult sĂŒndmusi saama, vaid ka nendel reageerima. Seega on see printsiip, mida saab kĂ€sitleda nĂ”udena pakkuda platvormile API-liideseid kirjutamiseks.

5 mÔistlikku pÔhimÔtet cloud-native rakenduste loomiseks
Platvormidel on erinevat liiki sĂŒndmusi, mis aitavad hallata konteineri elutsĂŒklit. Kuid otsustada, milliseid neist tajuda ja kuidas reageerida, peab rakendus ise.

On selge, et mĂ”ned sĂŒndmused on olulisemad kui teised. NĂ€iteks, kui rakendus ei talu ootamatut sulgemist, peab see aktsepteerima signaale signal: terminate (SIGTERM) ja kĂ€ivitama oma sulgemisprotseduuri nii kiiresti kui vĂ”imalik, et jĂ”uda signaalini signal: kill (SIGKILL), mis jĂ€rgneb SIGTERM-le.

Lisaks vĂ”ivad rakenduse elutsĂŒkli jaoks olla olulised sellised sĂŒndmused nagu PostStart ja PreStop. NĂ€iteks pĂ€rast kĂ€ivitamist vĂ”ib rakendusel olla vaja teatud aega â€žĂŒles soojendamiseks”, enne kui see suudab pĂ€ringutele vastata. VĂ”i peab rakendus teatud viisil vabastama ressursid, kui see lĂ”petab töötamise.

Konteineripildi muutumatuse pÔhimÔte (Image Immutability Principle, IIP)

On ĂŒldiselt arvatud, et konteinerirakendused peavad pĂ€rast kokkupanekut jÀÀma muutmatuks, isegi kui neid kĂ€ivitatakse erinevates keskkondades. Seega tuleneb vajadus andmete salvestamine kĂ€itamise ajal eksternaliseerida (teisisĂ”nu, kasutada selleks vĂ€list vahendit) ning toetuda vĂ€listelt, konkreetse kĂ€ituskeskkonna jaoks seadistatud konfiguratsioonidelt, selle asemel et modifitseerida vĂ”i luua unikaalseid konteinerid igaks keskkonnaks. PĂ€rast rakenduses tehtud muudatusi tuleb konteineri kujundus uuesti kokku panna ja rakendada kĂ”ikides kasutatavates keskkondades. Muide, IT-sĂŒsteemide haldamisel kasutatakse sarnast pĂ”himĂ”tet, mida tuntakse serverite ja infrastruktuuri muutumatuse printsiibina.

IIP eesmĂ€rk on vĂ€ltida eraldi konteineripiltide loomist erinevate kĂ€ituskeskkondade jaoks ja kasutada igal pool sama pilti koos konkreetse keskkonna jaoks sobiva konfiguratsiooniga. Selle pĂ”himĂ”tte jĂ€rgimine vĂ”imaldab rakendada olulisi pilvesĂŒsteemide automatiseerimise praktikaid, nagu rakenduse uuenduste tagasivĂ”tmine (roll-back) ja edasi viimine (roll-forward).

5 mÔistlikku pÔhimÔtet cloud-native rakenduste loomiseks

Protsesside ĂŒhekordsuse pĂ”himĂ”te (Process Disposability Principle, PDP)

Üks konteineri olulisemaid omadusi on selle efemeersus: konteineri koopia on lihtsalt loodav ja hĂ€vitatav, seega vĂ”ib selle igal hetkel hĂ”lpsasti asendada teise koopia vastu. Asendamiseks vĂ”ib olla palju pĂ”hjuseid: tĂ”rge, rakenduse skaleerimine, teisaldamine teisele serverile, ressursiotsing vĂ”i muud olukorrad.

5 mÔistlikku pÔhimÔtet cloud-native rakenduste loomiseks
SeetĂ”ttu peavad konteinerirakendused salvestama oma oleku mingite vĂ€listest vahenditest vĂ”i kasutama selleks sisemisi jaotatud skeeme koos ĂŒleliiga. Lisaks peab rakendus kiiresti kĂ€ivituma ja kiiresti lĂ”petama ning olema valmis Ă€kilisteks seadme riketeks.

Üks praktika, mis aitab seda pĂ”himĂ”tet ellu viia, on vĂ€ikeste konteinerite loomine. Pilveteenused saavad automaatselt valida hosti konteineri koopia kĂ€ivitamiseks, seega, mida vĂ€iksem on konteineri suurus, seda kiiremini see kĂ€ivitatakse – see lihtsalt kopeeritakse kiiremini sihtserverile ĂŒle vĂ”rgu.

Iseseisvuse pÔhimÔte (Self-containment Principle, S-CP)

Selle pĂ”himĂ”tte kohaselt sisaldab konteiner koostamise etapis kĂ”iki vajalikke komponente. Konteinerit tuleb ehitada eeldusel, et sĂŒsteemis on ainult puhas Linuxi tuum, seega peavad kĂ”ik vajalikud tĂ€iendavad teegid olema konteineris. Seal peavad olema ka sellised asjad nagu vastava programmeerimiskeele tööelu keskkond, rakenduste platvorm (vajadusel) ja muud sĂ”ltuvused, mis on vajalikud konteinerirakenduse töötamiseks.

5 mÔistlikku pÔhimÔtet cloud-native rakenduste loomiseks

Erandid tehakse vaid konfigureerimisele, mis varieeruvad keskkondade vahel ja tuleb esitada kÀitamise etapis, nÀiteks Kubernetes ConfigMapi kaudu.

Rakendus vĂ”ib sisaldada mitmeid konteineriseeritud komponente, nĂ€iteks eraldi andmebaasi konteinerit konteineriseeritud veebirakenduse osana. S-CP pĂ”himĂ”tte kohaselt ei tohiks neid kokku liita, vaid peab tagama, et andmebaasi konteiner sisaldab kĂ”ike vajalikku andmebaasi tööks ja veebirakenduse konteiner – kĂ”ike vajalikku veebirakenduse töötamiseks, sealhulgas veebiserver. SeetĂ”ttu sĂ”ltub veebirakenduse konteiner andmebaasi konteinerist ja pöördub selle poole vastavalt vajadusele.

KÀitusaja piirangu pÔhimÔte (Runtime Confinement Principle, RCP)

S-CP pĂ”himĂ”te mÀÀrab, kuidas konteinerit koguda ja mida binÀÀrfail pilt peaks sisaldama. Kuid konteiner ei ole lihtsalt 'must kast', millel on ainult ĂŒks omadus – failisuurus. KĂ€itamise ajal omandab konteiner ka teisi mÔÔtmeid: kasutatava mĂ€lu maht, CPU aeg ja teised sĂŒsteemiressursid.

5 mÔistlikku pÔhimÔtet cloud-native rakenduste loomiseks
Siin tuleb appi RCP printsiip, mille kohaselt peab konteiner dekodeerima oma nĂ”udmised sĂŒsteemiressurssidele ja edastama need platvormile. Omades iga konteineri ressursiprofiile (kui palju tal on vaja protsessorivĂ”imet, mĂ€lu, vĂ”rgu ja salvestusruumi), saab platvorm optimaalselt teostada haldamise ja automaatse skaaleerimise, hallata IT-vĂ”imekusi ja tagada SLA tasemed konteinerite jaoks.

Lisaks konteineri ressursinĂ”uete rahuldamisele on rakendusele samuti oluline mitte ĂŒletada enda mÀÀratud piire. Vastupidisel juhul, ressursi puudujÀÀgi korral, on platvorm palju tĂ”enĂ€olisem, et lisab selle rakenduste nimekirja, mida tuleb katkestada vĂ”i migreerida.

RÀÀkides pilve-fookusest, mÔistame me eelkÔige tööviisi.
Oleme ĂŒlalpool sĂ”nastanud mitmeid ĂŒldpĂ”himĂ”tteid, mis loovad metoodilise aluse kvaliteetsete konteinerirakenduste ehitamiseks pilveskeskkondades.

Oluline on mĂ€rkida, et lisaks nendele ĂŒldistele pĂ”himĂ”tetele vajate ka tĂ€iendavaid edasijĂ”udnud meetodeid ja tehnikate kasutamiseks konteinerite haldamisel. Samuti oleme koostanud mĂ”ned lĂŒhikesed soovitused, millel on spetsiifilisem sisu ja mida tuleb rakendada (vĂ”i mitte rakendada) vastavalt olukorrale:

Veebiseminar uue versiooni OpenShift Container Platform – 4
11. juuni kell 11.00

Mida te Ôppida saate:

  • Immutable Red Hat Enterprise Linux CoreOS
  • OpenShift teenusevahetus
  • Operator raamistik
  • Knative raamistik

Allikas: habr.com

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster