Izplatīto lietojumprogrammu bloki. Nulles tuvinājums

Izplatīto lietojumprogrammu bloki. Nulles tuvinājums

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 @lucabravo.

Avots: www.habr.com

Iegādājieties uzticamu mitināŔanu vietnēm ar DDoS aizsardzÄ«bu, VPS VDS serveriem šŸ”„ Iegādājieties uzticamu tÄ«mekļa vietņu mitināŔanu ar DDoS aizsardzÄ«bu, VPS VDS serveriem | ProHoster