Li-block tsa lisebelisoa tse ajoang. Khakanyo ea bobeli

Phatlalatso

Basebetsi-'moho le 'na, bohareng ba lehlabula ke rera ho lokolla letoto le leng la lihlooho tse mabapi le moralo oa litsamaiso tsa queuing: "Teko ea VTrade" - teko ea ho ngola moralo oa mekhoa ea khoebo. Letoto lena le tla hlahloba mohopolo le tloaelo ea ho aha phapanyetsano, fantisi le lebenkele. Qetellong ea sengoloa, ke u memela ho voutela lihlooho tse u khahlang haholo.

Li-block tsa lisebelisoa tse ajoang. Khakanyo ea bobeli

Ena ke sengoloa sa ho qetela letotong la lits'ebetso tse abuoang tse sebetsang ho Erlang/Elixir. IN sehlooho sa pele o ka fumana metheo ea theory ea meralo e sebetsang. Sehlooho sa bobeli e bonts'a mekhoa ea mantlha le mekhoa ea ho aha litsamaiso tse joalo.

Kajeno re tla hlahisa litaba tsa nts'etsopele ea motheo oa khoutu le merero ka kakaretso.

Mokhatlo oa litšebeletso

Bophelong ba 'nete, ha u theha tšebeletso, hangata u tlameha ho kopanya mekhoa e mengata ea ho sebelisana ho molaoli a le mong. Mohlala, ts'ebeletso ea basebelisi, e rarollang bothata ba ho laola profaele ea basebelisi ba projeke, e tlameha ho arabela likopo tsa req-resp le ho tlaleha lintlafatso tsa profil ka pub-sub. Nyeoe ena e bonolo haholo: ka morao ho melaetsa ho na le molaoli a le mong ea sebelisang mohopolo oa litšebeletso le ho phatlalatsa lintlafatso.

Boemo bo thatafala le ho feta ha re hloka ho kenya ts'ebetsong ts'ebeletso e ajoang e mamellang liphoso. Ha re nahane hore litlhoko tsa basebelisi li fetohile:

  1. joale ts'ebeletso e lokela ho sebetsana le likopo ho li-cluster node tse 5,
  2. khona ho etsa mesebetsi ea morao-rao ea ts'ebetso,
  3. hape o tsebe ho laola ka matla manane a ngoliso bakeng sa liapdeite tsa profil.

Tlhaloso: Ha re nahane ka taba ea polokelo e tsitsitseng le ho pheta-pheta ha data. A re nke hore litaba tsena li rarollotsoe pejana 'me tsamaiso e se e ntse e e-na le sebaka se ka tšeptjoang le se tsitsitseng sa polokelo,' me ba sebetsang ba na le mekhoa ea ho sebelisana le eona.

Tlhaloso e hlophisitsoeng ea tšebeletso ea basebelisi e fetohile e rarahaneng le ho feta. Ho ea ka pono ea moetsi oa mananeo, liphetoho li fokola haholo ka lebaka la tšebeliso ea melaetsa. Ho khotsofatsa tlhoko ea pele, re hloka ho hlophisa ho leka-lekanya sebakeng sa phapanyetsano ea req-resp.

Tlhokahalo ea ho sebetsana le mesebetsi e ka morao e etsahala khafetsa. Ho basebelisi, sena e ka ba ho hlahloba litokomane tsa basebelisi, ho sebetsana le multimedia e jarollotsoeng, kapa ho hokahanya data le mecha ea litaba ea sechaba. marangrang. Mesebetsi ena e tlameha ho aroloa ka har'a sehlopha 'me ho behoe leihlo tsoelo-pele ea ts'ebetso. Ka hona, re na le likhetho tse peli tsa tharollo: sebelisa template ea kabo ea mosebetsi ho tsoa sengoloa se fetileng, kapa, haeba e sa lumellane, ngola kemiso ea mesebetsi e tla tsamaisa letamo la li-processor ka tsela eo re e hlokang.

Ntlha ea 3 e hloka katoloso ea template ea pub-sub. 'Me bakeng sa ts'ebetsong, ka mor'a ho theha sebaka sa phapanyetsano ea li-pub-sub, re hloka ho kenyelletsa molaoli oa ntlha ena ka har'a tšebeletso ea rona. Kahoo, ho joalokaha eka re tsamaisa mohopolo oa ho sebetsana le lipeeletso le ho itokolla ho tloha mothalong oa melaetsa ho kenya ts'ebetsong ea basebelisi.

Ka lebaka leo, ho senyeha ha bothata ho bontšitse hore e le hore re finyelle litlhoko, re lokela ho qala liketsahalo tse 5 tsa tšebeletso ka li-node tse fapaneng le ho theha mokhatlo o eketsehileng - molaoli oa li-pub, ea ikarabellang bakeng sa ho ngolisa.
Ho tsamaisa li- handlers tse 5, ha ho hlokahale hore u fetole khoutu ea tšebeletso. Ketso e le 'ngoe feela e eketsehileng ke ho theha melao ea ho leka-lekanya sebakeng sa phapanyetsano, eo re tla bua ka eona hamorao.
Ho boetse ho na le bothata bo bong hape: molaoli oa li-pub-sub le kemiso ea mesebetsi ea tloaelo e tlameha ho sebetsa ka kopi e le 'ngoe. Hape, ts'ebeletso ea melaetsa, joalo ka ea mantlha, e tlameha ho fana ka mokhoa oa ho khetha moetapele.

Khetho ea moetapele

Litsamaisong tse ajoang, likhetho tsa baetapele ke mokhoa oa ho khetha ts'ebetso e le 'ngoe e ikarabellang bakeng sa ho hlophisa ts'ebetso e ajoang ea mojaro o mong.

Litsamaisong tse sa tloaelehang ho centralization, ho sebelisoa li-algorithms tsa bokahohleng le tsa tumellano, tse kang paxos kapa raft.
Kaha melaetsa ke morekisi ebile ke karolo ea mantlha, e tseba ka balaoli bohle ba lits'ebeletso - baetapele ba likhetho. Melaetsa e ka khetha moetapele ntle le ho vouta.

Kamora ho qala le ho hokela sebakeng sa phapanyetsano, lits'ebeletso tsohle li fumana molaetsa oa sistimi #'$leader'{exchange = ?EXCHANGE, pid = LeaderPid, servers = Servers}. Haeba LeaderPid e tsamaellana le pid ts'ebetso ea hajoale, e khethoa e le moetapele, le lethathamo Servers e kenyelletsa li-node tsohle le li-parameter tsa tsona.
Ka nako eo e ncha e hlaha 'me node ea lihlopha e sebetsang e khaotsoe, balaoli bohle ba litšebeletso ba fumana #'$slave_up'{exchange = ?EXCHANGE, pid = SlavePid, options = SlaveOpts} и #'$slave_down'{exchange = ?EXCHANGE, pid = SlavePid, options = SlaveOpts} ho latela.

Ka tsela ena, likarolo tsohle li tseba liphetoho tsohle, 'me sehlopha se tiisitsoe ho ba le moetapele a le mong ka nako efe kapa efe.

Balamelli

Ho kenya ts'ebetsong mekhoa e rarahaneng ea ts'ebetso e abuoang, hammoho le mathateng a ho ntlafatsa meralo e teng, ho bonolo ho sebelisa li-intermediaries.
E le hore u se ke ua fetola khoutu ea tšebeletso le ho rarolla, ka mohlala, mathata a ts'ebetso e eketsehileng, ho tsamaisa melaetsa kapa melaetsa ea ho rema lifate, u ka nolofalletsa moemeli oa proxy pele ho ts'ebeletso, e tla etsa mosebetsi oohle o eketsehileng.

Mohlala oa khale oa pub-sub optimization ke ts'ebeliso e ajoang e nang le setsi sa khoebo se hlahisang liketsahalo tsa ntlafatso, joalo ka ho fetoha ha litheko 'marakeng, le karolo ea phihlello - Li-server tsa N tse fanang ka websocket API bakeng sa bareki ba inthaneteng.
Haeba u etsa qeto ka hlooho, tšebeletso ea bareki e shebahala tjena:

  • moreki o theha likhokahano le sethala. Ka lehlakoreng la seva e felisang sephethephethe, ho qalisoa mokhoa oa ho sebeletsa khokahanyo ena.
  • Boemong ba ts'ebetso ea ts'ebeletso, tumello le ho ngolisa ho lintlafatso li etsahala. Ts'ebetso e bitsa mokhoa oa ho ingolisa bakeng sa lihlooho.
  • Hang ha ketsahalo e hlahisoa ka har'a kernel, e isoa lits'ebetsong tse sebeletsang likhokahano.

Ha re nahane hore re na le ba ngolisitseng ba 50000 sehloohong sa "litaba". Ba ngolisitseng ba ajoa ka ho lekana ho li-server tse 5. Ka lebaka leo, ntjhafatso e 'ngoe le e' ngoe, e fihlang sebakeng sa phapanyetsano, e tla phetoa makhetlo a 50000: makhetlo a 10000 ho seva ka seng, ho latela palo ea ba ngolisitseng ho eona. Ha se morero o sebetsang haholo, na?
Ho ntlafatsa maemo, a re ke re tsebiseng moemeli ea nang le lebitso le tšoanang le la phapanyetsano. Mongolisi oa mabitso oa lefats'e o tlameha ho khona ho khutlisa ts'ebetso e haufi ka ho fetisisa ka mabitso, sena ke sa bohlokoa.

Ha re hlahise proxy ena ho li-server tsa marang-rang, 'me lits'ebetso tsohle tsa rona tse sebeletsang websocket api li tla ingolisa ho eona, eseng sebakeng sa pele sa phapanyetsano ea pub-sub kernel. Proxy e ingolisa ho mantlha feela molemong oa peeletso e ikhethang mme e pheta molaetsa o kenang ho bohle ba o ngolisitseng.
Ka lebaka leo, melaetsa e 5 e tla romelloa lipakeng tsa kernel le li-server tsa phihlello, ho fapana le 50000.

Ho tsamaisa le ho leka-lekanya

Req-Resp

Ts'ebetsong ea hona joale ea melaetsa, ho na le maano a 7 a ho aba likopo:

  • default. Kopo e romelloa ho balaoli bohle.
  • round-robin. Likopo lia baloa 'me li ajoa lipakeng tsa balaoli.
  • consensus. Balaoli ba sebeletsang tšebeletso ba arotsoe ka baetapele le makhoba. Likōpo li romeloa feela ho moetapele.
  • consensus & round-robin. Sehlopha se na le moetapele, empa likopo li ajoa har'a litho tsohle.
  • sticky. Mosebetsi oa hash o baloa mme o abeloa mohlokomeli ea itseng. Likopo tse latelang tse nang le tekeno ena li ea ho motho ea ts'oanang.
  • sticky-fun. Ha o qala sebaka sa phapanyetsano, mosebetsi oa ho bala hash bakeng sa sticky ho leka-lekanya.
  • fun. Joalo ka ho ithabisa, ke uena feela ea ka e tsamaisang, ho e hana kapa ho e lokisa esale pele.

Leano la kabo le behiloe ha ntlha ea phapanyetsano e qalisoa.

Ntle le ho leka-lekanya, melaetsa e u lumella ho tšoaea mekhatlo. Ha re shebeng mefuta ea li-tag tsamaisong:

  • Tag ea khokahano. E u lumella ho utloisisa hore na liketsahalo li tlile ka tsela efe. E sebelisoa ha mokhoa oa molaoli o hokahana sebakeng se le seng sa phapanyetsano, empa ka linotlolo tse fapaneng tsa ho tsamaisa.
  • Letšoao la tšebeletso. E o lumella ho kopanya litšoantšiso ka lihlopha bakeng sa ts'ebeletso e le 'ngoe le ho holisa bokhoni ba ho tsamaisa le ho leka-lekanya. Bakeng sa paterone ea req-resp, routing e mela. Re romela kopo sebakeng sa phapanyetsano, ebe e e fetisetsa tšebeletsong. Empa haeba re hloka ho arola bahlokomeli ka lihlopha tse utloahalang, joale ho arohana ho etsoa ka li-tag. Ha o hlakisa tag, kopo e tla romelloa ho sehlopha se itseng sa balaoli.
  • Kopa tag. E u lumella ho khetholla pakeng tsa likarabo. Kaha tsamaiso ea rona ha e lumellane, ho sebetsana le likarabo tsa litšebeletso re hloka ho tseba ho hlalosa RequestTag ha re romela kopo. Ho eona re tla khona ho utloisisa karabo eo kopo e tlileng ho rona.

Pub-sub

Bakeng sa li-pub-sub ntho e 'ngoe le e' ngoe e bonolo haholoanyane. Re na le sebaka sa phapanyetsano moo melaetsa e hatisoang teng. Sebaka sa phapanyetsano se aba melaetsa har'a ba ngolisitseng ba ngolisitseng linotlolo tsa ho tsamaisa tseo ba li hlokang (re ka re sena se tšoana le lihlooho).

Scalability le mamello ea liphoso

Scalability ea sistimi ka kakaretso e ipapisitse le boemo ba scalability ea likarolo le likarolo tsa sistimi:

  • Litšebeletso li atolosoa ka ho kenyelletsa li-node tse eketsehileng sehlopheng se nang le batšoasi ba ts'ebeletso ena. Nakong ea ts'ebetso ea teko, o ka khetha leano le nepahetseng la ho leka-lekanya.
  • Ts'ebeletso ea melaetsa ka boyona ka har'a sehlopha se arohaneng hangata e atolosoa ka ho tsamaisa libaka tsa phapanyetsano tse laetsoeng ho ea ho li-cluster tse arohaneng, kapa ka ho kenyelletsa lits'ebetso tsa proxy libakeng tse ngata haholo tsa sehlopha.
  • The scalability ea tsamaiso eohle e le tšobotsi e itšetlehile ka ho feto-fetoha ha mohaho le bokhoni ba ho kopanya lihlopha tsa batho ka bomong ho ba ntho e tloaelehileng e utloahalang.

Hangata katleho ea morero e itšetlehile ka bonolo le lebelo la ho eketsa. Melaetsa phetolelong ea eona ea hajoale e ntse e hola hammoho le ts'ebeliso. Leha re haelloa ke sehlopha sa mechini ea 50-60, re ka fetohela ho federation. Ka bomalimabe, sehlooho sa federation se ka holimo ho sebaka sa sengoloa sena.

Peeletso

Ha re hlahloba ho leka-lekanya mojaro, re se re buisane ka khaello ea mesebetsi ea balaoli ba litšebeletso. Leha ho le joalo, melaetsa le eona e tlameha ho bolokoa. Ha ho na le node kapa mochine o oang, melaetsa e lokela ho hlaphoheloa ka bo eona, 'me ka nako e khutšoanyane ka ho fetisisa.

Mererong ea ka ke sebelisa li-node tse eketsehileng tse nkang mojaro haeba ho oa. Erlang e na le mokhoa o tloaelehileng oa ho kenya ts'ebetsong bakeng sa lits'ebetso tsa OTP. Distributed mode e etsa ho hlaphoheloa ha ho ka etsahala hore e hlolehe ka ho qala kopo e hlōlehileng ho node e 'ngoe e qalileng pele. Ts'ebetso e pepeneneng; kamora ho hloleha, kopo e itsamaela ka bo eona ho node ea failover. U ka bala haholoanyane ka ts'ebetso ena mona.

Tlhahiso

Ha re leke bonyane ho bapisa ts'ebetso ea rabbitmq le melaetsa ea rona ea tloaelo.
Ke fumane liphetho tsa semmuso tlhahlobo ea rabbitmq ho tsoa sehlopheng sa openstack.

Serapeng sa 6.14.1.2.1.2.2. Tokomane ea mantlha e bonts'a sephetho sa RPC CAST:
Li-block tsa lisebelisoa tse ajoang. Khakanyo ea bobeli

Re ke ke ra etsa litlhophiso life kapa life tse ling ho OS kernel kapa erlang VM esale pele. Maemo a tlhahlobo:

  • erl opts: +A1 +sbtu.
  • Teko ka har'a node e le 'ngoe ea erlang e tsamaisoa ho laptop e nang le i7 ea khale ea mofuta oa mobile.
  • Liteko tsa lihlopha li etsoa ho li-server tse nang le marang-rang a 10G.
  • Khoutu e sebetsa ka har'a lijana tsa docker. Marang-rang ka mokhoa oa NAT.

Khouto ea teko:

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.

Boemo ba 1: Teko e etsoa ho laptop e nang le mofuta oa khale oa mohala oa i7. Teko, melaetsa le ts'ebeletso li etsoa sebakeng se le seng ka sejaneng se le seng sa 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)

Boemo 2: Li-node tse 3 tse sebetsang ka mechini e fapaneng tlasa 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)

Maemong 'ohle, ts'ebeliso ea CPU ha ea ka ea feta 250%

Liphello

Ke tšepa hore potoloho ena ha e shebahale eka ke thotobolo ea kelello 'me phihlelo ea ka e tla ba molemo oa sebele ho bafuputsi ba litsamaiso tse ajoang le litsebi tse qalong ea ho haha ​​​​meaho e ajoang bakeng sa litsamaiso tsa bona tsa khoebo mme ba shebile Erlang/Elixir ka thahasello. , empa e-ba le lipelaelo na ho loketse...

foto @chuttersnap

Ke basebelisi ba ngolisitsoeng feela ba ka kenyang letsoho phuputsong. kenaka kopo.

Ke lihlooho life tseo ke lokelang ho li bua ka botlalo joalo ka karolo ea letoto la liteko tsa VTrade?

  • Khopolo: Limmaraka, liodara le nako ea tsona: LETSATSI, GTD, GTC, IOC, FOK, MOO, MOC, LOO, LOC

  • Buka ea litaelo. Khopolo le tloaelo ea ho kenya tšebetsong buka ka lihlopha

  • Pono ea khoebo: Liboseleise, mekoallo, liqeto. Mokhoa oa ho boloka le mokhoa oa ho khomarela

  • Ofisi e ka morao. Moralo le ntshetsopele. Tlhokomelo ea basebetsi le lipatlisiso tsa liketsahalo

  • API. Ha re boneng hore na ho hlokahala li-interfaces life le hore na re ka li kenya ts'ebetsong joang

  • Polokelo ea tlhahisoleseling: PostgreSQL, Timescale, Tarantool lits'ebetsong tsa khoebo

  • Reactivity ka mekhoa ea khoebo

  • Tse ding. Ke tla ngola litlhalosong

Basebelisi ba 6 ba ile ba khetha. Basebelisi ba 4 ba hanne.

Source: www.habr.com

Eketsa ka tlhaloso