5 otstarbekuse pÔhimÔtet cloud-native rakenduste loomiseks

„PilvepĂ”hised“ (cloud native) vĂ”i lihtsalt „pilve“ rakendused on loodud spetsiaalselt töötamiseks pilveinfrastruktuurides. Need ehitatakse tavaliselt kui nĂ”rkade seostega mikroteenuste kogumid, mis on pakitud konteineritesse, mida omakorda haldab pilveplatvorm. Sellised rakendused on eeldusena valmis ebaĂ”nnestumisteks, mis tĂ€hendab, et nad töötavad ja skaleeruvad usaldusvÀÀrselt isegi tĂ”siste infrastruktuuri taseme rike korral. TagakĂŒljeks on piirangute kogum (lepingud), mida pilveplatvorm kehtestab konteinerirakendustele, et neid automaatselt hallata.

5 otstarbekuse pÔhimÔtet cloud-native rakenduste loomiseks

Teades vĂ€ga hĂ€sti pilverakenduste ĂŒlemineku vajadust ja tĂ€htsust, on paljud organisatsioonid endiselt teadmatuses, kust alustada. Selles postituses vaatleme mitmeid pĂ”himĂ”tteid, mille jĂ€rgimine konteinerirakenduste arendamisel vĂ”imaldab maksimeerida pilveplatvormide potentsiaali ning saavutada rakenduste usaldusvÀÀrne töö ja skaleerimine isegi tĂ”siste IT-infrastruktuuri taseme rikke korral. Siin esitatud pĂ”himĂ”tete lĂ”ppeesmĂ€rk on Ă”ppida looma rakendusi, mida pilveplatvormid, nagu Kubernetes, saavad automaatselt hallata.

Tarkvaraarenduse projekteerimise pÔhimÔtted

Programmeerimise maailmas mĂ”istetakse pĂ”himĂ”tete all ĂŒsna ĂŒldiseid reegleid, mida tuleb jĂ€rgida tarkvara arendamisel. Neid saab rakendada igasuguste programmeerimiskeelte töös. Igal pĂ”himĂ”ttel on oma eesmĂ€rgid, mille saavutamise vahenditena toimivad tavaliselt malli- ja praktikad. Samuti on olemas rida alusmĂ”tteid kvaliteetse tarkvara loomisel, millest tulenevad kĂ”ik teised. Toome vĂ€lja mĂ”ned alusreeglid:

  • KISS (Keep it simple, stupid) – mitte keeruliseks muuta;
  • DRY (Don’t repeat yourself) – mitte korduda;
  • YAGNI (You aren’t gonna need it) – mitte luua seda, mille jĂ€rele ei ole vahetut vajadust;
  • SoC (Separation of concerns) – jagada vastutusi.

Nagu nÀha, ei sea need pÔhimÔtted mingeid konkreetseid reegleid, vaid kuuluvad nn tervet mÔistust silmas pidavate kaalutluste klassi, mida jagavad paljud arendajad ning millele nad regulaarselt viitavad.
Lisaks on olemas SOLID – komplekt esimestest viiest objekti-orienteeritud programmeerimise ja disaini pĂ”hiprintsiibist, mis on formuleeritud Robert Martin'i poolt. SOLID hĂ”lmab ĂŒldisi ja avatud tĂ”lgendusele vastavaid vastastikku toetavaid pĂ”himĂ”tteid, mis – kui neid rakendada koos – aitavad luua kvaliteetsemaid tarkvarasĂŒsteeme ja paremini neid pikaajaliselt hooldada.

SOLID printsiibid kuuluvad OOP valdkonda ja on formuleeritud selliste mĂ”istete ja kontseptsioonide keeles nagu klassid, liidesed ja pĂ€rimine. Samamoodi saab pilvepĂ”histe rakenduste jaoks formuleerida arendusprintsiibid, kusjuures baasĂŒksuseks pole klass, vaid konteiner. Nende pĂ”himĂ”tete jĂ€rgimine vĂ”imaldab luua konteinerirakendusi, mis vastavad paremini pilveplatvormide nagu Kubernetes eesmĂ€rkidele ja ĂŒlesannetele.

PilvepÔhised konteinerid: Red Hati lÀhenemine

TÀnapÀeval on konteineritesse suhteliselt lihtne pakendada praktiliselt iga rakendus. Kuid rakenduste tÔhusaks automatiseerimiseks ja orkestreerimiseks selliste pilveplatvormide nagu Kubernetes raames on vajalik tÀiendav pingutus.
Allpool esitatud ideede aluseks on metodoloogia The Twelve-Factor App ja paljud muud tööd erinevate veebiĂ€ride loomise aspektide kohta, alates lĂ€htekoodi haldusest kuni skaleerimismudeliteni. Kirjeldatud pĂ”himĂ”tted kehtivad ainult konteinerirakenduste arendamise kohta, mis on ehitatud mikroteenuste alusel ja mĂ”eldud pilveplatvormidele nagu Kubernetes. Meie arutluste baasĂŒksuseks on konteineri pilt, ja konteinerite sihtkeskkonnana mĂ”istetakse konteinerite orkestreerimisplatvormi. Pakutud pĂ”himĂ”tete eesmĂ€rk on luua konteinerid, mille puhul enamikus orkestreerimisplatvormides on vĂ”imalik automatiseerida sĂ”idukite jaotamist (scheduling – hosti valimine konteineriexemplari kĂ€ivitamiseks), skaleerimist ja jĂ€lgimist. PĂ”himĂ”tted esitatakse suvalises jĂ€rjekorras.

Ühe vastutuse printsiip (Single Concern Principle, SCP)

See printsiip on paljuski sarnane ĂŒhe vastutuse printsiibiga (Single Responsibility Principle, SRP), mis on SOLIDi osa ja ĂŒtleb, et igal objektil peaks olema ĂŒks vastutus, mis peab olema tĂ€ielikult kapseldatud klassis. SRP olemus seisneb selles, et iga vastutus on muutuste pĂ”hjus ja klassil peaks olema vaid ĂŒks muudetav pĂ”hjus.

SCP puhul kasutame sĂ”na „mure” (concern) juhtumite tĂ€histamiseks, et viidata kĂ”rgemale abstraktsiooni tasemele ja laiemale container'ite mÀÀratlemisele vĂ”rreldes OOP-kliendiga. Ja kui SRP eesmĂ€rk on omada vaid ĂŒhte muutuste pĂ”hjust, siis SCP taga on soov suurendada container'ite taaskasutusvĂ”imet ja asendatavust. JĂ€rgides SRP-d ja luues container'i, mis lahendab ĂŒhe ja ainukese ĂŒlesande ning teeb seda funktsionaalselt lĂ”peva viisina, suurendate vĂ”imalusi selle container'i kujutise taaskasutamiseks erinevates rakenduse kontekstides.

SCP printsiip ĂŒtleb, et iga container peab lahendama ainult ĂŒhe ĂŒlesande ja tegema seda hĂ€sti. SCP container'ite maailmas saavutatakse kergemini kui SRP OOP maailmas, kuna container'id tĂ€idavad tavaliselt ĂŒhte protsessi ja suure osa ajast lahendab see ĂŒhe ja ainukese ĂŒlesande.

Kui mĂ”ni container mikroteenus peab lahendama korraga mitu ĂŒlesannet, siis saab selle jagada ĂŒhekordseteks container'iteks ja kokku liita ĂŒhe pod'i (container platvormi juurutamise ĂŒksus) raames sidecar'i ja init-container'ite mallide abil. Lisaks lihtsustab SCP vanade container'ite (nt veebiserveri vĂ”i sĂ”numite vahetaja) asendamist uuega, mis lahendab sama ĂŒlesande, kuid omab laiemat funktsionaalsust vĂ”i paremat skaleeritavust.

5 otstarbekuse pÔhimÔtet cloud-native rakenduste loomiseks

KÔrge jÀlgitavuse printsiip (High Observability Principle, HOP)

Konteinerite kasutamisel kui ĂŒhtsete rakenduste pakendamise ja kĂ€ivitamise viiside puhul kĂ€sitletakse rakendusi endid kui "mustade kaste". Siiski, kui need on pilvepĂ”hised konteinerid, peavad nad pakkuma kĂ€itamise keskkonnale erilise API, et kontrollida konteinerite töökindlust ja vajadusel vĂ”tta vastavaid meetmeid. Ilma selleta pole vĂ”imalik automatiseerida konteinerite uuendamist ja nende elutsĂŒkli haldamist, mis omakorda halvendab tarkvarasĂŒsteemi usaldusvÀÀrsust ja kasutusmugavust.

5 otstarbekuse pÔhimÔtet cloud-native rakenduste loomiseks
Praktikas peaks konteinerirakendus vĂ€hemalt omama API-d erinevate töökindluse kontrollide jaoks: aktiivsuse testid (liveness) ja valmisoleku testid (readiness). Kui rakendus vĂ€idab end olevat rohkem, peaks see pakkuma ka teisi vahendeid oma oleku kontrollimiseks. NĂ€iteks oluliste sĂŒndmuste logimise kaudu STDERR ja STDOUT, et koguda logisid nagu Fluentd, Logstash ja teised sarnased tööriistad. Samuti tuleks integreerida jĂ€lgimis- ja mÔÔtmisraamatukogud, nagu OpenTracing, Prometheus jne.

Üldiselt vĂ”ib rakendust endiselt kĂ€sitleda kui "must kaste", kuid samas tuleb seda varustada kĂ”ikide API-dega, mis on vajalikud platvormi jaoks, et jĂ€lgida ja hallata seda parimal vĂ”imalikult viisil.

ElutsĂŒkli kohandamise pĂ”himĂ”te (Life-cycle Conformance Principle, LCP)

LCP on HOPi vastand. Kui HOP ĂŒtleb, et konteiner peab pakkuma platvormile API-d lugemiseks, siis LCP nĂ”uab rakendustelt vĂ”imet vastu vĂ”tta teavet platvormilt. Samuti peab konteiner mitte ainult saama sĂŒndmusi, vaid ka neile kohanduma, ehk reageerima. SeetĂ”ttu on selle pĂ”himĂ”tte nimetus, mida vĂ”ib pidada nĂ”udmiseks, et platvormile tuleks pakkuda API-d kirjutamiseks.

5 otstarbekuse pÔhimÔtet cloud-native rakenduste loomiseks
Platvormidel on erinevat tĂŒĂŒpi sĂŒndmused, mis aitavad konteineri elutsĂŒklit hallata. Kuid see, milliseid neist vastu vĂ”tta ja kuidas reageerida, peaks otsustama rakendus ise.

On selge, et mĂ”ned sĂŒndmused on olulisemad kui teised. NĂ€iteks, kui rakendus talub halvasti ootamatut sulgemist, peab see vastu vĂ”tma signaale signal: terminate (SIGTERM) ja vĂ”imalikult kiiresti algatama sulgemisprotseduuri, et jĂ”uda enne signaali signal: kill (SIGKILL), mis tuleb pĂ€rast SIGTERM-i.

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

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

Üldiselt arvatakse, et konteenirakendused peavad pĂ€rast ehitamist jÀÀma muutumatuks, isegi kui need kĂ€ivitatakse erinevates keskkondades. SeetĂ”ttu tuleneb vajadus eksterneerida andmete salvestamine toimimise etapis (teisisĂ”nu, kasutada selleks vĂ€liseid vahendeid) ja toetuda vĂ€listele, konkreetse tĂ€itmisreegliga kohandatud seadistustele, selle asemel et modifitseerida vĂ”i luua ainulaadseid konteinereid iga keskkonna jaoks. PĂ€rast rakenduses tehtud muudatusi tuleb konteineripilt uuesti ehitada ja juurutada kĂ”igis kasutatavates keskkondades. Muide, IT-sĂŒsteemide haldamisel kasutatakse sarnast pĂ”himĂ”tet, mida tuntakse serverite ja infrastruktuuri muutumatuse pĂ”himĂ”ttena.

IIP eesmĂ€rk on Ă€ra hoida eraldi konteineripiltide loomist erinevate tĂ€itmisreeglite jaoks ja kasutada ĂŒhesugust pilti koos vastava seadistusega konkreetsele keskkonnale. Selle pĂ”himĂ”tte jĂ€rgimine vĂ”imaldab rakendada selliseid olulisi automaatika praktikaid pilvesĂŒsteemide jaoks nagu rakenduse uuenduste tagasivĂ”tmine (roll-back) ja edasi veeretamine (roll-forward).

5 otstarbekuse pÔhimÔtet cloud-native rakenduste loomiseks

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

Üks konteineri olulisemaid omadusi on selle efemeersus: konteineri eksemplari loomine on lihtne ja sama lihtne on see hĂ€vitada, seega saab selle igal ajal lihtsalt asendada teise eksemplariga. Selliseks asendamiseks vĂ”ib olla palju pĂ”hjuseid: edukuse testi lĂ€bikukkumine, rakenduse skaleerimine, ĂŒle viimine teisele hostile, platvormi ressursside ammendumine vĂ”i muud olukorrad.

5 otstarbekuse pÔhimÔtet cloud-native rakenduste loomiseks
SeetÔttu peavad konteinerirakendused oma olekut sÀilitama mingi vÀlise vahendi kaudu vÔi kasutama selleks sisemisi jaotatud skeeme koos varundamisega. Lisaks peab rakendus kiiresti kÀivituma ja kiiresti lÔpetama ning olema valmis ootamatuks kriitiliseks riistvara tÔrkeks.

Üks praktika, mis aitab seda pĂ”himĂ”tet rakendada, on luua vĂ€ikese suurusega konteinerid. Pilvemahud saavad automaatselt valida hosti, et kĂ€ivitada konteinerimudelit, seega mida vĂ€iksem on konteineri suurus, seda kiiremini see kĂ€ivitub – see kopeeritakse lihtsalt kiiremini sihthostile vĂ”rgu kaudu.

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

Selle pĂ”himĂ”tte kohaselt sisaldab konteiner oma ehitusetapis kĂ”iki vajalikke komponente. Konteinerit tuleb ehitada eeldusel, et sĂŒsteemis on vaid puhas Linuxi kerneli, seega kĂ”ik vajalikud lisaraamatukogud tuleb paigutada konteinerisse. Seal peaksid olema ka sellised asjad nagu vastava programmeerimiskeele töötlemisvĂ”ime, rakenduste platvorm (vajadusel) ja muud sĂ”ltuvused, mis on vajalikud konteinerirakenduse tööks.

5 otstarbekuse pÔhimÔtet cloud-native rakenduste loomiseks

Erandid tehakse vaid konfiguratsioonide jaoks, mis varieeruvad keskkonnast keskkonda ja peavad olema esitatud jooksvalt, nÀiteks lÀbi Kubernetes ConfigMap.

Rakendus vĂ”ib sisaldada mitmeid konteineriseeritud komponente, nĂ€iteks eraldi andmebaasi konteiner konteineritest koosneva veebi rakenduse sees. Vastavalt S-CP pĂ”himĂ”ttele ei tohi neid konteinerid kokku liita, vaid tuleb teha nii, et andmebaasi konteiner sisaldab kĂ”ike vajalikku andmebaasi tööks ning veebi rakenduse konteiner – kĂ”ike vajalikku veebi rakenduse tööks, sealhulgas veebiserverit. Selle tulemusena sĂ”ltub veebi rakenduse konteiner jooksvalt andmebaasi konteinerist ja pöördub selle poole vajadusel.

Jooksuaegne piirangupÔhimÔte (Runtime Confinement Principle, RCP)

S-CP pĂ”himĂ”te mÀÀratleb, kuidas konteiner peab olema kokku pandud ja mida peab sisaldama binaarfaili pilt. Kuid konteiner ei ole lihtsalt "must kast", millel on ainult ĂŒks omadus – faili suurus. KĂ€itamise ajal omandab konteiner ka teisi mÔÔtmeid: kasutatava mĂ€lu maht, protsessori aeg ja muud sĂŒsteemiressursid.

5 otstarbekuse pÔhimÔtet cloud-native rakenduste loomiseks
Siin tuleb mĂ€ngu RCP pĂ”himĂ”te, mille kohaselt peab konteiner dekapeerima oma nĂ”udmised sĂŒsteemiressursside osas ja edastama need platvormile. Kui igal konteineril on ressursi profiil (kui palju tal on vaja CPU, mĂ€lu, vĂ”rgu ja salvestussĂŒsteemi ressursse), saab platvorm optimaalselt teostada haldamist ja automaatset skaleerimist, juhtida IT-jĂ”udlust ja toetada SLA tasemeid konteineritele.

Lisaks konteineri ressursinĂ”uete rahuldamisele on rakendusele oluline mitte ĂŒletada enda mÀÀratud piire. Vastasel juhul, kui ressursse on puudus, on platvormil suurem tĂ”enĂ€osus lisada see rakenduste nimekirja, mida tuleb katkestada vĂ”i migreerida.

RÀÀkides pilvenakkuslikust fookusest, mÔtleme me kÔigepealt töötamise viisi.
Ülalpool oleme töötanud vĂ€lja mitmeid ĂŒldpĂ”himĂ”tteid, mis mÀÀratlevad metodoloogilise aluse kvaliteetsete konteinerite rakenduste loomiseks pilvekeskkondades.

Mainime, et lisaks neile ĂŒldpĂ”himĂ”tetele on teil ka vaja tĂ€iendavaid arenenud meetodeid ja tehnikaid konteineritega töötamiseks. Samuti on meil mĂ”ned lĂŒhikesed soovitused, mis on spetsiifilisemat laadi ja mida tuleb rakendada (vĂ”i mitte rakendada) olukorrast sĂ”ltuvalt:

Veebinar OpenShift Container Platformi uue versiooni kohta – 4
11. juuni kell 11.00

Mida te Ôppida saate:

  • Immutable Red Hat Enterprise Linux CoreOS
  • OpenShift teenuse mesh
  • Operator raamistik
  • Knative raamistik

Allikas: habr.com

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster