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.

Is e seo an artaigil mu dheireadh san t-sreath air tagraidhean ath-ghnĂŹomhach sgaoilte ann an Erlang/Elixir. ANNS gheibh thu bunaitean teòiridheach ailtireachd reactive. 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:
- a-nis bu chòir don t-seirbheis iarrtasan a là imhseachadh air 5 nodan brabhsair,
- a bhith comasach air gnÏomhan cÚl-raoin a dhèanamh,
- 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 airsonstickycothromachadh.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 .
Coileanadh
Feuchaidh sinn ri co-dhiÚ coimeas a dhèanamh eadar coileanadh rabbitmq agus na teachdaireachdan à bhaisteach againn.
Lorg mi 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:

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
Chan fhaod ach luchd-cleachdaidh clĂ raichte pĂ irt a ghabhail san sgrĂšdadh. , 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
