Blociau adeiladu o geisiadau a ddosbarthwyd. Brasamcan sero

Blociau adeiladu o geisiadau a ddosbarthwyd. Brasamcan sero

Nid yw'r byd yn sefyll yn ei unfan. Mae cynnydd yn creu heriau technolegol newydd. Yn unol â gofynion newidiol, rhaid i saernïaeth systemau gwybodaeth esblygu. Heddiw, byddwn yn siarad am bensaernïaeth sy'n cael ei gyrru gan ddigwyddiadau, concurrency, concurrency, asynchrony, a sut y gallwch chi fyw'n heddychlon gyda hyn i gyd yn Erlang.

Cyflwyniad

Yn dibynnu ar faint y system a gynlluniwyd a'r gofynion ar ei gyfer, rydym ni, y datblygwyr, yn dewis y dull o gyfnewid gwybodaeth yn y system. Yn y rhan fwyaf o achosion, er mwyn trefnu rhyngweithio gwasanaethau, gall opsiwn gweithio fod yn gynllun gyda brocer, er enghraifft, yn seiliedig ar RabbitMQ neu kafka. Ond weithiau mae llif digwyddiadau, CLG a lefel rheolaeth dros y system yn golygu nad yw negeseuon parod yn addas i ni. Wrth gwrs, gallwch chi gymhlethu'r system ychydig trwy gymryd cyfrifoldeb am yr haen gludo a ffurfio clwstwr, er enghraifft gan ddefnyddio ZeroMQ neu naromsg. Ond os oes gan y system ddigon o fewnbwn a galluoedd clwstwr Erlang safonol, yna mae'r mater o gyflwyno endid ychwanegol yn gofyn am astudiaeth fanwl a chyfiawnhad economaidd.

Mae pwnc cymwysiadau dosbarthedig adweithiol yn eithaf eang. Er mwyn cadw o fewn fformat yr erthygl, dim ond amgylcheddau homogenaidd wedi'u hadeiladu ar Erlang/Elixir fydd testun trafodaeth heddiw. Mae ecosystem Erlang/OTP yn caniatáu ichi weithredu pensaernïaeth adweithiol gyda'r ymdrech leiaf. Ond beth bynnag, bydd angen haen negeseuon arnom.

Sail ddamcaniaethol

Mae dylunio yn dechrau gyda diffinio nodau a chyfyngiadau. Nid yw'r prif nod yn y maes datblygu er mwyn datblygu. Mae angen i ni gael offeryn diogel y gellir ei raddio ar sail y gallwn greu ac, yn bwysicaf oll, datblygu cymwysiadau modern o wahanol lefelau: gan ddechrau o gymwysiadau un gweinydd sy'n gwasanaethu cynulleidfa fach, a all ddatblygu'n ddiweddarach yn glystyrau o hyd at 50. -60 nod, gan orffen gyda ffederasiynau clwstwr. Felly, y prif nod yw gwneud y mwyaf o elw trwy leihau cost datblygu a pherchnogaeth y system derfynol.

Gadewch inni dynnu sylw at 4 prif ofyniad ar gyfer y system derfynol:

  • Сsy'n canolbwyntio ar ddigwyddiadau.
    Mae'r system bob amser yn barod i basio trwy lif digwyddiadau a chyflawni'r camau angenrheidiol;
  • Мscalability.
    Gellir graddio blociau unigol yn fertigol ac yn llorweddol. Rhaid i'r system gyfan allu twf llorweddol anfeidrol;
  • Оgoddefgarwch fai.
    Dylai pob lefel a phob gwasanaeth allu adfer yn awtomatig o fethiannau;
  • Гamser ymateb gwarantedig.
    Mae amser yn werthfawr ac ni ddylai defnyddwyr aros yn rhy hir.

Cofiwch yr hen stori dylwyth teg am “The little engine that could”? Er mwyn i'r system a gynlluniwyd adael y cam prototeip yn llwyddiannus a bod yn flaengar, rhaid i'w sylfaen fodloni'r gofynion sylfaenol SMOG.

Mae un pwynt arall yn cael ei ychwanegu at negeseuon fel offeryn seilwaith a'r sail ar gyfer pob gwasanaeth: rhwyddineb defnydd ar gyfer rhaglenwyr.

Yn canolbwyntio ar ddigwyddiadau

Er mwyn i gais dyfu o weinydd unigol i glwstwr, rhaid i'w bensaernïaeth gefnogi cyplu rhydd. Mae'r model asyncronig yn bodloni'r gofyniad hwn. Ynddo, mae'r anfonwr a'r derbynnydd yn poeni am lwyth gwybodaeth y neges ac nid ydynt yn poeni am drosglwyddo a llwybro o fewn y system.

Scalability

Mae scalability ac effeithlonrwydd system wrth ymyl ei gilydd. Rhaid i gydrannau'r cais allu defnyddio'r holl adnoddau sydd ar gael. Po fwyaf effeithlon y gallwn ddefnyddio capasiti a pho fwyaf optimaidd yw ein dulliau prosesu, y lleiaf o arian y byddwn yn ei wario ar offer.

O fewn un peiriant, mae Erlang yn creu amgylchedd hynod gystadleuol. Gellir pennu'r cydbwysedd rhwng arian cyfred a chyfochredd trwy ddewis nifer yr edafedd system weithredu sydd ar gael i Erlang VM a nifer yr amserlenwyr sy'n defnyddio'r edafedd hyn.
Nid yw prosesau Erlang yn rhannu cyflwr ac yn gweithredu yn y modd di-flocio. Mae hyn yn darparu hwyrni cymharol isel a thrwybwn uwch na chymwysiadau traddodiadol sy'n seiliedig ar flocio. Mae amserlennydd Erlang yn sicrhau dyraniad teg o CPU ac IO, ac mae absenoldeb blocio yn caniatáu i'r cais ymateb hyd yn oed yn ystod llwythi neu fethiannau brig.

Ar lefel clwstwr, mae problem gwaredu hefyd yn bodoli. Mae'n bwysig bod yr holl beiriannau yn y clwstwr wedi'u llwytho'n gyfartal ac nad yw'r rhwydwaith yn cael ei orlwytho. Gadewch i ni ddychmygu sefyllfa: mae traffig defnyddwyr yn glanio ar falanswyr sy'n dod i mewn (haproxy, nginx, ac ati), maen nhw'n dosbarthu ceisiadau prosesu mor gyfartal â phosib rhwng y set o backends sydd ar gael. O fewn y seilwaith cymwysiadau, dim ond y filltir olaf yw'r gwasanaeth sy'n gweithredu'r rhyngwyneb gofynnol a bydd angen iddo ofyn am nifer o wasanaethau eraill i ymateb i'r cais cychwynnol. Mae angen llwybro a chydbwyso ceisiadau mewnol hefyd.
Er mwyn rheoli llif data yn effeithiol, rhaid i negeseuon roi rhyngwyneb i ddatblygwyr reoli llwybro a chydbwyso llwythi. Diolch i hyn, bydd datblygwyr yn gallu, gan ddefnyddio patrymau microservice (agregator, proxy, cadwyn, cangen, ac ati), i ddatrys problemau safonol a'r rhai sy'n codi'n anaml.

O safbwynt busnes, mae scalability yn un o'r arfau rheoli risg. Y prif beth yw bodloni ceisiadau cwsmeriaid trwy ddefnyddio'r offer i'r eithaf:

  • Pan fydd pŵer offer yn cynyddu o ganlyniad i gynnydd. Ni fydd yn segur oherwydd meddalwedd amherffaith. Mae Erlang yn graddio'n fertigol yn dda a bydd bob amser yn gallu defnyddio'r holl greiddiau CPU a'r cof sydd ar gael;
  • Mewn amgylcheddau cwmwl, gallwn reoli faint o offer yn dibynnu ar y llwyth presennol neu a ragwelir a gwarantu CLG.

goddefgarwch fai

Gadewch i ni ystyried dwy axiom: “Mae methiannau yn annerbyniol” a “Bydd methiannau bob amser.” I fusnes, mae methiant meddalwedd yn golygu colli arian, a beth sy’n waeth, colli enw da. Wrth gydbwyso colledion posibl a chost datblygu meddalwedd sy'n goddef diffygion, gellir dod o hyd i gyfaddawd yn aml.

Yn y tymor byr, mae pensaernïaeth sy'n ymgorffori goddefgarwch o ddiffygion yn arbed arian ar brynu datrysiadau clystyru oddi ar y silff. Maent yn ddrud ac mae ganddynt chwilod hefyd.
Yn y tymor hir, mae pensaernïaeth sy'n goddef diffygion yn talu amdani'i hun droeon ar bob cam o'i datblygiad.
Mae negeseuon o fewn y sylfaen cod yn eich galluogi i weithio allan yn fanwl ryngweithio cydrannau o fewn y system yn ystod y cam datblygu. Mae hyn yn symleiddio'r dasg o ymateb a rheoli methiannau, gan fod yr holl gydrannau hanfodol yn trin methiannau, ac mae'r system sy'n deillio o hyn yn gwybod sut i ddychwelyd yn awtomatig i normal ar ôl methiant trwy ddyluniad.

Ymatebolrwydd

Waeth beth fo methiannau, rhaid i'r cais ymateb i geisiadau a bodloni'r CLG. Y gwir amdani yw nad yw pobl eisiau aros, felly rhaid i fusnesau addasu yn unol â hynny. Disgwylir i fwy a mwy o gymwysiadau fod yn hynod ymatebol.
Mae ceisiadau ymatebol yn gweithredu bron mewn amser real. Mae Erlang VM yn gweithredu mewn modd amser real meddal. Ar gyfer rhai meysydd, megis masnachu stoc, meddygaeth, a rheoli offer diwydiannol, mae modd amser real caled yn bwysig.
Mae systemau ymatebol yn gwella UX ac o fudd i'r busnes.

Crynodeb rhagarweiniol

Wrth gynllunio'r erthygl hon, roeddwn i eisiau rhannu fy mhrofiad o greu brocer negeseuon ac adeiladu systemau cymhleth yn seiliedig arno. Ond trodd y rhan ddamcaniaethol a chymhellol allan yn eithaf helaeth.
Yn ail ran yr erthygl, byddaf yn siarad am naws gweithredu pwyntiau cyfnewid, patrymau negeseuon a'u cymhwysiad.
Yn y drydedd ran byddwn yn ystyried materion cyffredinol o drefnu gwasanaethau, llwybro a chydbwyso. Gadewch i ni siarad am ochr ymarferol scalability a goddefgarwch bai systemau.

Diwedd y rhan gyntaf.

Shoot Photo @lucabravo.

Ffynhonnell: hab.com

Ychwanegu sylw