āMÄkoÅa vietÄjÄsā vai vienkÄrÅ”i āmÄkonisā lietojumprogrammas ir Ä«paÅ”i izveidotas darbam mÄkoÅa infrastruktÅ«rÄs. Tie parasti tiek veidoti kÄ brÄ«vi saistÄ«tu mikropakalpojumu kopums, kas iesaiÅots konteineros, kurus savukÄrt pÄrvalda mÄkoÅa platforma. Å Ädas lietojumprogrammas pÄc noklusÄjuma ir sagatavotas kļūmÄm, kas nozÄ«mÄ, ka tÄs darbojas uzticami un mÄrogojas pat nopietnu infrastruktÅ«ras lÄ«meÅa traucÄjumu gadÄ«jumÄ. Otra medaļas puse ir ierobežojumu (lÄ«gumu) kopas, ko mÄkoÅa platforma uzliek konteineru lietojumprogrammÄm, lai tÄs varÄtu pÄrvaldÄ«t automÄtiski.
Lai gan daudzas organizÄcijas pilnÄ«bÄ apzinÄs nepiecieÅ”amÄ«bu un nozÄ«mi pÄriet uz mÄkoÅa lietojumprogrammÄm, daudzas organizÄcijas joprojÄm nezina, ar ko sÄkt. Å ajÄ ierakstÄ apskatÄ«sim vairÄkus principus, kas, ja tiek ievÄroti, izstrÄdÄjot konteinerizÄtÄs lietojumprogrammas, ļaus realizÄt mÄkoÅu platformu potenciÄlu un panÄkt droÅ”u aplikÄciju darbÄ«bu un mÄrogoÅ”anu pat nopietnu IT infrastruktÅ«ras kļūmju gadÄ«jumÄ. lÄ«menÄ«. Å eit izklÄstÄ«to principu galvenais mÄrÄ·is ir iemÄcÄ«ties izveidot lietojumprogrammas, kuras var automÄtiski pÄrvaldÄ«t mÄkoÅa platformas, piemÄram, Kubernetes.
ProgrammatÅ«ras projektÄÅ”anas principi
ProgrammÄÅ”anas pasaulÄ principi attiecas uz diezgan vispÄrÄ«giem noteikumiem, kas jÄievÄro, izstrÄdÄjot programmatÅ«ru. Tos var izmantot, strÄdÄjot ar jebkuru programmÄÅ”anas valodu. Katram principam ir savi mÄrÄ·i, kuru sasniegÅ”anas instrumenti parasti ir veidnes un prakse. Ir arÄ« vairÄki pamatprincipi augstas kvalitÄtes programmatÅ«ras izveidei, no kuriem izriet visas pÄrÄjÄs. Å eit ir daži pamatprincipu piemÄri:
KÄ redzat, Å”ie principi nenosaka nekÄdus Ä«paÅ”us noteikumus, bet pieder pie tÄ saukto veselÄ saprÄta apsvÄrumu kategorijas, kas balstÄ«tas uz praktisko pieredzi, ar kurÄm dalÄs daudzi izstrÄdÄtÄji un uz ko viÅi regulÄri atsaucas.
TurklÄt ir SOLID ā Pirmo piecu objektu orientÄtÄs programmÄÅ”anas un dizaina principu kopums, ko formulÄjis Roberts MÄrtins. SOLID ietver plaÅ”us, beztermiÅa, papildinoÅ”us principus, kas, ja tos piemÄro kopÄ, palÄ«dz izveidot labÄkas programmatÅ«ras sistÄmas un labÄk uzturÄt tÄs ilgtermiÅÄ.
SOLID principi pieder pie OOP jomas un ir formulÄti tÄdu jÄdzienu un jÄdzienu valodÄ kÄ klases, saskarnes un mantojums. PÄc analoÄ£ijas izstrÄdes principus var formulÄt arÄ« mÄkoÅa lietojumprogrammÄm, tikai pamatelements Å”eit nebÅ«s klase, bet konteiners. IevÄrojot Å”os principus, varat izveidot konteinerizÄtas lietojumprogrammas, kas labÄk atbilst mÄkoÅa platformu, piemÄram, Kubernetes, mÄrÄ·iem un uzdevumiem.
MÄkoÅvietÄ«gie konteineri: Red Hat pieeja
MÅ«sdienÄs gandrÄ«z jebkuru lietojumprogrammu var salÄ«dzinoÅ”i viegli iesaiÅot konteineros. TaÄu, lai lietojumprogrammas tiktu efektÄ«vi automatizÄtas un organizÄtas mÄkoÅa platformÄ, piemÄram, Kubernetes, ir jÄpieliek papildu pÅ«les.
TÄlÄk izklÄstÄ«to ideju pamatÄ bija metodoloÄ£ija Divpadsmit faktoru lietotne un daudzi citi darbi par dažÄdiem tÄ«mekļa lietojumprogrammu veidoÅ”anas aspektiem, sÄkot no pirmkoda pÄrvaldÄ«bas lÄ«dz mÄrogoÅ”anas modeļiem. AprakstÄ«tie principi attiecas tikai uz konteinerizÄtu lietojumprogrammu izstrÄdi, kas ir veidotas uz mikropakalpojumiem un ir paredzÄtas mÄkoÅa platformÄm, piemÄram, Kubernetes. MÅ«su diskusijas pamatelements ir konteinera attÄls, un mÄrÄ·a konteinera izpildlaiks ir konteinera orÄ·estrÄÅ”anas platforma. PiedÄvÄto principu mÄrÄ·is ir izveidot konteinerus, kuru plÄnoÅ”anas, mÄrogoÅ”anas un uzraudzÄ«bas uzdevumus var automatizÄt lielÄkajÄ daÄ¼Ä orÄ·estrÄÅ”anas platformu. Principi nav izklÄstÄ«ti noteiktÄ secÄ«bÄ.
VienotÄs bažas princips (SCP)
Å is princips daudzÄjÄdÄ ziÅÄ ir lÄ«dzÄ«gs vienotas atbildÄ«bas principam. SRP), kas ir daļa no SOLID kopas un nosaka, ka katram objektam ir jÄbÅ«t vienai atbildÄ«bai, un Å”ai atbildÄ«bai ir jÄbÅ«t pilnÄ«bÄ ietvertai klasÄ. SRP bÅ«tÄ«ba ir tÄda, ka katra atbildÄ«ba ir iemesls pÄrmaiÅÄm, un klasei ir jÄbÅ«t vienam un tikai vienam iemeslu pÄrmaiÅÄm.
SCP mÄs izmantojam vÄrdu ābažasā, nevis vÄrda āatbildÄ«baā, lai norÄdÄ«tu uz konteinera augstÄku abstrakcijas lÄ«meni un plaÅ”Äku mÄrÄ·i salÄ«dzinÄjumÄ ar OOP klasi. Un, ja SRP mÄrÄ·is ir tikai viens iemesls izmaiÅÄm, tad aiz SCP ir vÄlme paplaÅ”inÄt konteineru atkÄrtotas izmantoÅ”anas un nomaiÅas iespÄjas. IevÄrojot SRP un izveidojot konteineru, kas atrisina vienu problÄmu un dara to funkcionÄli pilnÄ«gÄ veidÄ, jÅ«s palielinÄsit iespÄju atkÄrtoti izmantot Å”o konteinera attÄlu dažÄdos lietojumprogrammu kontekstos.
SCP princips nosaka, ka katram konteineram ir jÄatrisina viena problÄma un tas jÄdara labi. TurklÄt SCP konteineru pasaulÄ ir vieglÄk sasniegt nekÄ SRP OOP pasaulÄ, jo konteineri parasti veic vienu procesu, un lielÄko daļu laika Å”is process atrisina vienu uzdevumu.
Ja kÄdam konteinera mikropakalpojumam ir jÄatrisina vairÄkas problÄmas vienlaikus, tad to var sadalÄ«t viena uzdevuma konteineros un apvienot vienÄ podÄ (konteinera platformas izvietoÅ”anas vienÄ«bÄ), izmantojot blakusvÄÄ£a un sÄkuma konteinera veidnes. TurklÄt SCP ļauj viegli nomainÄ«t veco konteineru (piemÄram, tÄ«mekļa serveri vai ziÅojumu brokeri) ar jaunu, kas atrisina to paÅ”u problÄmu, bet kuram ir paplaÅ”inÄta funkcionalitÄte vai labÄka mÄrogoÅ”ana.
Augstas novÄrojamÄ«bas princips (HOP)
Ja konteineri tiek izmantoti kÄ vienots lietojumprogrammu pakotnes un palaiÅ”anas veids, paÅ”as lietojumprogrammas tiek uzskatÄ«tas par melno kasti. TomÄr, ja tie ir mÄkoÅa konteineri, tiem ir jÄnodroÅ”ina Ä«paÅ”as API izpildlaikam, lai uzraudzÄ«tu konteineru stÄvokli un, ja nepiecieÅ”ams, veiktu attiecÄ«gas darbÄ«bas. Bez tÄ nebÅ«s iespÄjams unificÄt konteineru atjauninÄÅ”anas un to dzÄ«ves cikla pÄrvaldÄ«Å”anas automatizÄciju, kas savukÄrt pasliktinÄs programmatÅ«ras sistÄmas stabilitÄti un lietojamÄ«bu.
PraksÄ konteinerizÄtai lietojumprogrammai ir jÄbÅ«t vismaz API dažÄda veida veselÄ«bas pÄrbaudÄm: dzÄ«vÄ«guma pÄrbaudÄm un gatavÄ«bas pÄrbaudÄm. Ja lietojumprogramma apgalvo, ka dara vairÄk, tai ir jÄnodroÅ”ina citi lÄ«dzekļi tÄs stÄvokļa pÄrraudzÄ«bai. PiemÄram, svarÄ«gu notikumu reÄ£istrÄÅ”ana, izmantojot STDERR un STDOUT, žurnÄlu apkopoÅ”anai, izmantojot Fluentd, Logstash un citus lÄ«dzÄ«gus rÄ«kus. KÄ arÄ« integrÄcija ar izsekoÅ”anas un metrikas kolekcijas bibliotÄkÄm, piemÄram, OpenTracing, Prometheus utt.
KopumÄ lietojumprogrammu joprojÄm var uzskatÄ«t par melno kasti, taÄu tai ir jÄbÅ«t nodroÅ”inÄtai ar visiem platformai nepiecieÅ”amajiem API, lai to vislabÄk uzraudzÄ«tu un pÄrvaldÄ«tu.
Dzīves cikla atbilstības princips (LCP)
LCP ir HOP antitÄze. KamÄr HOP norÄda, ka konteineram platformai ir jÄpakļauj lasÄ«Å”anas API, LCP pieprasa, lai lietojumprogramma varÄtu pieÅemt informÄciju no platformas. TurklÄt konteineram ir ne tikai jÄsaÅem notikumi, bet arÄ« jÄpielÄgojas, citiem vÄrdiem sakot, jÄreaÄ£Ä uz tiem. LÄ«dz ar to principa nosaukums, ko var uzskatÄ«t par prasÄ«bu nodroÅ”inÄt platformu ar rakstÄ«Å”anas API.
PlatformÄs ir dažÄda veida notikumi, kas palÄ«dz pÄrvaldÄ«t konteinera dzÄ«ves ciklu. TaÄu paÅ”as aplikÄcijas ziÅÄ ir izlemt, kuru no tiem uztvert un kÄ reaÄ£Ät.
Ir skaidrs, ka daži notikumi ir svarÄ«gÄki par citiem. PiemÄram, ja lietojumprogramma slikti panes avÄrijas, tai ir jÄpieÅem signÄls: terminate (SIGTERM) ziÅojumi un pÄc iespÄjas ÄtrÄk jÄuzsÄk pÄrtraukÅ”anas rutÄ«na, lai uztvertu signÄlu: kill (SIGKILL), kas nÄk pÄc SIGTERM.
TurklÄt tÄdi notikumi kÄ PostStart un PreStop var bÅ«t svarÄ«gi lietojumprogrammas dzÄ«ves ciklam. PiemÄram, pÄc lietojumprogrammas palaiÅ”anas tai var bÅ«t nepiecieÅ”ams zinÄms iesildÄ«Å”anÄs laiks, pirms tÄ var atbildÄt uz pieprasÄ«jumiem. Vai arÄ« lietojumprogrammai, izslÄdzot, ir jÄatbrÄ«vo resursi kÄdÄ Ä«paÅ”Ä veidÄ.
AttÄla nemainÄ«guma princips (IIP)
Ir vispÄratzÄ«ts, ka konteinerizÄtajÄm lietojumprogrammÄm pÄc izveides ir jÄpaliek nemainÄ«gÄm, pat ja tÄs tiek darbinÄtas dažÄdÄs vidÄs. Tas rada nepiecieÅ”amÄ«bu izmantot datu glabÄÅ”anu izpildlaikÄ (citiem vÄrdiem sakot, Å”im nolÅ«kam izmantot ÄrÄjos rÄ«kus) un paļauties uz ÄrÄjÄm, izpildlaikam specifiskÄm konfigurÄcijÄm, nevis pÄrveidot vai izveidot unikÄlus konteinerus katrai videi. PÄc jebkÄdÄm izmaiÅÄm lietojumprogrammÄ konteinera attÄls ir jÄpÄrveido un jÄizvieto visÄs izmantotajÄs vidÄs. Starp citu, pÄrvaldot IT sistÄmas, tiek izmantots lÄ«dzÄ«gs princips, kas pazÄ«stams kÄ serveru un infrastruktÅ«ras nemainÄ«guma princips.
IIP mÄrÄ·is ir novÄrst atseviŔķu konteinera attÄlu izveidi dažÄdÄm izpildlaika vidÄm un izmantot vienu un to paÅ”u attÄlu visur kopÄ ar atbilstoÅ”u videi raksturÄ«gu konfigurÄciju. Å Ä« principa ievÄroÅ”ana ļauj Ä«stenot tÄdas no mÄkoÅsistÄmu automatizÄcijas viedokļa svarÄ«gas prakses kÄ lietojumprogrammu atjauninÄjumu atgrieÅ”ana un pÄrtÄ«Å”ana uz priekÅ”u.
Procesa vienreizÄjÄs lietoÅ”anas princips (PDP)
Viena no svarÄ«gÄkajÄm konteinera Ä«paŔībÄm ir tÄ Ä«slaicÄ«gums: konteinera instanci ir viegli izveidot un viegli iznÄ«cinÄt, tÄpÄc to jebkurÄ laikÄ var viegli aizstÄt ar citu. Å Ädai nomaiÅai var bÅ«t daudz iemeslu: darbspÄjas pÄrbaudes kļūme, lietojumprogrammas mÄrogoÅ”ana, pÄrsÅ«tÄ«Å”ana uz citu resursdatoru, platformas resursu izsmelÅ”ana vai citas situÄcijas.
TÄ rezultÄtÄ konteinerizÄtajÄm lietojumprogrammÄm ir jÄuztur savs stÄvoklis, izmantojot kÄdus ÄrÄjus lÄ«dzekļus, vai Å”im nolÅ«kam jÄizmanto iekÅ”Äjas sadalÄ«tas shÄmas ar dublÄÅ”anos. TurklÄt lietojumprogrammai ir Ätri jÄstartÄ un Ätri jÄizslÄdzas, kÄ arÄ« jÄbÅ«t gatavai pÄkÅ”Åai fatÄlai aparatÅ«ras kļūmei.
Viena prakse, kas palÄ«dz Ä«stenot Å”o principu, ir saglabÄt konteinerus mazos. MÄkoÅvides var automÄtiski atlasÄ«t resursdatoru, kurÄ palaist konteinera instanci, tÄpÄc, jo mazÄks konteiners, jo ÄtrÄk tas tiks palaists ā tas vienkÄrÅ”i ÄtrÄk tiks kopÄts uz mÄrÄ·a resursdatoru tÄ«klÄ.
PaÅ”norobežoÅ”anÄs princips (S-CP)
SaskaÅÄ ar Å”o principu montÄžas stadijÄ konteinerÄ ir iekļautas visas nepiecieÅ”amÄs sastÄvdaļas. Konteiners ir jÄveido, pieÅemot, ka sistÄmai ir tikai tÄ«rs Linux kodols, tÄpÄc visas nepiecieÅ”amÄs papildu bibliotÄkas ir jÄievieto paÅ”Ä konteinerÄ. TajÄ jÄietver arÄ« tÄdas lietas kÄ atbilstoÅ”Äs programmÄÅ”anas valodas izpildlaiks, lietojumprogrammas platforma (ja nepiecieÅ”ams) un citas atkarÄ«bas, kas bÅ«s nepiecieÅ”amas, kamÄr darbojas konteinera lietojumprogramma.
IzÅÄmumi ir paredzÄti konfigurÄcijÄm, kas dažÄdÄs vidÄs atŔķiras un ir jÄnodroÅ”ina izpildlaikÄ, piemÄram, izmantojot Kubernetes ConfigMap.
Lietojumprogramma var ietvert vairÄkus konteinerizÄtus komponentus, piemÄram, atseviŔķu DBMS konteineru konteinerizÄtÄ tÄ«mekļa lietojumprogrammÄ. PÄc S-CP principa Å”os konteinerus nevajadzÄtu apvienot vienÄ, bet gan veidot tÄ, lai DBMS konteinerÄ bÅ«tu viss nepiecieÅ”amais datu bÄzes darbÄ«bai, bet tÄ«mekļa aplikÄciju konteinerÄ bÅ«tu viss nepiecieÅ”amais tÄ«mekļa darbÄ«bai. lietojumprogramma, tas pats tÄ«mekļa serveris . TÄ rezultÄtÄ izpildes laikÄ tÄ«mekļa lietojumprogrammas konteiners bÅ«s atkarÄ«gs no DBVS konteinera un tam piekļūst pÄc vajadzÄ«bas.
Izpildlaika ierobežojuma princips (RCP)
S-CP princips nosaka, kÄ konteiners ir jÄveido un kam jÄbÅ«t attÄla binÄrajam failam. Bet konteiners nav tikai āmelnÄ kasteā, kurai ir tikai viena Ä«paŔība - faila lielums. Izpildes laikÄ konteiners iegÅ«st citus izmÄrus: izmantotÄs atmiÅas apjomu, CPU laiku un citus sistÄmas resursus.
Un Å”eit noder RCP princips, saskaÅÄ ar kuru konteineram ir jÄatdala savas prasÄ«bas sistÄmas resursiem un jÄpÄrnes uz platformu. Izmantojot katra konteinera resursu profilus (cik daudz CPU, atmiÅas, tÄ«kla un diska resursu tai ir nepiecieÅ”ams), platforma var optimÄli veikt plÄnoÅ”anu un automÄtisko mÄrogoÅ”anu, pÄrvaldÄ«t IT jaudu un uzturÄt SLA lÄ«meÅus konteineriem.
Papildus konteinera resursu prasÄ«bÄm ir svarÄ«gi, lai lietojumprogramma nepÄrsniegtu savas robežas. PretÄjÄ gadÄ«jumÄ, kad rodas resursu trÅ«kums, platforma, visticamÄk, to iekļaus to lietojumprogrammu sarakstÄ, kuras ir jÄpÄrtrauc vai jÄmigrÄ.
Kad mÄs runÄjam par to, ka mÄkonis ir pirmais, mÄs runÄjam par veidu, kÄ mÄs strÄdÄjam.
IepriekÅ” mÄs formulÄjÄm vairÄkus vispÄrÄ«gus principus, kas nosaka metodisko pamatu augstas kvalitÄtes konteineru lietojumprogrammu izveidei mÄkoÅa vidÄm.
Å emiet vÄrÄ, ka papildus Å”iem vispÄrÄ«gajiem principiem jums bÅ«s nepiecieÅ”amas arÄ« papildu uzlabotas metodes un paÅÄmieni darbam ar konteineriem. TurklÄt mums ir daži Ä«si ieteikumi, kas ir konkrÄtÄki un bÅ«tu jÄpiemÄro (vai nepiemÄro) atkarÄ«bÄ no situÄcijas:
MÄÄ£iniet samazinÄt attÄlu lielumu: izdzÄsiet pagaidu failus un neinstalÄjiet nevajadzÄ«gas pakotnes - jo mazÄks ir konteinera izmÄrs, jo ÄtrÄk tas tiek samontÄts un pÄrkopÄts uz mÄrÄ·a resursdatoru tÄ«klÄ.
KoncentrÄjieties uz patvaļīgiem lietotÄju ID: konteineru palaiÅ”anai neizmantojiet komandu sudo vai kÄdu Ä«paÅ”u lietotÄja ID.
AtzÄ«mÄjiet svarÄ«gos portus: portu numurus varat iestatÄ«t izpildes laikÄ, taÄu labÄk tos norÄdÄ«t, izmantojot komandu EXPOSE ā tas atvieglos jÅ«su attÄlu izmantoÅ”anu citiem cilvÄkiem un programmÄm.
SaglabÄjiet pastÄvÄ«gus datus par sÄjumiem: dati, kuriem vajadzÄtu palikt pÄc konteinera iznÄ«cinÄÅ”anas, jÄieraksta sÄjumos.
Rakstiet attÄla metadatus: tagi, etiÄ·etes un anotÄcijas atvieglo attÄlu lietoÅ”anu ā citi izstrÄdÄtÄji jums pateiks paldies.
SinhronizÄt saimniekdatoru un attÄlus: dažÄm konteinerizÄtajÄm lietojumprogrammÄm konteineram ir jÄsinhronizÄjas ar resursdatoru, izmantojot noteiktus atribÅ«tus, piemÄram, laiku vai maŔīnas ID.