Blocaichean togail de thagraidhean sgaoilte. An dàrna tuairmse

Sanas

Co-obraichean, ann am meadhan an t-samhraidh tha mi an dùil sreath eile de artaigilean fhoillseachadh air dealbhadh shiostaman ciudha: “The VTrade Experiment” - oidhirp air frèam a sgrìobhadh airson siostaman malairt. Nì an t-sreath sgrùdadh air teòiridh agus cleachdadh togail iomlaid, rop agus stòr. Aig deireadh na h-artaigil, tha mi a’ toirt cuireadh dhut bhòtadh airson na cuspairean as motha a tha inntinneach dhut.

Blocaichean togail de thagraidhean sgaoilte. An dàrna tuairmse

Is e seo an artaigil mu dheireadh san t-sreath air tagraidhean ath-ghnìomhach sgaoilte ann an Erlang/Elixir. ANNS chiad artaigil gheibh thu bunaitean teòiridheach ailtireachd reactive. An dàrna artaigil a’ nochdadh nam pàtranan agus na dòighean bunaiteach airson a leithid de shiostaman a thogail.

An-diugh bidh sinn a 'togail cheistean mu leasachadh a' bhunait còd agus pròiseactan san fharsaingeachd.

Eagrachadh sheirbheisean

Ann am fìor bheatha, nuair a bhios tu a’ leasachadh seirbheis, gu tric feumaidh tu grunn phàtranan eadar-obrachaidh a chur còmhla ann an aon rianadair. Mar eisimpleir, feumaidh an t-seirbheis luchd-cleachdaidh, a dh’ fhuasglas an duilgheadas ann a bhith a’ riaghladh phròifilean luchd-cleachdaidh pròiseict, freagairt a thoirt do iarrtasan req-resp agus aithris a thoirt air ùrachaidhean pròifil tro pub-sub. Tha a’ chùis seo gu math sìmplidh: air cùl theachdaireachdan tha aon rianadair a chuireas an gnìomh loidsig na seirbheis agus a’ foillseachadh ùrachaidhean.

Bidh an suidheachadh a’ fàs nas toinnte nuair a dh’fheumas sinn seirbheis sgaoilte a tha a’ fulang le lochdan a chuir an gnìomh. Smaoinich gu bheil na riatanasan airson luchd-cleachdaidh air atharrachadh:

  1. a-nis bu chòir don t-seirbheis iarrtasan a làimhseachadh air 5 nodan brabhsair,
  2. a bhith comasach air gnìomhan cùl-raoin a dhèanamh,
  3. agus cuideachd a bhith comasach air liostaichean ballrachd a riaghladh airson ùrachaidhean pròifil.

Nota: Chan eil sinn a’ beachdachadh air a’ cheist mu stòradh cunbhalach agus ath-riochdachadh dàta. Gabhamaid ris gun deach na cùisean sin fhuasgladh na bu thràithe agus gu bheil ìre stòraidh earbsach agus so-ruigsinneach aig an t-siostam mu thràth, agus tha uidheamachdan aig luchd-làimhseachaidh gus eadar-obrachadh leis.

Tha an tuairisgeul foirmeil air seirbheis luchd-cleachdaidh air fàs nas iom-fhillte. Bho shealladh prògramadair, chan eil ach glè bheag de dh’ atharrachaidhean ri linn cleachdadh theachdaireachdan. Gus a’ chiad riatanas a shàsachadh, feumaidh sinn cothromachadh a rèiteachadh aig a’ phuing iomlaid req-resp.

Bidh an riatanas airson gnìomhan cùl-fhiosrachaidh a phròiseasadh a’ tachairt gu tric. Ann an luchd-cleachdaidh, dh’ fhaodadh seo a bhith a’ sgrùdadh sgrìobhainnean luchd-cleachdaidh, a’ giullachd ioma-mheadhain a chaidh a luchdachadh sìos, no a’ sioncronadh dàta leis na meadhanan sòisealta. lìonraidhean. Feumaidh na gnìomhan sin a bhith air an sgaoileadh ann an dòigh air choireigin taobh a-staigh na buidhne agus sùil a chumail air adhartas cur an gnìomh. Mar sin, tha dà roghainn fuasglaidh againn: an dàrna cuid cleachd an teamplaid cuairteachaidh gnìomh bhon artaigil roimhe, no, mura h-eil e iomchaidh, sgrìobh clàr-ama gnìomh àbhaisteach a stiùireas an cruinneachadh de phròiseasan san dòigh a dh’ fheumas sinn.

Feumaidh puing 3 leudachadh teamplaid pub-sub. Agus airson a bhuileachadh, às deidh dhuinn puing iomlaid taigh-seinnse a chruthachadh, feumaidh sinn cuideachd rianadair na h-ìre seo a chuir air bhog taobh a-staigh ar seirbheis. Mar sin, tha e mar gum biodh sinn a’ gluasad an loidsig airson a bhith a’ giullachd ballrachdan agus dì-chlàradh bhon t-sreath teachdaireachdan gu buileachadh luchd-cleachdaidh.

Mar thoradh air an sin, sheall lobhadh na trioblaid, gus coinneachadh ris na riatanasan, gum feum sinn 5 eisimpleirean den t-seirbheis a chuir air bhog air diofar nodan agus eintiteas a bharrachd a chruthachadh - fo-riaghladair taigh-seinnse, le uallach airson an fho-sgrìobhaidh.
Gus 5 luchd-làimhseachaidh a ruith, chan fheum thu an còd seirbheis atharrachadh. Is e an aon ghnìomh a bharrachd a bhith a 'stèidheachadh riaghailtean cothromachaidh aig a' phuing iomlaid, air am bi sinn a 'bruidhinn beagan nas fhaide air adhart.
Tha iom-fhillteachd a bharrachd ann cuideachd: feumaidh an neach-riaghlaidh taigh-seinnse agus an clàr-ama gnìomh àbhaisteach obrachadh ann an aon leth-bhreac. A-rithist, feumaidh an t-seirbheis teachdaireachd, mar bhunait, dòigh a thoirt seachad airson stiùiriche a thaghadh.

Roghainn Ceannard

Ann an siostaman sgaoilte, is e taghadh stiùiriche an dòigh-obrach airson aon phròiseas a chuir an dreuchd le uallach airson a bhith a’ clàradh giollachd sgaoilte cuid de luchd.

Ann an siostaman nach eil buailteach do mheadhanachadh, thathas a’ cleachdadh algoirmean uile-choitcheann agus stèidhichte air co-aontachd, leithid paxos no raft.
Leis gu bheil teachdaireachdan na broker agus na phrìomh eileamaid, tha fios aige mu gach neach-riaghlaidh seirbheis - stiùirichean tagraiche. Faodaidh teachdaireachdan stiùiriche fhastadh gun bhòtadh.

Às deidh tòiseachadh agus ceangal ris a 'phuing iomlaid, gheibh a h-uile seirbheis teachdaireachd siostam #'$leader'{exchange = ?EXCHANGE, pid = LeaderPid, servers = Servers}. Ma tha LeaderPid cadal с pid pròiseas làithreach, tha e air a chur an dreuchd mar cheannard, agus an liosta Servers gabhail a-steach a h-uile nodan agus na crìochan aca.
Aig an àm seo tha fear ùr a’ nochdadh agus nód cnuasachaidh obrach air a dhì-cheangal, gheibh a h-uile rianadair seirbheis #'$slave_up'{exchange = ?EXCHANGE, pid = SlavePid, options = SlaveOpts} и #'$slave_down'{exchange = ?EXCHANGE, pid = SlavePid, options = SlaveOpts} fa leth.

San dòigh seo, tha na pàirtean uile mothachail air a h-uile atharrachadh, agus tha cinnt aig a’ bhuidheann gum bi aon stiùiriche aig àm sònraichte sam bith.

Eadar-mheadhanairean

Gus pròiseasan giullachd sgaoilte iom-fhillte a chuir an gnìomh, a bharrachd air duilgheadasan ann a bhith ag ùrachadh ailtireachd gnàthaichte, tha e goireasach eadar-mheadhanairean a chleachdadh.
Gus nach atharraich thu an còd seirbheis agus fuasgladh fhaighinn, mar eisimpleir, duilgheadasan giollachd a bharrachd, slighe no logadh teachdaireachdan, faodaidh tu inneal-làimhseachaidh progsaidh a chomasachadh ron t-seirbheis, a nì an obair a bharrachd.

Is e eisimpleir clasaigeach de optimization pub-sub tagradh sgaoilte le cridhe gnìomhachais a ghineas tachartasan ùrachaidh, leithid atharrachaidhean prìsean sa mhargaidh, agus còmhdach ruigsinneachd - N frithealaichean a bheir seachad websocket API airson teachdaichean lìn.
Ma cho-dhùnas tu ceann-latha, bidh seirbheis teachdaiche a’ coimhead mar seo:

  • bidh an neach-dèiligidh a’ stèidheachadh cheanglaichean leis an àrd-ùrlar. Air taobh an fhrithealaiche a chuireas crìoch air an trafaic, thèid pròiseas a chuir air bhog gus an ceangal seo a sheirbheis.
  • Ann an co-theacsa pròiseas na seirbheis, bidh cead agus ballrachd airson ùrachaidhean a’ tachairt. Tha am pròiseas a 'gairm an dòigh fo-sgrìobhaidh airson cuspairean.
  • Cho luath ‘s a thèid tachartas a chruthachadh anns an kernel, thèid a lìbhrigeadh gu na pròiseasan a tha a’ seirbheiseachadh nan ceanglaichean.

Smaoinich gu bheil 50000 neach-aontachaidh againn don chuspair “naidheachdan”. Tha luchd-aontachaidh air an sgaoileadh gu cothromach thairis air 5 frithealaichean. Mar thoradh air an sin, thèid gach ùrachadh, a ruigeas an t-àite iomlaid, ath-aithris 50000 uair: 10000 uair air gach frithealaiche, a rèir an àireamh de luchd-aontachaidh air. Chan e sgeama fìor èifeachdach a th’ ann, ceart?
Gus an suidheachadh a leasachadh, leig leinn neach-ionaid a thoirt a-steach aig a bheil an aon ainm ris a 'phuing iomlaid. Feumaidh an neach-clàraidh ainm cruinne a bhith comasach air am pròiseas as fhaisge a thilleadh le ainm, tha seo cudromach.

Nach cuir sinn an neach-ionaid seo air bhog air na frithealaichean còmhdach ruigsinneachd, agus bidh na pròiseasan againn uile a tha a’ frithealadh an websocket api a ’fo-sgrìobhadh dha, agus chan ann chun a’ phuing iomlaid taigh-seinnse tùsail anns an kernel. Bidh neach-ionaid a’ fo-sgrìobhadh don chridhe a-mhàin ma tha ballrachd sònraichte ann agus ag ath-aithris an teachdaireachd a thig a-steach don luchd-aontachaidh aige.
Mar thoradh air an sin, thèid 5 teachdaireachdan a chuir eadar na frithealaichean kernel agus ruigsinneachd, an àite 50000.

Routing agus cothromachadh

Req- Resp

Anns a’ bhuileachadh teachdaireachd gnàthach, tha 7 ro-innleachdan cuairteachaidh iarrtasan:

  • default. Thèid an t-iarrtas a chuir chun a h-uile riaghladair.
  • round-robin. Tha iarrtasan air an àireamhachadh agus air an sgaoileadh gu cearcallach eadar luchd-riaghlaidh.
  • consensus. Tha an luchd-riaghlaidh a tha a 'frithealadh na seirbheis air an roinn ann an stiùirichean agus tràillean. Thèid iarrtasan a chuir chun stiùiriche a-mhàin.
  • consensus & round-robin. Tha ceannard aig a' bhuidheann, ach tha iarrtasan gan sgaoileadh am measg a h-uile ball.
  • sticky. Tha gnìomh hash air a thomhas agus air a shònrachadh do neach-làimhseachaidh sònraichte. Bidh iarrtasan às dèidh làimh leis an ainm-sgrìobhte seo a’ dol chun aon làimh.
  • sticky-fun. Nuair a thòisicheas tu a’ phuing iomlaid, bidh gnìomh àireamhachaidh hash airson sticky cothromachadh.
  • fun. Coltach ri spòrs steigeach, chan urrainn dhut ach ath-stiùireadh, a dhiùltadh no a phròiseasadh ro-làimh.

Tha an ro-innleachd cuairteachaidh air a shuidheachadh nuair a thèid am puing iomlaid a thòiseachadh.

A bharrachd air cothromachadh, leigidh teachdaireachdan leat tagaichean a dhèanamh. Bheir sinn sùil air na seòrsaichean tagaichean san t-siostam:

  • Tag ceangail. A’ toirt cothrom dhut tuigsinn dè an ceangal a thàinig na tachartasan. Air a chleachdadh nuair a tha pròiseas smachd a 'ceangal ris an aon phuing iomlaid, ach le iuchraichean slighe eadar-dhealaichte.
  • Tag seirbheis. A’ leigeil leat luchd-làimhseachaidh a chur còmhla ann am buidhnean airson aon seirbheis agus leudachadh air comasan slighe is cothromachaidh. Airson a’ phàtran req-resp, tha an t-slighe sreathach. Bidh sinn a’ cur iarrtas chun àite iomlaid, agus an uairsin ga thoirt don t-seirbheis. Ach ma dh'fheumas sinn na h-innealan-làimhe a roinn ann am buidhnean loidsigeach, thèid an sgaradh a dhèanamh le bhith a 'cleachdadh tagaichean. Nuair a thèid tag a shònrachadh, thèid an t-iarrtas a chuir gu buidheann sònraichte de luchd-riaghlaidh.
  • Tag iarraidh. A’ leigeil leat eadar-dhealachadh a dhèanamh eadar freagairtean. Leis gu bheil an siostam againn asyncronach, gus freagairtean seirbheis a phròiseasadh feumaidh sinn a bhith comasach air RequestTag a shònrachadh nuair a chuireas sinn iarrtas. Bho sin bidh sinn comasach air tuigsinn am freagairt don iarrtas a thàinig thugainn.

Taigh-seinnse

Airson pub-sub tha a h-uile dad beagan nas sìmplidh. Tha puing iomlaid againn ris am bi teachdaireachdan air am foillseachadh. Bidh am puing iomlaid a’ sgaoileadh teachdaireachdan am measg luchd-aontachaidh a tha air ballrachd a thoirt do na h-iuchraichean slighe a tha a dhìth orra (faodaidh sinn a ràdh gu bheil seo coltach ri cuspairean).

Scalability agus fulangas sgàinidhean

Tha scalability an t-siostam gu h-iomlan an urra ris an ìre de scalability de na sreathan agus na pàirtean den t-siostam:

  • Tha seirbheisean air an sgèile le bhith a’ cur nodan a bharrachd ris a’ bhuidheann le luchd-làimhseachaidh airson na seirbheis seo. Rè obrachadh deuchainn, faodaidh tu am poileasaidh cothromachaidh as fheàrr a thaghadh.
  • Tha an t-seirbheis teachdaireachdan fhèin taobh a-staigh brabhsair fa-leth mar as trice air a sgèileadh an dàrna cuid le bhith a’ gluasad puingean iomlaid gu sònraichte luchdaichte gu nodan brabhsair fa leth, no le bhith a’ cur pròiseasan neach-ionaid ri raointean den bhuidheann a tha gu sònraichte luchdaichte.
  • Tha scalability an t-siostam gu lèir mar fheart an urra ri sùbailteachd na h-ailtireachd agus an comas cruinneachaidhean fa leth a chur còmhla ann an eintiteas loidsigeach cumanta.

Bidh soirbheas pròiseact gu tric an urra ri sìmplidheachd agus astar sgèileadh. Bidh teachdaireachdan san dreach làithreach aige a’ fàs còmhla ris an tagradh. Fiù mura h-eil cruinneachadh de 50-60 inneal againn, is urrainn dhuinn tionndadh gu caidreachas. Gu mì-fhortanach, tha cuspair caidreachais taobh a-muigh raon an artaigil seo.

Glèidheadh

Nuair a bhios sinn a’ dèanamh anailis air cothromachadh luchdan, bheachdaich sinn mu thràth air dìth luchd-riaghlaidh seirbheis. Ach, feumar teachdaireachdan a ghleidheadh ​​​​cuideachd. Ma thachras tubaist nód no inneal, bu chòir teachdaireachdan faighinn air ais gu fèin-ghluasadach, agus anns an ùine as giorra a tha comasach.

Anns na pròiseactan agam bidh mi a’ cleachdadh nodan a bharrachd a thogas an luchd gun fhios nach tuit iad. Tha buileachadh modh sgaoilte àbhaisteach aig Erlang airson tagraidhean OTP. Bidh modh cuairteachaidh a’ coileanadh ath-bheothachadh gun fhios nach fàilligeadh le bhith a’ cur air bhog an tagradh a dh’ fhàillig air nód eile a chaidh a chuir air bhog roimhe. Tha am pròiseas follaiseach; às deidh fàilligeadh, gluaisidh an tagradh gu fèin-ghluasadach chun nód fàilligidh. Faodaidh tu barrachd a leughadh mun chomas seo an seo.

Coileanadh

Feuchaidh sinn ri co-dhiù coimeas a dhèanamh eadar coileanadh rabbitmq agus na teachdaireachdan àbhaisteach againn.
Lorg mi toraidhean oifigeil deuchainn rabbitmq bhon sgioba Openstack.

Ann am paragraf 6.14.1.2.1.2.2. Tha an sgrìobhainn thùsail a’ sealltainn toradh an RPC CAST:
Blocaichean togail de thagraidhean sgaoilte. An dàrna tuairmse

Cha dèan sinn roghainnean a bharrachd ris an OS kernel no erlang VM ro làimh. Riatanasan airson deuchainn:

  • Tha erl a’ roghnachadh: +A1 +sbtu.
  • Tha an deuchainn taobh a-staigh aon nód erlang air a ruith air laptop le seann i7 ann an dreach gluasadach.
  • Bithear a’ dèanamh deuchainnean cnuasachaidh air frithealaichean le lìonra 10G.
  • Bidh an còd a’ ruith ann an soithichean docker. Lìonra ann am modh NAT.

Còd deuchainn:

req_resp_bench(_) ->
  W = perftest:comprehensive(10000,
    fun() ->
      messaging:request(?EXCHANGE, default, ping, self()),
      receive
        #'$msg'{message = pong} -> ok
      after 5000 ->
        throw(timeout)
      end
    end
  ),
  true = lists:any(fun(E) -> E >= 30000 end, W),
  ok.

Scenarios 1: Tha an deuchainn air a ruith air laptop le seann dreach gluasadach i7. Tha an deuchainn, na teachdaireachdan agus an t-seirbheis air an cur gu bàs air aon nód ann an aon inneal Docker:

Sequential 10000 cycles in ~0 seconds (26987 cycles/s)
Sequential 20000 cycles in ~1 seconds (26915 cycles/s)
Sequential 100000 cycles in ~4 seconds (26957 cycles/s)
Parallel 2 100000 cycles in ~2 seconds (44240 cycles/s)
Parallel 4 100000 cycles in ~2 seconds (53459 cycles/s)
Parallel 10 100000 cycles in ~2 seconds (52283 cycles/s)
Parallel 100 100000 cycles in ~3 seconds (49317 cycles/s)

Sealladh 2: 3 nodan a’ ruith air diofar innealan fo docker (NAT).

Sequential 10000 cycles in ~1 seconds (8684 cycles/s)
Sequential 20000 cycles in ~2 seconds (8424 cycles/s)
Sequential 100000 cycles in ~12 seconds (8655 cycles/s)
Parallel 2 100000 cycles in ~7 seconds (15160 cycles/s)
Parallel 4 100000 cycles in ~5 seconds (19133 cycles/s)
Parallel 10 100000 cycles in ~4 seconds (24399 cycles/s)
Parallel 100 100000 cycles in ~3 seconds (34517 cycles/s)

Anns a h-uile cùis, cha robh cleachdadh CPU nas àirde na 250%

Builean

Tha mi an dòchas nach eil an cearcall seo a’ coimhead coltach ri cnap-starra inntinn agus bidh an t-eòlas agam na fhìor bhuannachd don dà chuid luchd-rannsachaidh siostaman sgaoilte agus cleachdaichean a tha aig fìor thoiseach togail ailtireachd sgaoilte airson na siostaman gnìomhachais aca agus a tha a’ coimhead air Erlang / Elixir le ùidh. , ach tha teagamhan ann an fhiach e ...

photo @chuttersnap

Chan fhaod ach luchd-cleachdaidh clàraichte pàirt a ghabhail san sgrùdadh. Soidhnig a-steach, mas e do thoil e.

Dè na cuspairean air am bu chòir dhomh dèiligeadh nas mionaidiche mar phàirt den t-sreath VTrade Experiment?

  • Teòiridh: Margaidhean, òrdughan agus an ùine: DAY, GTD, GTC, IOC, FOK, MOO, MOC, LOO, LOC

  • Leabhar òrduighean. Teòiridh agus cleachdadh leabhar a chur an gnìomh le buidhnean

  • Sealladh farsaing air malairt: ticeagan, bàraichean, rùintean. Ciamar a stòradh agus mar a glaodhadh

  • Cùl-oifis. Planadh agus leasachadh. Sgrùdadh luchd-obrach agus sgrùdadh tachartais

  • API. Feuch gun obraich sinn a-mach dè an eadar-aghaidh a tha a dhìth agus mar a chuireas sinn an gnìomh iad

  • Stòradh fiosrachaidh: PostgreSQL, Raon-ama, Tarantool ann an siostaman malairt

  • Reactive ann an siostaman malairt

  • Eile. Sgrìobhidh mi anns na beachdan

Bhòt 6 neach-cleachdaidh. Cha do stad 4 neach-cleachdaidh.

Source: www.habr.com

Cuir beachd ann