
Pasaule nestÄv uz vietas. Progress rada jaunus tehnoloÄ£iskus izaicinÄjumus. InformÄcijas sistÄmu arhitektÅ«rai ir jÄattÄ«stÄs atbilstoÅ”i mainÄ«gajÄm prasÄ«bÄm. Å odien mÄs runÄsim par notikumu virzÄ«tu arhitektÅ«ru, vienlaicÄ«bu, vienlaicÄ«bu, asinhroniju un to, kÄ jÅ«s varat mierÄ«gi dzÄ«vot ar visu to ErlangÄ.
Ievads
AtkarÄ«bÄ no projektÄtÄs sistÄmas izmÄra un tai izvirzÄ«tajÄm prasÄ«bÄm mÄs, izstrÄdÄtÄji, izvÄlamies informÄcijas apmaiÅas metodi sistÄmÄ. VairumÄ gadÄ«jumu, lai organizÄtu pakalpojumu mijiedarbÄ«bu, darba iespÄja var bÅ«t shÄma ar brokeri, piemÄram, pamatojoties uz RabbitMQ vai kafka. Bet dažreiz notikumu plÅ«sma, SLA un kontroles lÄ«menis pÄr sistÄmu ir tÄds, ka gatava ziÅojumapmaiÅa mums nav piemÄrota. Protams, jÅ«s varat nedaudz sarežģīt sistÄmu, uzÅemoties atbildÄ«bu par transporta slÄni un klasteru veidoÅ”anos, piemÄram, izmantojot ZeroMQ vai nanomsg. Bet, ja sistÄmai ir pietiekama standarta Erlang klastera caurlaidspÄja un iespÄjas, tad jautÄjums par papildu entÄ«tiju ievieÅ”anu prasa detalizÄtu izpÄti un ekonomisko pamatojumu.
ReaktÄ«vo izplatÄ«to lietojumprogrammu tÄma ir diezgan plaÅ”a. Lai ievÄrotu raksta formÄtu, Å”odienas diskusijas tÄma bÅ«s tikai viendabÄ«ga vide, kas balstÄ«ta uz Erlang/Elixir. Erlang/OTP ekosistÄma ļauj ieviest reaktÄ«vu arhitektÅ«ru ar vismazÄko piepÅ«li. Bet jebkurÄ gadÄ«jumÄ mums bÅ«s nepiecieÅ”ams ziÅojumapmaiÅas slÄnis.
TeorÄtiskÄ bÄze
Dizains sÄkas ar mÄrÄ·u un ierobežojumu noteikÅ”anu. Galvenais mÄrÄ·is nav attÄ«stÄ«bas jomÄ attÄ«stÄ«bas labad. JÄiegÅ«st droÅ”s un mÄrogojams rÄ«ks, uz kura pamata varam izveidot un, galvenais, attÄ«stÄ«t dažÄda lÄ«meÅa modernas aplikÄcijas: sÄkot no viena servera aplikÄcijÄm, kas apkalpo nelielu auditoriju, kas vÄlÄk var izvÄrsties klasteros lÄ«dz pat 50. -60 mezgli, kas beidzas ar klasteru federÄcijÄm. TÄdÄjÄdi galvenais mÄrÄ·is ir palielinÄt peļÅu, samazinot galÄ«gÄs sistÄmas izstrÄdes un Ä«paÅ”umtiesÄ«bu izmaksas.
Izcelsim 4 galvenÄs prasÄ«bas gala sistÄmai:
- Š”uz pasÄkumiem orientÄts.
SistÄma vienmÄr ir gatava iziet cauri notikumu plÅ«smai un veikt nepiecieÅ”amÄs darbÄ«bas; - ŠmÄrogojamÄ«ba.
AtseviŔķus blokus var mÄrogot gan vertikÄli, gan horizontÄli. Visai sistÄmai jÄspÄj bezgalÄ«gi attÄ«stÄ«ties horizontÄli; - Škļūdu tolerance.
Visiem lÄ«meÅiem un visiem pakalpojumiem jÄspÄj automÄtiski atgÅ«ties no kļūmÄm; - ŠgarantÄts reakcijas laiks.
Laiks ir vÄrtÄ«gs, un lietotÄjiem nevajadzÄtu pÄrÄk ilgi gaidÄ«t.
Vai atceries veco pasaku par āMazo dzinÄju, kas varÄtuā? Lai projektÄtÄ sistÄma veiksmÄ«gi izietu no prototipa stadijas un bÅ«tu progresÄ«va, tÄs pamatam jÄatbilst minimÄlajÄm prasÄ«bÄm SMOG.
ZiÅojumapmaiÅai kÄ infrastruktÅ«ras rÄ«kam un visu pakalpojumu pamatam ir pievienots vÄl viens punkts: programmÄtÄju lietoÅ”anas vienkÄrŔība.
OrientÄts uz pasÄkumiem
Lai lietojumprogramma varÄtu augt no vienas serveris Pirms klastera izveides tÄ arhitektÅ«rai ir jÄnodroÅ”ina brÄ«va sasaiste. Asinhronais modelis atbilst Å”ai prasÄ«bai. Å ajÄ modelÄ« sÅ«tÄ«tÄjs un saÅÄmÄjs rÅ«pÄjas par ziÅojuma lietderÄ«go slodzi un neuztraucas par pÄrraidi un marÅ”rutÄÅ”anu sistÄmÄ.
MÄrogojamÄ«ba
MÄrogojamÄ«ba un sistÄmas efektivitÄte ir blakus viena otrai. Lietojumprogrammu komponentiem jÄspÄj izmantot visus pieejamos resursus. Jo efektÄ«vÄk mÄs varam izmantot jaudu un optimÄlÄkas mÅ«su apstrÄdes metodes, jo mazÄk naudas mÄs tÄrÄjam iekÄrtÄm.
VienÄ iekÄrtÄ Erlang rada ļoti konkurÄtspÄjÄ«gu vidi. LÄ«dzsvaru starp vienlaicÄ«bu un paralÄlismu var iestatÄ«t, izvÄloties Erlang VM pieejamo operÄtÄjsistÄmas pavedienu skaitu un plÄnotÄju skaitu, kas izmanto Å”os pavedienus.
Erlang procesi nedala stÄvokli un darbojas nebloÄ·ÄjoÅ”Ä režīmÄ. Tas nodroÅ”ina salÄ«dzinoÅ”i zemu latentumu un lielÄku caurlaidspÄju nekÄ tradicionÄlÄs lietojumprogrammas, kuru pamatÄ ir bloÄ·ÄÅ”ana. Erlang plÄnotÄjs nodroÅ”ina taisnÄ«gu CPU un IO sadali, un bloÄ·ÄÅ”anas neesamÄ«ba ļauj lietojumprogrammai reaÄ£Ät pat maksimÄlÄs slodzes vai kļūmju laikÄ.
Klasteru lÄ«menÄ« pastÄv arÄ« problÄma ar iznÄ«cinÄÅ”anu. Ir svarÄ«gi, lai visas maŔīnas klasterÄ« bÅ«tu vienmÄrÄ«gi noslogotas un tÄ«kls netiktu pÄrslogots. IedomÄsimies situÄciju: lietotÄju trafika nonÄk pie ienÄkoÅ”ajiem balansÄtÄjiem (haproxy, nginx utt.), tie sadala apstrÄdes pieprasÄ«jumus pÄc iespÄjas vienmÄrÄ«gÄk starp pieejamo aizmugursistÄmu kopu. Lietojumprogrammas infrastruktÅ«rÄ pakalpojums, kas ievieÅ” nepiecieÅ”amo saskarni, ir tikai pÄdÄjÄ jÅ«dze, un tam bÅ«s jÄpieprasa vairÄki citi pakalpojumi, lai atbildÄtu uz sÄkotnÄjo pieprasÄ«jumu. IekÅ”Äjiem pieprasÄ«jumiem ir nepiecieÅ”ama arÄ« marÅ”rutÄÅ”ana un lÄ«dzsvaroÅ”ana.
Lai efektÄ«vi pÄrvaldÄ«tu datu plÅ«smas, ziÅojumapmaiÅai ir jÄnodroÅ”ina izstrÄdÄtÄjiem saskarne marÅ”rutÄÅ”anas un slodzes lÄ«dzsvaroÅ”anas pÄrvaldÄ«bai. Pateicoties tam, izstrÄdÄtÄji, izmantojot mikropakalpojumu modeļus (agregatoru, starpniekserveri, Ä·Ädi, filiÄli utt.), varÄs atrisinÄt gan standarta problÄmas, gan tÄs, kas rodas reti.
No biznesa viedokļa mÄrogojamÄ«ba ir viens no riska pÄrvaldÄ«bas instrumentiem. Galvenais ir apmierinÄt klientu vÄlmes, optimÄli izmantojot aprÄ«kojumu:
- Kad progresa rezultÄtÄ palielinÄs aprÄ«kojuma jauda. NepilnÄ«gas programmatÅ«ras dÄļ tas nedarbosies dÄ«kstÄvÄ. Erlang labi mÄrogojas vertikÄli un vienmÄr varÄs izmantot visus CPU kodolus un pieejamo atmiÅu;
- MÄkoÅvidÄs varam pÄrvaldÄ«t aprÄ«kojuma daudzumu atkarÄ«bÄ no paÅ”reizÄjÄs vai prognozÄtÄs slodzes un garantÄt SLA.
kļūdu tolerance
ApskatÄ«sim divas aksiomas: āNeveiksmes ir nepieÅemamasā un āNeveiksmes vienmÄr bÅ«sā. UzÅÄmumam programmatÅ«ras kļūme nozÄ«mÄ naudas zaudÄÅ”anu un, kas ir vÄl ļaunÄk, reputÄcijas zaudÄÅ”anu. LÄ«dzsvarojot starp iespÄjamiem zaudÄjumiem un defektu izturÄ«gas programmatÅ«ras izstrÄdes izmaksÄm, bieži var atrast kompromisu.
ÄŖstermiÅÄ arhitektÅ«ra, kas ietver kļūdu toleranci, ietaupa naudu, iegÄdÄjoties gatavus klasterizÄcijas risinÄjumus. Tie ir dÄrgi, un tiem ir arÄ« kļūdas.
IlgtermiÅÄ defektu izturÄ«ga arhitektÅ«ra atmaksÄjas daudzkÄrt visos attÄ«stÄ«bas posmos.
ZiÅojumapmaiÅa koda bÄzes ietvaros ļauj detalizÄti izstrÄdÄt komponentu mijiedarbÄ«bu sistÄmÄ izstrÄdes stadijÄ. Tas vienkÄrÅ”o reaÄ£ÄÅ”anas un kļūmju pÄrvaldÄ«bas uzdevumu, jo visi kritiskie komponenti apstrÄdÄ kļūmes, un iegÅ«tÄ sistÄma zina, kÄ automÄtiski atgriezties normÄlÄ režīmÄ pÄc izstrÄdÄtas kļūmes.
Atsaucība
NeatkarÄ«gi no kļūmÄm lietojumprogrammai ir jÄatbild uz pieprasÄ«jumiem un jÄatbilst SLA. RealitÄte ir tÄda, ka cilvÄki nevÄlas gaidÄ«t, tÄpÄc uzÅÄmumiem ir attiecÄ«gi jÄpielÄgojas. Paredzams, ka arvien vairÄk lietojumprogrammu bÅ«s ļoti atsaucÄ«gas.
AtsaucÄ«gas lietojumprogrammas darbojas gandrÄ«z reÄllaikÄ. Erlang VM darbojas mÄ«kstÄ reÄllaika režīmÄ. DažÄs jomÄs, piemÄram, akciju tirdzniecÄ«bai, medicÄ«nai un rÅ«pniecisko iekÄrtu kontrolei, cietais reÄllaika režīms ir svarÄ«gs.
AdaptÄ«vÄs sistÄmas uzlabo lietotÄja pieredzi un sniedz labumu uzÅÄmumam.
IepriekÅ”Äjs kopsavilkums
PlÄnojot Å”o rakstu, vÄlÄjos dalÄ«ties pieredzÄ par ziÅojumapmaiÅas brokera izveidi un uz tÄ bÄzes veidotu sarežģītas sistÄmas. Bet teorÄtiskÄ un motivÄjoÅ”Ä daļa izrÄdÄ«jÄs diezgan apjomÄ«ga.
Raksta otrajÄ daÄ¼Ä es runÄÅ”u par apmaiÅas punktu ievieÅ”anas niansÄm, ziÅojumapmaiÅas modeļiem un to pielietojumu.
TreÅ”ajÄ daÄ¼Ä apskatÄ«sim vispÄrÄ«gus pakalpojumu organizÄÅ”anas, marÅ”rutÄÅ”anas un balansÄÅ”anas jautÄjumus. ParunÄsim par sistÄmu mÄrogojamÄ«bas un kļūdu tolerances praktisko pusi.
PirmÄs daļas beigas.
foto .
Avots: www.habr.com
