Qaybaha dhismaha ee codsiyada la qaybiyey. Qiyaasta labaad

Ogeysiis

Asxaabta, bartamihii xagaaga waxaan qorsheynayaa inaan sii daayo maqaallo kale oo taxane ah oo ku saabsan qaabeynta nidaamyada safka: "Tijaabada VTrade" - isku day ah in lagu qoro qaab-dhismeedka nidaamyada ganacsiga. Taxanuhu wuxuu baari doonaa aragtida iyo dhaqanka dhisidda beddelka, xaraashka iyo dukaanka. Dhamaadka maqaalka, waxaan kugu martiqaadayaa inaad u codeyso mawduucyada aadka u xiiseynaya.

Qaybaha dhismaha ee codsiyada la qaybiyey. Qiyaasta labaad

Kani waa maqaalkii ugu dambeeyay ee taxanaha codsiyada falcelinta ee la qaybiyay ee Erlang/Elixir. IN maqaalka koowaad Waxaad ka heli kartaa aasaaska aragtiyeed ee naqshadaha falcelinta. Maqaalka labaad waxay muujinaysaa qaababka iyo hababka aasaasiga ah ee lagu dhisayo nidaamyadan.

Maanta waxaan soo bandhigi doonaa arrimaha horumarinta saldhiga code iyo guud ahaan mashaariicda.

Ururka adeegyada

Nolosha dhabta ah, markaad horumarinayso adeega, inta badan waa inaad ku dartaa dhowr habab is dhexgalka hal koontaroole. Tusaale ahaan, adeega isticmaalayaasha, kaas oo xaliya dhibaatada maaraynta profile-ka isticmaalaha mashruuca, waa in uu ka jawaabaa codsiyada req-rep oo uu kaga warbixiyaa cusboonaysiinta astaanta guud iyada oo loo marayo pub-sub. Kiiskani aad buu u fudud yahay: fariinta gadaasheeda waxaa jira hal maamule kaas oo fuliya caqliga adeega oo daabaca wararka cusub.

Xaaladdu way sii cakiranaysaa markaan u baahanahay inaan hirgelino adeeg qaybsan oo u dulqaadan kara. Aynu qiyaasno in shuruudaha isticmaalayaashu ay isbeddeleen:

  1. hadda adeeggu waa inuu ka baaraandegaa codsiyada 5 qanjidhada kooxeed,
  2. awood u leh inuu qabto hawlaha habaynta asalka,
  3. iyo sidoo kale in ay awoodaan in ay si firfircoon u maareeyaan liisaska isdiiwaangelinta ee profile updates.

Xusuusin: Ma tixgelineyno arrinta kaydinta joogtada ah iyo ku celcelinta xogta. Aynu ka soo qaadno in arrimahan hore loo xalliyey oo nidaamku uu hore u lahaa lakab kaydineed oo la isku halayn karo oo la isku halayn karo, maamulayaashuna waxay leeyihiin habab ay kula falgalaan.

Sharaxaada rasmiga ah ee adeega isticmaalayaasha ayaa noqotay mid aad u adag. Marka laga eego dhinaca barnaamijka, isbeddelada ayaa ah kuwa ugu yar sababtoo ah isticmaalka fariimaha. Si loo qanciyo shuruudaha ugu horreeya, waxaan u baahanahay inaan habeyno dheelitirka barta sarrifka req-resp.

Shuruudda si loo habeeyo hawlaha asalka ahi waxay dhacdaa si joogto ah. Isticmaalayaasha, tani waxay noqon kartaa hubinta dukumeentiyada isticmaalaha, habaynta multimedia la soo dejiyey, ama ku-habaynta xogta warbaahinta bulshada. shabakadaha. Hawlahan waxay u baahan yihiin in si uun loogu qaybiyo kooxda dhexdeeda lana kormeero sida ay u socoto fulinta. Sidaa darteed, waxaan haynaa laba ikhtiyaar oo xal ah: ama isticmaal qaabka qaybinta hawsha ee maqaalkii hore, ama, haddii aysan ku habboonayn, qor jadwal hawleed caadi ah kaas oo u maamuli doona barkada processor-yada habka aan u baahanahay.

Barta 3aad waxay u baahantahay kordhinta template-ka-sub-sub Iyo hirgelinta, ka dib abuurista bar-is-weydaarsiga pub-sub, waxaan u baahannahay inaan sidoo kale bilowno kantaroolaha bartan gudaha adeeggayaga. Sidaa darteed, waxay la mid tahay haddii aan u dhaqaajineyno caqli-galnimada socodsiinta is-diiwaangelinta iyo ka-noqoshada lakabka fariimaha ee hirgelinta isticmaalayaasha.

Natiijo ahaan, burburka dhibaatadu waxay muujisay in si loo buuxiyo shuruudaha, waxaan u baahannahay inaan bilowno 5 xaaladood oo adeeg ah oo ku yaal qanjidhada kala duwan oo aan abuurno hay'ad dheeraad ah - kontorool-sub-sub, mas'uul ka ah is-diiwaangelinta.
Si aad u maamusho 5 maamule, uma baahnid inaad beddesho lambarka adeegga. Tallaabada kaliya ee dheeraadka ah ayaa ah dejinta xeerarka dheelitirka ee barta sarrifka, taas oo aan ka hadli doono wax yar ka dib.
Waxa kale oo jira kakanaanta dheeraadka ah: kontaroolaha-sub-sub-ka iyo jadwalaha hawsha gaarka ah waa inay ku shaqeeyaan hal nuqul. Mar labaad, adeegga fariimaha, oo ah mid aasaasi ah, waa inuu bixiyaa habka lagu dooranayo hoggaamiyaha.

Xulashada hogaamiyaha

Nidaamyada qaybsan, doorashada hoggaamiyaha waa habraaca lagu magacaabo hal hab oo mas'uul ka ah jadwalka habaynta qaybsan ee rarka qaarkood.

Nidaamyada aan u nuglayn xarun dhexe, algorithms-yada caalamiga ah iyo kuwa la isku raacsan yahay, sida paxos ama raft, ayaa la isticmaalaa.
Maadaama fariintu ay tahay dilaal iyo cunsur udub dhexaad u ah, way ogtahay dhamaan adeegayaasha adeegayaasha - hogaamiyayaasha musharaxiinta. Fariintu waxay magacaabi kartaa hogaamiye codeyn la'aan.

Ka dib marka la bilaabo oo lagu xiro barta sarrifka, dhammaan adeegyadu waxay helayaan fariin nidaam #'$leader'{exchange = ?EXCHANGE, pid = LeaderPid, servers = Servers}. Hadii LeaderPid ku beegan pid habka hadda jira, waxaa loo magacaabay hoggaamiyaha, iyo liiska Servers waxaa ku jira dhammaan noodyada iyo xuduudahooda.
Waqtigan xaadirka ah mid cusub ayaa soo baxaya waxaana go'an kutlada kutlada shaqeyneysa, dhammaan maamulayaasha adeegga ayaa helaya #'$slave_up'{exchange = ?EXCHANGE, pid = SlavePid, options = SlaveOpts} ΠΈ #'$slave_down'{exchange = ?EXCHANGE, pid = SlavePid, options = SlaveOpts} siday u kala horreeyaan.

Sidan, dhammaan qaybaha ayaa ka warqaba dhammaan isbeddellada, kooxduna waxay dammaanad ka qaadaysaa inay yeelato hal hoggaamiye wakhti kasta.

Dhexdhexaadiye

Si loo hirgeliyo habab habaysan oo la qaybiyey oo adag, iyo sidoo kale dhibaatooyinka hagaajinta qaab-dhismeedka jira, way ku habboon tahay in la isticmaalo dhexdhexaadiyeyaasha.
Si aan loo beddelin koodhka adeegga oo loo xalliyo, tusaale ahaan, dhibaatooyinka habaynta dheeriga ah, marin-u-socodka ama farriimaha qoraalka, waxaad awood u siin kartaa ilaaliye wakiil ka hor adeegga, kaas oo fulin doona dhammaan shaqada dheeraadka ah.

Tusaalaha caadiga ah ee kobcinta-sub-sub waa codsi la qaybiyey oo leh xudunta ganacsiga ee soo saarta dhacdooyinka cusboonaysiinta, sida isbeddelka qiimaha suuqa, iyo lakabka gelitaanka - N servers oo siiya websocket API macaamiisha shabakadda.
Haddii aad go'aansato madax-furasho, markaa adeegga macaamiishu waxay u egtahay sidan:

  • macmiilku waxa uu xidhiidh la samaysaa madal. Dhinaca serfarka ee joojiya taraafikada, waxa bilaabmaya hab lagu adeegayo xidhiidhkan.
  • Marka la eego habka adeegga, oggolaanshaha iyo ku-qorista cusbooneysiinta ayaa dhacda. Nidaamku wuxuu ugu yeeraa habka is-diiwaangelinta mawduucyada.
  • Marka ay dhacdo ka dhalato kernel-ka, waxaa la geeyaa hababka adeega isku xirka.

Aynu qiyaasno inaan haysano 50000 macaamiil mawduuca "warka". Macaamiisha waxaa loo qaybiyaa si siman 5 server. Natiijo ahaan, cusbooneysiin kasta, oo timaad goobta sarrifka, ayaa lagu soo celin doonaa 50000 jeer: 10000 jeer server kasta, marka loo eego tirada macaamiisha ku yaal. Ma aha qorshe aad waxtar u leh, sax?
Si xaaladda loo hagaajiyo, aan soo bandhigno wakiil magac leh oo la mid ah barta sarrifka. Diiwaan-hayaha caalamiga ah waa inuu awood u leeyahay inuu soo celiyo habka ugu dhow ee magaca, tani waa muhiim.

Aan ku billowno wakiilkan server-yada lakabka gelitaanka, iyo dhammaan geeddi-socodyadayada u adeega websocket api waa la rumeeysan doonaa, ee ma ahan meesha asalka ah ee sarifka-sub-isweydaarsiga kernel-ka. Wakiilku waxa uu ku biiraa xudunta u ah kaliya xaalad rukumo gaar ah oo waxa uu ku celceliyaa fariinta soo socota dhamaan macaamiisheeda.
Natiijo ahaan, 5 farriimo ayaa loo diri doonaa inta u dhaxaysa kernel-ka iyo server-yada, halkii ay ka ahaan lahaayeen 50000.

Dajinta iyo isu dheelitirka

Req-Resp

Hirgelinta fariimaha hadda jira, waxa jira 7 xeelado qaybinta codsi ah:

  • default. Codsiga waxaa loo diraa dhammaan kantaroolayaasha.
  • round-robin. Codsiyada waa la tiriyey oo si meerto ah ayaa loogu qaybiyaa inta u dhaxaysa kantaroolayaasha.
  • consensus. Koontaroolayaasha u adeega adeegga waxay u qaybsan yihiin hoggaamiyeyaal iyo addoomo. Codsiyada waxaa loo diraa hogaamiyaha kaliya.
  • consensus & round-robin. Kooxdu waxay leedahay hogaamiye, laakiin codsiyada waxaa loo qaybiyaa dhammaan xubnaha.
  • sticky. Shaqada xashiishku waa la xisaabiyaa waxaana loo qoondeeyaa haye gaar ah. Codsiyada xiga ee saxeexan wata ayaa isla gacanta ku haya.
  • sticky-fun. Marka la bilaabayo barta sarrifka, xisaabinta xashiishka waxay u shaqeysaa sticky dheellitirnaan.
  • fun. Si la mid ah madadaalo dhegdheg leh, adiga oo keliya ayaa sidoo kale dib u hagaajin kara, diidi kara ama ka sii wadi kara.

Istaraatiijiyada qaybinta waxaa la dejiyaa marka barta sarrifka la bilaabo.

Isku dheelitirka ka sokow, fariintu waxay kuu ogolaanaysaa inaad calaamadiso hay'adaha. Aynu eegno noocyada tags ee nidaamka:

  • Isku xirka sumadda. Waxay kuu ogolaanaysaa inaad fahanto xidhiidhka dhacdooyinka ku yimi. Waxa la adeegsadaa marka habka kontorooluhu ku xidhmo isla barta sarrifka, laakiin leh furayaal kala duwan.
  • Adeegga tag Ku ogolaadaa in aad isku gayso gacan-ku-hayayaasha kooxo hal adeeg ah oo aad balaadhiso habaynta iyo isku dheelitirka awoodaha. Qaabka req-resp, habayntu waa toosan. Waxaan codsi u direynaa barta sarrifka, ka dibna waxay u gudbisaa adeegga. Laakiin haddii aan u baahanahay inaan u kala qaybinno maamulayaasha kooxo macquul ah, ka dibna kala qaybinta waxaa lagu sameeyaa iyadoo la isticmaalayo tags. Marka la tilmaamayo summada, codsiga waxaa loo diri doonaa koox gaar ah oo kontaroolayaasha ah.
  • Codso sumad Waxay kuu ogolaanaysaa inaad kala saarto jawaabaha. Maadaama nidaamkayagu aanu isku mid ahayn, si aan uga shaqayno jawaabaha adeegga waxaanu u baahanahay inaanu awoodno inaanu qeexno RequestTag marka aanu dirayno codsi. Halkaa waxaynu ka fahmi karnaa jawaabta codsigee noo yimid.

Pub-sub

Maktabadda-sub-ka wax walba way ka yara fudud yihiin. Waxaan leenahay barta is dhaafsiga oo farriimaha la daabaco. Barta is dhaafsiga waxay u qaybisaa fariimaha dhexmara macaamiisha iska diiwaan galiyay furayaasha dariiqa ay u baahan yihiin (waxaan dhihi karnaa tani waxay la mid tahay mowduucyada).

Miisaanka iyo dulqaadka qaladka

Miisaanka nidaamka guud ahaan wuxuu ku xiran yahay heerka scalability ee lakabyada iyo qaybaha nidaamka:

  • Adeegyada waxaa la miisaamayaa iyadoo lagu daro noodhadhka dheeraadka ah ee kooxda oo leh gacan-qablayaal adeeggan. Inta lagu jiro hawlgalka tijaabada, waxaad dooran kartaa siyaasadda dheelitirka ee ugu fiican.
  • Adeegga fariimaha laftiisa ee ku jira koox gaar ah ayaa guud ahaan la miisaamaa iyada oo si gaar ah loo raray dhibcooyinka beddelka si loo kala saaro qanjidhada kooxda, ama iyada oo lagu daro hababka wakiillada meelaha gaarka ah ee kooxda.
  • Miisaanka nidaamka oo dhan sida sifo ahaan waxay ku xiran tahay dabacsanaanta dhismaha iyo awoodda isku-dhafka shakhsi ahaaneed ee isku-dhafka macquulka ah.

Guusha mashruucu inta badan waxa ay ku xidhan tahay fudaydka iyo xawliga miisaanka. Farriinta nooca ay hadda tahay ayaa la kora codsiga. Xataa haddii ay naga maqan yihiin koox ka kooban 50-60 mashiin, waxaan u adeegsan karnaa federaal. Nasiib darro, mawduuca federaalku waa ka baxsan yahay xadka qodobkan.

Boos sii qabsi

Marka la falanqeynayo isku dheelitirka culeyska, waxaan horay ugala hadalnay ka-noqoshada koontaroolayaasha adeegga. Si kastaba ha ahaatee, fariinta sidoo kale waa in la xafido. Haddii ay dhacdo in buro ama mashiinka shil dhaco, fariintu waa inay si toos ah u soo kabsato, iyo wakhtiga ugu yar ee suurtogalka ah.

Mashaariicdayda waxaan isticmaalaa qanjidhada dheeraadka ah ee qaadaya culayska haddii ay dhacdo. Erlang waxa uu leeyahay hab dhaqan qaybsan oo caadi ah oo loogu talagalay codsiyada OTP. Habka loo qaybiyay wuxuu sameeyaa soo kabashada haddii ay dhacdo guuldarro iyadoo la bilaabayo codsiga guuldaraystay ee noodhka kale ee hore loo bilaabay. Nidaamku waa daah-furan; ka dib guul-darrida, arjigu wuxuu si toos ah ugu guuraa noodhka guul-darreysiga. Waxaad ka akhrisan kartaa wax badan oo ku saabsan shaqeyntan halkan.

Wax-soo-saarka

Aan isku dayno inaan ugu yaraan qiyaas ahaan is barbar dhigno waxqabadka rabbitmq iyo fariimahayaga caadada u ah.
Waan helay natiijooyinka rasmiga ah rabbitmq tijaabinta kooxda openstack.

Faqrada 6.14.1.2.1.2.2. Dukumeentiga asalka ah wuxuu muujinayaa natiijada RPC CAST:
Qaybaha dhismaha ee codsiyada la qaybiyey. Qiyaasta labaad

Ma samayn doono wax dejin dheeraad ah kernel-ka OS ama erlang VM ka hor. Shuruudaha tijaabada:

  • erl dooro: +A1 +sbtu.
  • Tijaabada ku jirta hal noode erlang ah ayaa lagu maamulaa laptop leh i7 duug ah oo nooca gacanta ah.
  • Tijaabooyin kooxeed waxaa lagu sameeyaa server-yada leh shabakad 10G ah.
  • Koonteenarku waxa uu ku dhex socdaa weelasha wax lagu xidho. Shabakadda ku jirta qaabka NAT.

Koodhka tijaabada:

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.

Dhacdada 1: Tijaabadu waxa ay ku socotaa Laptop wata noocii hore ee mobilka ee i7. Tijaabada, fariimaha iyo adeegga waxaa lagu fuliyay hal nood oo ku jira hal weel 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)

Muuqaalka 2: 3 nodes oo ku shaqeeya mashiino kala duwan oo hoos yimaada 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)

Dhammaan kiisaska, isticmaalka CPU kama dhaafin 250%

Natiijooyinka

Waxaan rajeynayaa in wareeggani uusan u ekaan mid maskaxeed iyo waayo-aragnimadaydu waxay noqon doontaa faa'iido dhab ah labada cilmi-baarayaasha ee nidaamyada la qaybiyay iyo xirfadlayaasha kuwaas oo ku jira bilowga hore ee dhismaha naqshadaha loo qaybiyey nidaamyadooda ganacsi waxayna eegayaan Erlang / Elixir oo xiiso leh. laakiin shaki ma mudan tahay...

Sawir @chuttersnap

Isticmaalayaasha diiwaangashan oo keliya ayaa ka qaybqaadan kara sahanka. Soo gal, soo dhawoow.

Mawduucyadee ayaan si faahfaahsan uga hadlayaa qayb ka mid ah taxanaha tijaabada VTrade?

  • Aragti: Suuqyada, dalabaadka iyo waqtigooda: DAY, GTD, GTC, IOC, FOK, MOO, MOC, LOO, LOC

  • Buuga amarrada. Aragtida iyo dhaqanka hirgelinta buug kooxaysi leh

  • Sawirka ganacsiga: Ticks, baararka, xallinta. Sida loo kaydiyo iyo sida loo xabasto

  • Xafiiska dhabarka Qorshaynta iyo horumarinta. Kormeerka shaqaalaha iyo baaritaanka shilka

  • API. Aynu ogaano waxa loo baahan yahay interfaces iyo sida loo hirgeliyo

  • Kaydinta macluumaadka: PostgreSQL, Timecale, Tarantool ee nidaamyada ganacsiga

  • Falcelinta hababka ganacsiga

  • Mid kale. Waxaan ku qori doonaa faallooyinka

6 isticmaale ayaa codeeyay. 4 isticmaale ayaa ka aamusay.

Source: www.habr.com

Add a comment