Iibhloko zokwakha zezicelo ezisasaziweyo. Uqikelelo lwesibini

Isibhengezo

Abalingane, phakathi kwehlobo ndiceba ukukhulula olunye uchungechunge lwamanqaku malunga noyilo lweenkqubo zokufola: "Uvavanyo lweVTrade" - inzame yokubhala isakhelo seenkqubo zokurhweba. Olu chungechunge luya kuvavanya ithiyori kunye nokuziqhelanisa nokwakha utshintshiselwano, ifandesi kunye nevenkile. Ekupheleni kwenqaku, ndikumema ukuba uvotele izihloko onomdla kakhulu kuwe.

Iibhloko zokwakha zezicelo ezisasaziweyo. Uqikelelo lwesibini

Eli linqaku lokugqibela kuthotho olusasazwayo lwezicelo ezisebenzayo e-Erlang/Elixir. IN inqaku lokuqala ungafumana iziseko zethiyori zolwakhiwo olusebenzayo. Inqaku lesibini ubonisa iipateni ezisisiseko kunye neendlela zokwenza ezo nkqubo.

Namhlanje siza kuphakamisa imiba yophuhliso lwesiseko sekhowudi kunye neeprojekthi ngokubanzi.

Umbutho weenkonzo

Kubomi bokwenyani, xa uphuhlisa inkonzo, kaninzi kufuneka udibanise iipatheni ezininzi zokusebenzisana kumlawuli omnye. Ngokomzekelo, inkonzo yabasebenzisi, esombulula ingxaki yokulawula iiprofayili zomsebenzisi weprojekthi, kufuneka iphendule kwizicelo ze-req-resp kwaye ibike ukuhlaziywa kweprofayili nge-pub-sub. Le meko ilula kakhulu: emva komyalezo kukho umlawuli omnye osebenzisa ingqiqo yenkonzo kwaye apapashe uhlaziyo.

Imeko iba nzima ngakumbi xa kufuneka siphumeze inkonzo esasazwayo yokunyamezela iimpazamo. Makhe sicinge ukuba iimfuno zabasebenzisi zitshintshile:

  1. ngoku inkonzo kufuneka iqhube izicelo kwi-5 cluster nodes,
  2. ukwazi ukwenza imisebenzi yokuqhuba ngasemva,
  3. kwaye ukwazi ukulawula ngokuguqukayo uluhlu lobhaliso lohlaziyo lweprofayile.

Igalelo: Asiwuqwalaseli umba wokugcinwa okufanayo kunye nokuphindaphinda idatha. Makhe sicinge ukuba le micimbi iye yasonjululwa kwangaphambili kwaye inkqubo sele inomgangatho wokugcina othembekileyo kunye ne-scalable, kwaye abaphathi baneendlela zokusebenzisana nayo.

Inkcazo esesikweni yenkonzo yabasebenzisi ibe nzima ngakumbi. Ngokwembono yomdwelisi wenkqubo, utshintsho luncinci ngenxa yokusetyenziswa komyalezo. Ukwanelisa imfuno yokuqala, kufuneka siqwalasele ibhalansi kwindawo yokutshintshiselana nge-req-resp.

Imfuneko yokucwangcisa imisebenzi yangasemva yenzeka rhoqo. Kubasebenzisi, oku kunokuba kukujonga amaxwebhu omsebenzisi, ukusetyenzwa kwemultimedia ekhutshelweyo, okanye ukuvumelanisa idatha kunye nemidiya yoluntu. uthungelwano. Le misebenzi ifuna ukuba ngandlela ithile isasazwe phakathi kweqela kwaye ibekwe iliso kwinkqubela phambili yokwenziwa kwayo. Ngoko ke, sineendlela ezimbini zokukhetha isisombululo: mhlawumbi sebenzisa itemplate yokusabalalisa umsebenzi kwinqaku elidlulileyo, okanye, ukuba ayihambisani, bhala umcwangcisi wemisebenzi yesiko oya kulawula i-pool of processors ngendlela esiyifunayo.

Inqaku lesi-3 lifuna ukongezwa kwetemplate ye-pub-sub. Kwaye ukuphunyezwa, emva kokudala indawo yokutshintshiselana ye-pub-sub, kufuneka sidibanise umlawuli wale ndawo ngaphakathi kwenkonzo yethu. Ngaloo ndlela, kufana nokuba sihambisa ingqiqo yokubhalisa kunye nokukhupha kuluhlu lwemiyalezo ekuphunyezweni kwabasebenzisi.

Ngenxa yoko, ukuchithwa kwengxaki kubonise ukuba ukuze sihlangabezane neemfuno, kufuneka siqalise iimeko ezi-5 zenkonzo kwiindawo ezahlukeneyo kunye nokudala iqumrhu elongezelelweyo - umlawuli we-pub-sub, ojongene nokubhaliselwa.
Ukusebenzisa abaphangi aba-5, awudingi ukutshintsha ikhowudi yesevisi. Isenzo esongezelelweyo kuphela simisela imithetho yokulinganisa kwindawo yokutshintshiselana, esiza kuthetha ngayo kamva.
Kukwakho nokuntsonkotha okongeziweyo: isilawuli se-pub-sub kunye nomcwangcisi wemisebenzi yesiko kufuneka asebenze kwikopi enye. Kwakhona, inkonzo yomyalezo, njengeyona nto ibalulekileyo, kufuneka ibonelele ngendlela yokukhetha inkokeli.

UKhetho lweNkokheli

Kwiinkqubo ezisasazwayo, unyulo lweenkokeli yinkqubo yokumisela inkqubo enye enoxanduva lokucwangcisa ukuhanjiswa komthwalo othile.

Kwiinkqubo ezingenakulungelelaniswa kwi-centralization, i-algorithms yendalo yonke kunye neyokuvumelana, njenge-paxos okanye i-raft, isetyenziswa.
Ekubeni imiyalezo i-broker kunye ne-central element, iyazi malunga nabo bonke abalawuli benkonzo - iinkokheli zabaviwa. Ukuthumela imiyalezo kunokonyula inkokeli ngaphandle kokuvota.

Emva kokuqala kunye nokudibanisa kwindawo yokutshintshiselana, zonke iinkonzo zifumana umyalezo wenkqubo #'$leader'{exchange = ?EXCHANGE, pid = LeaderPid, servers = Servers}. Ukuba LeaderPid ihambelana ne pid inkqubo yangoku, yonyulwa njengenkokeli, kunye noluhlu Servers ibandakanya zonke iindawo kunye neeparamitha zazo.
Okwangoku kuvela entsha kwaye i-node ye-cluster esebenzayo inqanyuliwe, bonke abalawuli benkonzo bafumana #'$slave_up'{exchange = ?EXCHANGE, pid = SlavePid, options = SlaveOpts} ΠΈ #'$slave_down'{exchange = ?EXCHANGE, pid = SlavePid, options = SlaveOpts} ngokulandelanayo.

Ngale ndlela, onke amacandelo ayazi ngalo lonke utshintsho, kwaye iqela liqinisekisiwe ukuba libe nenkokeli enye nangaliphi na ixesha.

Abalamli

Ukuphumeza iinkqubo eziyinkimbinkimbi zokusasazwa, kunye nakwiingxaki zokuphucula i-architecture ekhoyo, kulungele ukusebenzisa abalamli.
Ukuze ungatshintshi ikhowudi yenkonzo kwaye uyisombulule, umzekelo, iingxaki zokuqhubekeka okongeziweyo, umzila okanye imiyalezo yokungena, unokuvumela umphathi we-proxy phambi kwenkonzo, eya kwenza wonke umsebenzi owongezelelweyo.

Umzekelo wakudala we-pub-sub optimization sisicelo esisasaziweyo esinondoqo weshishini ovelisa iziganeko zohlaziyo, ezifana notshintsho lwamaxabiso kwimarike, kunye nofikelelo umaleko - iiseva ze-N ezibonelela nge-API ye-websocket kubathengi bewebhu.
Ukuba uthatha isigqibo ngentloko, ke inkonzo yabathengi ibonakala ngolu hlobo:

  • umxhasi useka imidibaniso kunye neqonga. Kwicala lomncedisi ophelisa i-traffic, inkqubo iqaliswa ukulungiselela olu xhulumaniso.
  • Kwimeko yenkqubo yenkonzo, ukugunyaziswa kunye nokubhaliselwa ukuhlaziywa kwenzeka. Inkqubo ibiza indlela yokubhalisa kwizihloko.
  • Nje ukuba isiganeko senziwe kwi-kernel, sinikezelwa kwiinkqubo zokusebenzela uqhagamshelwano.

Makhe sicinge ukuba sinababhalisi be-50000 kwisihloko "seendaba". Ababhalisi basasazwa ngokulinganayo kwiiseva ezi-5. Ngenxa yoko, uhlaziyo ngalunye, olufika kwindawo yokutshintshiselana, luya kuphinda luphindwe ngamaxesha angama-50000: amaxesha e-10000 kumncedisi ngamnye, ngokwenani lababhalisi kulo. Ayilocebo elisebenzayo, akunjalo?
Ukuphucula imeko, makhe sazise ummeli onegama elifanayo nendawo yotshintshiselwano. Umbhalisi wamagama wehlabathi kufuneka akwazi ukubuyisela eyona nkqubo ikufutshane ngegama, oku kubalulekile.

Masiqalise lo mmeli kwiiseva zofikelelo, kwaye zonke iinkqubo zethu ezisebenzela i-api ye-websocket ziya kubhalisa kuyo, kwaye hayi kwindawo yokuqala ye-pub-sub exchange point kwi-kernel. Ummeleli ubhalisa kwi-core kuphela kwimeko yokubhaliselwa okukodwa kwaye uphindaphinda umyalezo ongenayo kubo bonke ababhalisi bayo.
Ngenxa yoko, imiyalezo emi-5 iya kuthunyelwa phakathi kwe-kernel kunye neeseva zokufikelela, endaweni ye-50000.

Ukuhambisa kunye nokulinganisa

Req-Resp

Kuphumezo lwemiyalezo yangoku, kukho izicwangciso ezisi-7 zokusasaza izicelo:

  • default. Isicelo sithunyelwa kubo bonke abalawuli.
  • round-robin. Izicelo zibaliwe kwaye zisasazwe ngomjikelo phakathi kwabalawuli.
  • consensus. Abalawuli abakhonza inkonzo bahlulahlulwe kwiinkokeli kunye namakhoboka. Izicelo zithunyelwa kuphela kwinkokeli.
  • consensus & round-robin. Iqela linenkokeli, kodwa izicelo zisasazwa kuwo onke amalungu.
  • sticky. Umsebenzi we-hash ubalwa kwaye unikezelwe kumphathi othile. Izicelo ezilandelayo ngolu tyikityo ziya kumphathi ofanayo.
  • sticky-fun. Xa uqalisa indawo yotshintshiselwano, i-hash yokubala umsebenzi we sticky ukulinganisa.
  • fun. Ngokufana nokuncamathelayo-ukonwaba, nguwe kuphela onokuthi udibanise, ukwala okanye ukusetyenzwa kwangaphambili.

Isicwangciso sokusabalalisa sisekwe xa indawo yokutshintshiselana iqaliswa.

Ukongeza kwi-balance, imiyalezo ikuvumela ukuba uthege amaziko. Makhe sijonge kwiindidi zeethegi kwinkqubo:

  • Ithegi yoqhagamshelo. Ikuvumela ukuba uqonde ukuba zeza ngoluphi unxibelelwano iziganeko. Isetyenziswe xa inkqubo yomlawuli idibanisa kwindawo efanayo yokutshintshiselana, kodwa ngamaqhosha ahlukeneyo okuhamba.
  • Ithegi yenkonzo. Ikuvumela ukuba udibanise abaphathi babe ngamaqela kwinkonzo enye kwaye wandise indlela kunye nesakhono sokulinganisa. Kwipateni ye-req-resp, indlela imigca. Sithumela isicelo kwindawo yokutshintshiselana, emva koko idlulisele kwinkonzo. Kodwa ukuba sifuna ukwahlula abaphathi babe ngamaqela anengqiqo, ngoko ukwahlula kwenziwa ngokusebenzisa iithegi. Xa ucacisa ithegi, isicelo siya kuthunyelwa kwiqela elithile labalawuli.
  • Cela ithegi. Ikuvumela ukuba wenze umahluko phakathi kweempendulo. Ekubeni inkqubo yethu i-asynchronous, ukucubungula iimpendulo zenkonzo kufuneka sikwazi ukucacisa i-RequestTag xa uthumela isicelo. Kuyo siya kukwazi ukuqonda impendulo yesicelo esifike kuthi.

I-Pub-sub

Kwi-pub-sub yonke into ilula kancinane. Sinendawo yokutshintshiselana apho imiyalezo ipapashwa khona. Indawo yokutshintshiselana ihambisa imiyalezo phakathi kwababhalisi abaye babhalisela izitshixo zomzila abazifunayo (sinokuthi oku kufana nezihloko).

I-scalability kunye nokunyamezela iimpazamo

I-scalability yenkqubo iyonke ixhomekeke kwiqondo lokunyuka kweeleya kunye namalungu enkqubo:

  • Iinkonzo zilinganiswa ngokongeza iindawo ezongezelelweyo kwiqela elinabaphathi bale nkonzo. Ngexesha lokusebenza kovavanyo, unokukhetha umgaqo-nkqubo wokulinganisa ofanelekileyo.
  • Inkonzo yokuthumela imiyalezo ngokwayo ngaphakathi kweqela elahlukileyo idla ngokulinganiswa ngokuhambisa ngokukodwa iindawo zotshintshiselwano ezilayishiweyo ukuya kwiindawo zeqela elahlukileyo, okanye ngokongeza iinkqubo zeproxy kwiindawo ezilayishwe ngokukodwa zeqela.
  • I-scalability yenkqubo yonke njengophawu luxhomekeke ekuguquguqukeni kolwakhiwo kunye nokukwazi ukudibanisa iqoqo ngalinye libe yinto eqhelekileyo enengqiqo.

Impumelelo yeprojekthi ihlala ixhomekeke kubulula kunye nesantya sokulinganisa. Ukuthumela imiyalezo kwinguqulelo yayo yangoku iyakhula kunye nesicelo. Nokuba siswele iqela loomatshini abangama-50-60, singabhenela kumfelandawonye. Ngelishwa, isihloko somfelandawonye singaphaya kwemida yeli nqaku.

Ugcino

Xa sihlalutya ulungelelwaniso lomthwalo, sele sixoxe ngokuphinda-phinda abalawuli benkonzo. Nangona kunjalo, imiyalezo kufuneka igcinwe. Kwimeko ye-node okanye ukuphahlazeka komatshini, imiyalezo kufuneka ibuyele ngokuzenzekelayo, kwaye ngexesha elifutshane elinokwenzeka.

Kwiiprojekthi zam ndisebenzisa iindawo ezongezelelweyo ezithatha umthwalo xa kwenzeka ukuwa. I-Erlang inokuphunyezwa kwemowudi esasazekileyo yezicelo ze-OTP. Imowudi esasaziweyo yenza ukubuyisela kwimeko yokusilela ngokundulula usetyenziso olungaphumeleliyo kwenye indawo ebisungulwe ngaphambili. Inkqubo ibonakala; emva kokusilela, isicelo sihamba ngokuzenzekelayo kwindawo ye-failover. Unokufunda ngakumbi malunga nalo msebenzi apha.

Imveliso

Masizame okungenani ukuthelekisa ukusebenza kwe-rabbitmq kunye nesiko lethu lemiyalezo.
ndifumene iziphumo ezisemthethweni uvavanyo rabbitmq kwiqela le-openstack.

Kumhlathi 6.14.1.2.1.2.2. Uxwebhu loqobo lubonisa isiphumo se-RPC CAST:
Iibhloko zokwakha zezicelo ezisasaziweyo. Uqikelelo lwesibini

Asiyi kwenza naluphi na useto olongezelelweyo kwi-OS kernel okanye i-erlang VM kwangaphambili. Imiqathango yovavanyo:

  • I-erl ikhetha: +A1 +sbtu.
  • Uvavanyo ngaphakathi kwe-erlang node enye iqhutywa kwilaptop ene-i7 endala kuguqulelo lweselula.
  • Iimvavanyo zeCluster zenziwa kwiiseva ezinenethiwekhi ye-10G.
  • Ikhowudi isebenza kwizikhongozeli zedokhi. Inethiwekhi kwimo ye-NAT.

Ikhowudi yovavanyo:

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.

Imeko 1: Uvavanyo lwenziwa kwilaptop enenguqulelo yeselula ye-i7 endala. Uvavanyo, imiyalezo kunye nenkonzo zenziwa kwindawo enye kwisikhongozeli esinye seDocker:

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)

Imeko 2: Iinqununu ezi-3 ezisebenza koomatshini abahlukeneyo phantsi kwe-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)

Kuzo zonke iimeko, ukusetyenziswa kwe-CPU akuzange kudlule i-250%

Iziphumo

Ndiyathemba ukuba lo mjikelo awubonakali njengento yokulahla ingqondo kwaye amava am aya kuba yinzuzo yokwenene kubo bobabini abaphandi beenkqubo ezisasazwayo kunye nabasebenzi abasekuqaleni kwezakhiwo zokwakha ezisasaziweyo kwiinkqubo zabo zoshishino kwaye bajonge e-Erlang / Elixir ngomdla. , kodwa thandabuza ukuba kufanelekile...

photo @chuttersnap

Ngabasebenzisi ababhalisiweyo kuphela abanokuthatha inxaxheba kuphando. Ngena, ndiyacela.

Zeziphi izihloko ekufuneka ndizigqume ngokweenkcukacha ngakumbi njengenxalenye yothotho lwe-VTrade Experiment?

  • Ithiyori: Iimarike, iiodolo kunye nexesha lazo: USUKU, GTD, GTC, IOC, FOK, MOO, MOC, LOO, LOC

  • Incwadi yeeodolo. Ithiyori kunye nokuziqhelanisa nokuphumeza incwadi ngamaqela

  • Umbono worhwebo: Amanqaku, imivalo, izisombululo. Indlela yokugcina kunye nendlela yokuncamathelisa

  • I-ofisi emnyama. Ucwangciso nophuhliso. Ukubekwa esweni kwabasebenzi kunye nophando lweziganeko

  • API. Makhe sijonge ukuba yeyiphi i-interfaces efunekayo kunye nendlela yokuyiphumeza

  • Ukugcinwa kolwazi: I-PostgreSQL, i-Timescale, i-Tarantool kwiinkqubo zokurhweba

  • Reactivity kwiinkqubo zokurhweba

  • Okunye. Ndiza kubhala kwi-comments

Bangama-6 abasebenzisi abavotileyo. Abasebenzisi abangama-4 abakhange.

umthombo: www.habr.com

Yongeza izimvo