ProHoster > Blogs > AdministrÄcija > ProgrammatÅ«ras arhitektÅ«ra un sistÄmu dizains: lielais attÄls un resursu ceļvedis
ProgrammatÅ«ras arhitektÅ«ra un sistÄmu dizains: lielais attÄls un resursu ceļvedis
Sveiki kolÄÄ£i.
Å odien piedÄvÄjam jÅ«su apskatei Tugberka Ugurlu raksta tulkojumu, kurÅ” apÅÄmÄs salÄ«dzinoÅ”i nelielÄ apjomÄ ieskicÄt mÅ«sdienu programmatÅ«ras sistÄmu projektÄÅ”anas principus. LÅ«k, ko autors kopsavilkumÄ saka par sevi:
TÄ kÄ no 2019. gada habro rakstÄ ir absolÅ«ti neiespÄjami aptvert tik kolosÄlu tÄmu kÄ arhitektÅ«ras raksti + dizaina raksti, mÄs iesakÄm ne tikai paÅ”u Uruglu kunga tekstu, bet arÄ« daudzÄs saites, kuras viÅÅ” laipni iekļÄvis tajÄ. Ja jums patiks, mÄs publicÄsim specializÄtÄku tekstu par izplatÄ«to sistÄmu dizainu.
Ja jums nekad nav nÄcies saskarties ar tÄdiem izaicinÄjumiem kÄ programmatÅ«ras sistÄmas projektÄÅ”ana no nulles, tad, uzsÄkot Å”Ädu darbu, dažreiz pat nav skaidrs, ar ko sÄkt. Es uzskatu, ka vispirms ir jÄnozÄ«mÄ robežas, lai jums bÅ«tu vairÄk vai mazÄk pÄrliecinÄts priekÅ”stats par to, ko tieÅ”i jÅ«s plÄnojat izstrÄdÄt, un pÄc tam atrotiet piedurknes un strÄdÄjiet Å”ajÄs robežÄs. KÄ sÄkuma punktu varat Åemt produktu vai pakalpojumu (ideÄlÄ gadÄ«jumÄ tÄdu, kas jums patieÅ”Äm patÄ«k) un izdomÄt, kÄ to ieviest. JÅ«s varÄtu bÅ«t pÄrsteigts, cik vienkÄrÅ”s Å”is produkts izskatÄs un cik sarežģīts tas patiesÄ«bÄ ir. Neaizmirsti: vienkÄrÅ”s - parasti sarežģīts, un tas ir labi.
Es domÄju, ka labÄkais padoms, ko varu sniegt ikvienam, kurÅ” sÄk izstrÄdÄt sistÄmu, ir Å”Äds: neizdariet nekÄdus pieÅÄmumus! No paÅ”a sÄkuma jums ir jÄprecizÄ fakti, kas ir zinÄmi par Å”o sistÄmu un ar to saistÄ«tÄs cerÄ«bas. Å eit ir daži labi jautÄjumi, ko uzdot, lai palÄ«dzÄtu jums sÄkt darbu ar dizainu.
KÄda ir problÄma, kuru mÄs cenÅ”amies atrisinÄt?
KÄds ir maksimÄlais lietotÄju skaits, kas mijiedarbosies ar mÅ«su sistÄmu?
KÄdus datu rakstÄ«Å”anas un lasÄ«Å”anas modeļus izmantosim?
KÄdi ir sagaidÄmie neveiksmju gadÄ«jumi, kÄ mÄs tos risinÄsim?
KÄdas ir cerÄ«bas attiecÄ«bÄ uz sistÄmas konsekvenci un pieejamÄ«bu?
Vai strÄdÄjot ir jÄÅem vÄrÄ kÄdas prasÄ«bas saistÄ«bÄ ar ÄrÄjo pÄrbaudi un regulÄÅ”anu?
KÄda veida sensitÄ«vus datus mÄs glabÄsim?
Å ie ir tikai daži jautÄjumi, kas noderÄjuÅ”i gan man, gan kolektÄ«viem, kuros esmu piedalÄ«jies profesionÄlÄs darbÄ«bas gados. Ja jÅ«s zinÄt atbildes uz Å”iem jautÄjumiem (un uz visiem citiem, kas attiecas uz kontekstu, kurÄ jums jÄstrÄdÄ), varat pakÄpeniski iedziļinÄties problÄmas tehniskajÄs detaļÄs.
Iestatiet sÄkotnÄjo lÄ«meni
Ko es Å”eit domÄju ar ābÄzes lÄ«meniā? PatiesÄ«bÄ mÅ«sdienÄs lielÄko daļu problÄmu programmatÅ«ras nozarÄ āvarā atrisinÄt, izmantojot esoÅ”Äs metodes un tehnoloÄ£ijas. AttiecÄ«gi, pÄrvietojoties pa Å”o ainavu, jÅ«s iegÅ«stat zinÄmu priekÅ”rocÄ«bu, saskaroties ar problÄmÄm, kuras kÄdam citam bija jÄatrisina pirms jums. Neaizmirstiet, ka programmas ir rakstÄ«tas, lai atrisinÄtu biznesa un lietotÄju problÄmas, tÄpÄc mÄs cenÅ”amies atrisinÄt problÄmu pÄc iespÄjas vienkÄrÅ”ÄkajÄ un vienkÄrÅ”ÄkajÄ (no lietotÄja viedokļa). KÄpÄc tas ir svarÄ«gi atcerÄties? VarbÅ«t jÅ«su koordinÄtu sistÄmÄ jums patÄ«k meklÄt unikÄlus risinÄjumus visÄm problÄmÄm, jo āājÅ«s domÄjat, "kas gan es par programmÄtÄju, ja es visur sekoju modeļiem"? PatiesÄ«bÄ, mÄksla Å”eit pieÅem lÄmumus par to, kur un ko darÄ«t. Protams, katram no mums ik pa laikam nÄkas saskarties ar unikÄlÄm problÄmÄm, no kurÄm katra ir Ä«sts izaicinÄjums. TaÄu, ja mÅ«su sÄkotnÄjais lÄ«menis ir skaidri definÄts, tad zinÄm, kam tÄrÄt savu enerÄ£iju: gatavu variantu meklÄÅ”anai izvirzÄ«tÄs problÄmas risinÄÅ”anai vai tÄs tÄlÄkai izpÄtei un dziļÄkai izpratnei.
DomÄju, ka varÄju jÅ«s pÄrliecinÄt, ka, ja speciÄlists pÄrliecinoÅ”i saprot, kas ir dažu brÄ«niŔķīgu programmatÅ«ras sistÄmu arhitektoniskÄ sastÄvdaļa, tad Ŕīs zinÄÅ”anas bÅ«s neaizstÄjamas, lai apgÅ«tu arhitekta mÄkslu un veidotu stabilu pamatu Å”ajÄ jomÄ.
Labi, kur sÄkt? U Donna Martina VietnÄ GitHub ir repozitorijs, ko sauc sistÄma-projektÄÅ”ana-grunts, no kuras var mÄcÄ«ties veidot liela mÄroga sistÄmas, kÄ arÄ« sagatavoties intervijÄm par Å”o tÄmu. RepozitorijÄ ir sadaļa ar piemÄriem Ä«stas arhitektÅ«ras, kur jo Ä«paÅ”i tiek apsvÄrts, kÄ viÅi tuvojas savu sistÄmu projektÄÅ”anai daži labi zinÄmi uzÅÄmumipiemÄram, Twitter, Uber utt.
TomÄr, pirms pÄriet pie Ŕī materiÄla, sÄ«kÄk aplÅ«kosim svarÄ«gÄkos arhitektÅ«ras izaicinÄjumus, ar kuriem saskaramies praksÄ. Tas ir svarÄ«gi, jo jums ir jÄprecizÄ DAUDZI spÄ«tÄ«gas un daudzŔķautÅainas problÄmas aspekti un pÄc tam jÄrisina noteiktÄ sistÄmÄ spÄkÄ esoÅ”o noteikumu ietvaros. Džeksons Gabards, bijuÅ”ais Facebook darbinieks, rakstÄ«ja 50 minÅ«Å”u video par sistÄmu dizaina intervijÄm, kur viÅÅ” dalÄ«jÄs savÄ pieredzÄ, pÄrbaudot simtiem pretendentu. Lai gan videoklipÄ liela uzmanÄ«ba tiek pievÄrsta lielu sistÄmu dizainam un veiksmes kritÄrijiem, kas ir svarÄ«gi, meklÄjot kandidÄtu Å”Ädam amatam, tas joprojÄm kalpos kÄ visaptveroÅ”s resurss par to, kuras lietas ir vissvarÄ«gÄkÄs, veidojot sistÄmas. Es arÄ« iesaku kopsavilkums Å”is video.
Veidojiet zinÄÅ”anas par datu uzglabÄÅ”anu un izgÅ«Å”anu
Parasti jÅ«su lÄmumam par to, kÄ uzglabÄt un izgÅ«t datus ilgtermiÅÄ, ir bÅ«tiska ietekme uz sistÄmas veiktspÄju. TÄpÄc vispirms ir jÄsaprot paredzamÄs sistÄmas rakstÄ«Å”anas un lasÄ«Å”anas Ä«paŔības. Tad jums ir jÄspÄj novÄrtÄt Å”os rÄdÄ«tÄjus un izdarÄ«t izvÄli, pamatojoties uz veiktajiem novÄrtÄjumiem. TomÄr jÅ«s varat efektÄ«vi tikt galÄ ar Å”o darbu tikai tad, ja saprotat esoÅ”os datu uzglabÄÅ”anas modeļus. PrincipÄ tas nozÄ«mÄ stabilas zinÄÅ”anas, kas saistÄ«tas ar datu bÄzes izvÄle.
Datu bÄzes var uzskatÄ«t par datu struktÅ«rÄm, kas ir ÄrkÄrtÄ«gi mÄrogojamas un izturÄ«gas. TÄpÄc, izvÄloties konkrÄtu datu bÄzi, zinÄÅ”anÄm par datu struktÅ«rÄm vajadzÄtu bÅ«t ļoti noderÄ«gÄm. PiemÄram, Redis ir datu struktÅ«ras serveris, kas atbalsta dažÄda veida vÄrtÄ«bas. Tas ļauj strÄdÄt ar datu struktÅ«rÄm, piemÄram, sarakstiem un kopÄm, un lasÄ«t datus, izmantojot labi zinÄmus algoritmus, piemÄram, LRU, organizÄjot Å”Ädu darbu izturÄ«gÄ un ļoti pieejamÄ stilÄ.
Kad esat pietiekami izpratis dažÄdus datu uzglabÄÅ”anas modeļus, pÄrejiet pie datu konsekvences un pieejamÄ«bas izpÄtes. PirmkÄrt, jums ir jÄsaprot CAP teorÄma vismaz vispÄrÄ«gi, un pÄc tam noslÄ«pÄt Ŕīs zinÄÅ”anas, rÅ«pÄ«gÄk aplÅ«kojot iedibinÄtos modeļus konsekvenci Šø pieejamÄ«ba. TÄdÄ veidÄ jÅ«s attÄ«stÄ«sit izpratni par Å”o jomu un sapratÄ«sit, ka datu lasÄ«Å”ana un rakstÄ«Å”ana patiesÄ«bÄ ir divas ļoti atŔķirÄ«gas problÄmas, un katrai no tÄm ir savi unikÄli izaicinÄjumi. Izmantojot dažus konsekvences un pieejamÄ«bas modeļus, varat ievÄrojami palielinÄt sistÄmas veiktspÄju, vienlaikus nodroÅ”inot vienmÄrÄ«gu datu plÅ«smu uz jÅ«su lietojumprogrammÄm.
Visbeidzot, noslÄdzot sarunu par datu uzglabÄÅ”anas jautÄjumiem, jÄpiemin arÄ« keÅ”atmiÅa. Vai tam vajadzÄtu darboties vienlaicÄ«gi gan klientÄ, gan serverÄ«? KÄdi dati bÅ«s jÅ«su keÅ”atmiÅÄ? Un kÄpÄc? KÄ jÅ«s organizÄjat keÅ”atmiÅas anulÄÅ”anu? Vai tas tiks darÄ«ts regulÄri, ar noteiktiem intervÄliem? Ja jÄ, cik bieži? Iesaku sÄkt pÄtÄ«t Ŕīs tÄmas ar nÄkamÄ sadaļa iepriekÅ”minÄtais sistÄmas dizaina gruntÄjums.
KomunikÄcijas modeļi
SistÄmas sastÄv no dažÄdÄm sastÄvdaļÄm; tie var bÅ«t dažÄdi procesi, kas darbojas vienÄ fiziskajÄ mezglÄ, vai dažÄdas maŔīnas, kas darbojas dažÄdÄs jÅ«su tÄ«kla daļÄs. Daži no Å”iem resursiem jÅ«su tÄ«klÄ var bÅ«t privÄti, bet citiem ir jÄbÅ«t publiskiem un pieejamiem patÄrÄtÄjiem, kas tiem piekļūst no Ärpuses.
NepiecieÅ”ams nodroÅ”inÄt Å”o resursu savstarpÄju saziÅu, kÄ arÄ« informÄcijas apmaiÅu starp visu sistÄmu un Ärpasauli. SistÄmu projektÄÅ”anas kontekstÄ mÄs atkal saskaramies ar virkni jaunu un unikÄlu izaicinÄjumu. ApskatÄ«sim, kÄ tie var bÅ«t noderÄ«gi asinhronÄs uzdevumu plÅ«smas, un ko pIr pieejami dažÄdi komunikÄcijas modeļi.
OrganizÄjot saziÅu ar Ärpasauli, tas vienmÄr ir ļoti svarÄ«gi droŔība, kuras nodroÅ”inÄÅ”ana arÄ« ir jÄuztver nopietni un aktÄ«vi jÄtiecas uz to.
Savienojuma sadale
Es neesmu pÄrliecinÄts, ka Ŕīs tÄmas ievietoÅ”ana atseviÅ”Ä·Ä sadaÄ¼Ä ikvienam ŔķitÄ«s pamatota. Neskatoties uz to, es Å”eit detalizÄti izklÄstÄ«Å”u Å”o jÄdzienu, un es uzskatu, ka Ŕīs sadaļas materiÄlu visprecÄ«zÄk raksturo termins "pieslÄguma sadale".
SistÄmas tiek veidotas, pareizi savienojot daudzas sastÄvdaļas, un to savstarpÄjÄ saziÅa bieži tiek organizÄta, pamatojoties uz izveidotiem protokoliem, piemÄram, TCP un UDP. TomÄr Å”ie protokoli kÄ tÄdi bieži vien ir nepietiekami, lai apmierinÄtu visas mÅ«sdienu sistÄmu vajadzÄ«bas, kuras bieži tiek darbinÄtas ar lielu slodzi un arÄ« ir ļoti atkarÄ«gas no lietotÄju vajadzÄ«bÄm. Bieži vien ir jÄatrod veidi, kÄ izplatÄ«t savienojumus, lai tiktu galÄ ar tik lielu sistÄmas slodzi.
Å is sadalÄ«jums ir balstÄ«ts uz labi zinÄmo domÄna vÄrdu sistÄma (DNS). Å Äda sistÄma ļauj veikt domÄna nosaukumu transformÄcijas, piemÄram, svÄrtÄs apaļÄs metodes un latentuma metodes, lai palÄ«dzÄtu sadalÄ«t slodzi.
Slodzes balansÄÅ”ana ir ļoti svarÄ«ga, un praktiski katra lielÄ interneta sistÄma, ar kuru mÄs Å”odien nodarbojamies, atrodas aiz viena vai vairÄkiem slodzes lÄ«dzsvarotÄjiem. Slodzes balansÄtÄji palÄ«dz izplatÄ«t klientu pieprasÄ«jumus vairÄkos pieejamos gadÄ«jumos. Slodzes balansÄtÄji ir gan aparatÅ«rÄ, gan programmatÅ«rÄ, tomÄr praksÄ biežÄk nÄkas saskarties ar programmatÅ«ras, piem. HAProxy Šø ELB. Reversie starpniekserveri konceptuÄli arÄ« ļoti lÄ«dzÄ«gi slodzes balansÄtÄjiem, lai gan ir diapazons starp pirmo un otro izteiktas atŔķirÄ«bas. Å Ä«s atŔķirÄ«bas ir jÄÅem vÄrÄ, izstrÄdÄjot sistÄmu, pamatojoties uz jÅ«su vajadzÄ«bÄm.
Jums vajadzÄtu zinÄt arÄ« par satura piegÄdes tÄ«kli (CDN). CDN ir globÄls izplatÄ«ts starpniekserveru tÄ«kls, kas piegÄdÄ informÄciju no mezgliem, kas Ä£eogrÄfiski atrodas tuvÄk konkrÄtam lietotÄjam. CDN ieteicams izmantot, ja strÄdÄjat ar statiskiem failiem, kas rakstÄ«ti JavaScript, CSS un HTML. TurklÄt mÄkoÅpakalpojumi, kas nodroÅ”ina satiksmes pÄrvaldÄ«tÄjus, mÅ«sdienÄs ir izplatÄ«ti, piemÄram, Azure Traffic Manager, nodroÅ”inot globÄlu izplatÄ«Å”anu un samazinÄtu latentumu, strÄdÄjot ar dinamisku saturu. TomÄr Å”Ädi pakalpojumi parasti ir noderÄ«gi gadÄ«jumos, kad jums ir jÄstrÄdÄ ar bezvalstnieku tÄ«mekļa pakalpojumiem.
ParunÄsim par biznesa loÄ£iku. Biznesa loÄ£ikas, uzdevumu plÅ«smu un komponentu strukturÄÅ”ana
TÄtad mums izdevÄs apspriest dažÄdus sistÄmas infrastruktÅ«ras aspektus. VisticamÄk, lietotÄjs pat nedomÄ par visiem Å”iem jÅ«su sistÄmas elementiem un, godÄ«gi sakot, par tiem nemaz nerÅ«p. LietotÄju interesÄ, kÄ ir mijiedarboties ar jÅ«su sistÄmu, ko ar to var panÄkt, kÄ arÄ«, kÄ sistÄma izpilda lietotÄja komandas, ko un kÄ tÄ dara ar lietotÄja datiem.
KÄ liecina Ŕī raksta nosaukums, es grasÄ«jos runÄt par programmatÅ«ras arhitektÅ«ru un sistÄmas dizainu. AttiecÄ«gi es neplÄnoju aptvert programmatÅ«ras dizaina modeļus, kas apraksta, kÄ tiek veidoti programmatÅ«ras komponenti. TomÄr, jo vairÄk es par to domÄju, jo vairÄk man Ŕķiet, ka robeža starp programmatÅ«ras dizaina modeļiem un arhitektÅ«ras modeļiem ir ļoti neskaidra, un abi jÄdzieni ir cieÅ”i saistÄ«ti. Å emsim, piemÄram pasÄkuma reÄ£istrÄcija (pasÄkumu iegÅ«Å”ana). TiklÄ«dz jÅ«s pieÅemsit Å”o arhitektÅ«ras modeli, tas ietekmÄs gandrÄ«z visus jÅ«su sistÄmas aspektus: datu ilgtermiÅa uzglabÄÅ”anu, jÅ«su sistÄmÄ pieÅemto konsekvences lÄ«meni, tajÄ esoÅ”o komponentu formu utt., utt. TÄpÄc es nolÄmu pieminÄt dažus arhitektÅ«ras modeļus, kas ir tieÅ”i saistÄ«ti ar biznesa loÄ£iku. Lai gan Å”im rakstam bÅ«s jÄaprobežojas ar vienkÄrÅ”u sarakstu, iesaku jÅ«s ar to iepazÄ«ties un padomÄt par idejÄm, kas saistÄ«tas ar Å”iem modeļiem. Å eit jÅ«s esat:
Ir ļoti maz ticams, ka jÅ«s nonÄksit projektÄ kÄ dalÄ«bnieks, kurÅ” ir pilnÄ«bÄ atbildÄ«gs par sistÄmas projektÄÅ”anas procesu. Gluži pretÄji, jums, visticamÄk, bÅ«s jÄsazinÄs ar kolÄÄ£iem, kas strÄdÄ gan jÅ«su uzdevumÄ, gan Ärpus tÄ. Å ajÄ gadÄ«jumÄ jums var bÅ«t nepiecieÅ”ams kopÄ ar kolÄÄ£iem izvÄrtÄt izvÄlÄtos tehnoloÄ£iju risinÄjumus, noteikt biznesa vajadzÄ«bas un saprast, kÄ vislabÄk paralÄli veikt uzdevumus.
Pirmais solis ir izveidot precÄ«zu un kopÄ«gu izpratni par to, kÄds ir uzÅÄmÄjdarbÄ«bas mÄrÄ·is, kuru mÄÄ£inÄt sasniegt, un ar kÄdÄm kustÄ«gajÄm daļÄm jums bÅ«s jÄtiek galÄ. Jo Ä«paÅ”i grupu modelÄÅ”anas metodes vÄtrainiem notikumiem (notikumu vÄtra) palÄ«dz ievÄrojami paÄtrinÄt Å”o procesu un palielinÄt jÅ«su izredzes gÅ«t panÄkumus. Å o darbu var veikt pirms vai pÄc izklÄsta pakalpojumu robežas, un pÄc tam padziļiniet to produkta nogatavinÄÅ”anas laikÄ. Pamatojoties uz konsekvences lÄ«meni, kas Å”eit tiks sasniegts, varat arÄ« formulÄt kopÄ«gu valodu ierobežotajam kontekstam, kurÄ strÄdÄjat. Ja jums ir jÄrunÄ par savas sistÄmas arhitektÅ«ru, tÄ var bÅ«t noderÄ«ga modelis C4, ierosinÄts Saimons Brauns, it Ä«paÅ”i, ja ir jÄsaprot, cik daudz jums bÅ«s jÄiedziļinÄs problÄmas detaļÄs, vizualizÄjot lietas, ar kurÄm vÄlaties sazinÄties.
IespÄjams, par Å”o tÄmu ir vÄl viena nobriedusi tehnoloÄ£ija, kas ir ne mazÄk noderÄ«ga kÄ domÄna vadÄ«ts dizains. TomÄr mÄs kaut kÄ atgriežamies pie priekÅ”meta jomas izpratnes, tÄtad zinÄÅ”anas un pieredze Å”ajÄ jomÄ Uz domÄnu orientÄts dizains vajadzÄtu bÅ«t jums noderÄ«gam.