Zomangamanga za ntchito zogawidwa. Kuyerekeza kwachiwiri

Kulengeza

Anzanga, pakati pa chilimwe ndikukonzekera kumasula nkhani zina zokhudzana ndi mapangidwe a mizere: "The VTrade Experiment" - kuyesa kulemba ndondomeko ya machitidwe a malonda. Zotsatizanazi ziwunika chiphunzitso ndi machitidwe opangira malonda, malonda ndi sitolo. Pamapeto pa nkhaniyi, ndikukupemphani kuti muvotere mitu yomwe imakusangalatsani kwambiri.

Zomangamanga za ntchito zogawidwa. Kuyerekeza kwachiwiri

Iyi ndiye nkhani yomaliza pamndandanda wazomwe zagawidwa ku Erlang/Elixir. MU nkhani yoyamba mutha kupeza maziko ongoyerekeza a zomangamanga zokhazikika. Nkhani yachiwiri ikuwonetsa njira zoyambira ndi njira zopangira makina otere.

Lero tikambirana za chitukuko cha code base ndi mapulojekiti ambiri.

Bungwe la mautumiki

M'moyo weniweni, popanga ntchito, nthawi zambiri mumayenera kuphatikiza njira zingapo zolumikizirana ndi wowongolera m'modzi. Mwachitsanzo, ntchito ya ogwiritsa ntchito, yomwe imathetsa vuto loyang'anira mbiri ya ogwiritsa ntchito polojekiti, iyenera kuyankha zopempha req-resp ndikuwonetsa zosintha za mbiri kudzera pa pub-sub. Mlanduwu ndi wosavuta: kumbuyo kwa mauthenga pali wolamulira m'modzi yemwe amagwiritsa ntchito malingaliro a ntchito ndikusindikiza zosintha.

Zinthu zimafika povuta kwambiri tikafunika kukhazikitsa ntchito yogawira zolakwika. Tiyerekeze kuti zofunikira kwa ogwiritsa ntchito zasintha:

  1. tsopano ntchitoyo iyenera kukonza zopempha pamagulu 5 a magulu,
  2. kukhala wokhoza kugwira ntchito zakumbuyo,
  3. ndikuthanso kuyang'anira mindandanda yolembetsa kuti musinthe mbiri yanu.

Chidziwitso: Sitiganizira za kusungidwa kosasinthasintha ndi kubwereza deta. Tiyerekeze kuti nkhanizi zathetsedwa kale ndipo dongosololi lili kale ndi malo osungira odalirika komanso owopsa, ndipo ogwira ntchito ali ndi njira zothandizira nawo.

Kufotokozera kovomerezeka kwa utumiki wa ogwiritsa ntchito kwakhala kovuta kwambiri. Kuchokera pamalingaliro a wopanga mapulogalamu, zosintha ndizochepa chifukwa chogwiritsa ntchito mauthenga. Kuti tikwaniritse chofunikira choyamba, tiyenera kukonza kusanja pa req-resp exchange point.

Zofunikira pakukonza ntchito zakumbuyo zimachitika pafupipafupi. Kwa ogwiritsa ntchito, izi zitha kukhala kuyang'ana zolemba za ogwiritsa ntchito, kukonza ma multimedia otsitsidwa, kapena kulunzanitsa deta ndi media media. maukonde. Ntchitozi ziyenera kugawidwa mwanjira ina mkati mwa gululo ndikuyang'aniridwa momwe zikuyendera. Chifukwa chake, tili ndi njira ziwiri zothetsera: gwiritsani ntchito template yogawa ntchito kuchokera m'nkhani yapitayi, kapena, ngati sizikugwirizana, lembani ndondomeko ya ntchito yomwe idzayang'anire pulosesa momwe tikufunira.

Mfundo 3 imafuna kuwonjezera kwa template ya pub-sub. Ndipo kuti tikwaniritse, mutapanga malo osinthira ma pub-sub, tifunikanso kuyambitsa woyang'anira mfundoyi mkati mwa ntchito yathu. Chifukwa chake, zimakhala ngati tikusuntha malingaliro olembetsa ndikulembetsa kuchokera pagawo la mauthenga kupita ku kukhazikitsa kwa ogwiritsa ntchito.

Chotsatira chake, kuwonongeka kwa vutoli kunasonyeza kuti kuti tikwaniritse zofunikira, tifunika kuyambitsa zochitika za 5 zautumiki pamagulu osiyanasiyana ndikupanga bungwe lowonjezera - pub-sub controller, yomwe imayang'anira kulembetsa.
Kuti mugwiritse ntchito 5, simuyenera kusintha nambala yantchito. Chinthu chokhacho chowonjezera ndikukhazikitsa malamulo ogwirizanitsa pa malo osinthanitsa, zomwe tidzakambirana pambuyo pake.
Palinso zovuta zina: woyang'anira pub-sub ndi wokonza ntchito ayenera kugwira ntchito limodzi. Apanso, ntchito yotumizira mauthenga, monga yofunikira, iyenera kupereka njira yosankha mtsogoleri.

Kusankhidwa kwa atsogoleri

M'machitidwe ogawidwa, chisankho cha atsogoleri ndi njira yokhazikitsira njira imodzi yomwe imayang'anira kugawa katundu wina.

M'machitidwe omwe sali ovomerezeka ku centralization, ma algorithms apadziko lonse ndi ogwirizana, monga paxos kapena raft, amagwiritsidwa ntchito.
Popeza kutumizirana mameseji ndi broker komanso chinthu chapakati, kumadziwa za onse oyang'anira mautumiki - atsogoleri ofuna kusankha. Mauthenga amatha kusankha mtsogoleri popanda kuvota.

Pambuyo poyambira ndikulumikiza kumalo osinthira, mautumiki onse amalandira uthenga wadongosolo #'$leader'{exchange = ?EXCHANGE, pid = LeaderPid, servers = Servers}. Ngati LeaderPid kumana ndi pid ndondomeko yamakono, imasankhidwa kukhala mtsogoleri, ndi mndandanda Servers zikuphatikizapo mfundo zonse ndi magawo awo.
Panthawiyi yatsopano ikuwonekera ndipo node yamagulu ogwira ntchito imachotsedwa, olamulira onse ogwira ntchito amalandira #'$slave_up'{exchange = ?EXCHANGE, pid = SlavePid, options = SlaveOpts} ΠΈ #'$slave_down'{exchange = ?EXCHANGE, pid = SlavePid, options = SlaveOpts} motero.

Mwanjira iyi, zigawo zonse zimadziwa zosintha zonse, ndipo gululo limatsimikizika kukhala ndi mtsogoleri m'modzi nthawi iliyonse.

Oyimira pakati

Kuti mugwiritse ntchito njira zovuta zogawanitsa, komanso pamavuto akukhathamiritsa zomangamanga zomwe zilipo, ndizosavuta kugwiritsa ntchito oyimira.
Kuti musasinthe kachidindo kautumiki ndikuthetsa, mwachitsanzo, mavuto owonjezera, mayendedwe kapena mauthenga odula mitengo, mutha kuloleza wothandizira wothandizira musanayambe ntchito, yomwe idzachita ntchito zonse zowonjezera.

Chitsanzo chapamwamba cha kukhathamiritsa kwa pub-sub ndi pulogalamu yogawidwa yokhala ndi bizinesi yomwe imapanga zochitika zatsopano, monga kusintha kwamitengo pamsika, ndi gawo lofikira - ma seva a N omwe amapereka websocket API kwa makasitomala apaintaneti.
Ngati mwasankha molunjika, ndiye kuti kasitomala akuwoneka motere:

  • kasitomala amakhazikitsa kugwirizana ndi nsanja. Kumbali ya seva yomwe imathetsa magalimoto, ndondomeko imayambitsidwa kuti igwiritse ntchito kugwirizana uku.
  • Pankhani ya ntchito, kuvomereza ndi kulembetsa zosintha kumachitika. Njirayi imayitanitsa njira yolembera mitu.
  • Chochitika chikapangidwa mu kernel, chimaperekedwa kunjira zomwe zimathandizira kulumikizana.

Tiyerekeze kuti tili ndi olembetsa 50000 pamutu wa "nkhani". Olembetsa amagawidwa mofanana pa ma seva 5. Zotsatira zake, zosintha zilizonse, zikafika pamalo osinthira, zidzasinthidwa nthawi 50000: nthawi 10000 pa seva iliyonse, malinga ndi kuchuluka kwa olembetsa. Osati chiwembu chothandiza kwambiri, chabwino?
Kuti zinthu ziyende bwino, tiyeni tidziwitse woyimira wina yemwe ali ndi dzina lofanana ndi malo osinthira. Wolembetsa dzina lapadziko lonse lapansi ayenera kubweza njira yapafupi ndi dzina, izi ndizofunikira.

Tiyeni tiyambitse projekitiyi pa ma seva osanjikiza, ndipo njira zathu zonse zomwe timagwiritsa ntchito websocket api zidzalembetsa, osati kumalo osinthira a pub-sub mu kernel. Proxy imalembetsa pachimake pokhapokha ngati mukulembetsa kwapadera ndikubwereza uthenga womwe ukubwera kwa onse olembetsa.
Zotsatira zake, mauthenga a 5 adzatumizidwa pakati pa kernel ndi ma seva ofikira, m'malo mwa 50000.

Njira ndi kusanja

Req-Resp

Pakukhazikitsa kwaposachedwa kwa mauthenga, pali njira 7 zogawa zopempha:

  • default. Pempho litumizidwa kwa olamulira onse.
  • round-robin. Zopempha zimawerengedwa ndikugawidwa mozungulira pakati pa owongolera.
  • consensus. Olamulira omwe amatumikira ntchitoyi amagawidwa kukhala atsogoleri ndi akapolo. Zopempha zimatumizidwa kwa mtsogoleri yekha.
  • consensus & round-robin. Gululi lili ndi mtsogoleri, koma zopempha zimagawidwa pakati pa mamembala onse.
  • sticky. Ntchito ya hashi imawerengedwa ndikupatsidwa kwa wothandizira wina. Zopempha zotsatila ndi siginecha iyi zimapita kwa wothandizira yemweyo.
  • sticky-fun. Mukayambitsa malo osinthira, ntchito yowerengera hashi sticky kusanja.
  • fun. Zofanana ndi zomata-zosangalatsa, inu nokha mungathe kuzilozeranso, kuzikana kapena kuzikonza.

Njira yogawa imayikidwa pamene malo osinthanitsa ayambika.

Kuphatikiza pa kusanja, mauthenga amakulolani kuti mulembe mabungwe. Tiyeni tiwone mitundu ya ma tag mu dongosolo:

  • Tagi yolumikizira. Zimakuthandizani kuti mumvetsetse momwe zochitikazo zidachitikira. Amagwiritsidwa ntchito ngati njira yowongolera ikulumikizana ndi malo omwewo, koma ndi makiyi osiyanasiyana.
  • Chizindikiro cha utumiki. Zimakulolani kuti muphatikize zogwirira ntchito m'magulu a ntchito imodzi ndikukulitsa luso la mayendedwe ndi kusanja. Kwa req-resp pattern, mayendedwe ndi mzere. Timatumiza pempho kumalo osinthira, kenako amawapereka ku utumiki. Koma ngati tifunika kugawaniza owongolera m'magulu omveka, ndiye kuti kugawa kumapangidwa pogwiritsa ntchito ma tag. Pofotokoza tag, pempholo lidzatumizidwa ku gulu linalake la olamulira.
  • Funsani tag. Amakulolani kusiyanitsa pakati pa mayankho. Popeza dongosolo lathu ndi lofanana, kuti tigwiritse ntchito mayankho a ntchito tiyenera kufotokozera RequestTag potumiza pempho. Kuchokera pamenepo tidzatha kumvetsetsa yankho lomwe pempho lidabwera kwa ife.

Pub-sub

Kwa pub-sub chilichonse ndi chosavuta pang'ono. Tili ndi malo osinthira pomwe mauthenga amasindikizidwa. Malo osinthanitsa amagawira mauthenga pakati pa olembetsa omwe adalembetsa makiyi omwe amawafuna (tikhoza kunena kuti izi ndi zofanana ndi mitu).

Scalability ndi kulolerana zolakwa

The scalability dongosolo lonse zimatengera mlingo wa scalability zigawo ndi zigawo zikuluzikulu za dongosolo:

  • Ntchito zimakulitsidwa powonjezera ma node owonjezera kumagulu omwe ali ndi othandizira pa ntchitoyi. Pa ntchito mayesero, mukhoza kusankha mulingo woyenera kwambiri kugwirizanitsa mfundo.
  • Ntchito yotumizirana mauthenga payokha mkati mwa gulu lapadera nthawi zambiri imakulitsidwa mwina posuntha malo osinthitsa odzaza kwambiri kuti asiyanitse ma cluster node, kapena powonjezera ma proxy kumadera odzaza kwambiri amgululo.
  • The scalability wa dongosolo lonse monga khalidwe zimadalira kusinthasintha kwa zomangamanga ndi luso kuphatikiza masango munthu wamba zomveka gulu.

Kupambana kwa polojekiti nthawi zambiri kumadalira kuphweka komanso kuthamanga kwa makulitsidwe. Kutumiza mauthenga mu mtundu wake wamakono kumakula limodzi ndi kugwiritsa ntchito. Ngakhale titasowa gulu la makina 50-60, titha kutembenukira ku federal. Tsoka ilo, mutu wachitaganya uli wopitilira muyeso wa nkhaniyi.

Kusungitsa

Posanthula kuchuluka kwa katundu, tidakambirana kale za redundancy of controller service. Komabe, mauthenga ayeneranso kusungidwa. Kukachitika kuti node kapena makina awonongeka, mauthenga amayenera kuyambiranso, komanso munthawi yochepa kwambiri.

M'mapulojekiti anga ndimagwiritsa ntchito ma node owonjezera omwe amanyamula katundu ngati atagwa. Erlang ali ndi njira yogawa yogawa pamapulogalamu a OTP. Distributed mode imachira ngati yalephera poyambitsa pulogalamu yolephera pa node ina yomwe idayambitsidwa kale. Njirayi ndi yowonekera; ikalephera, ntchitoyo imasunthira ku node ya failover. Mukhoza kuwerenga zambiri za ntchitoyi apa.

Kukonzekera

Tiyeni tiyese kufanizitsa kachitidwe ka rabbitmq ndi mauthenga athu achizolowezi.
Ndapeza zotsatira zovomerezeka kuyesa kwa rabbitmq kuchokera ku gulu la openstack.

M'ndime 6.14.1.2.1.2.2. Chikalata choyambirira chikuwonetsa zotsatira za RPC CAST:
Zomangamanga za ntchito zogawidwa. Kuyerekeza kwachiwiri

Sitipanga zina zowonjezera ku OS kernel kapena erlang VM pasadakhale. Zoyenera kuyesa:

  • erl kusankha: +A1 +sbtu.
  • Kuyesa mkati mwa erlang node imodzi kumayendetsedwa pa laputopu yokhala ndi i7 yakale mumtundu wamafoni.
  • Mayesero a magulu amachitidwa pa ma seva omwe ali ndi netiweki ya 10G.
  • Khodiyo imayenda muzotengera za docker. Network mu NAT mode.

Mayeso kodi:

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.

Chitsanzo 1: Mayesowa amayendetsedwa pa laputopu yokhala ndi mtundu wakale wa i7. Kuyesa, kutumizirana mameseji ndi ntchito zimachitidwa pa node imodzi mumtsuko umodzi wa 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)

Nkhani 2: Node 3 zomwe zikuyenda pamakina osiyanasiyana pansi pa 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)

Nthawi zonse, kugwiritsa ntchito CPU sikunapitirire 250%

Zotsatira

Ndikukhulupirira kuti kuzunguliraku sikukuwoneka ngati kutayirapo malingaliro ndipo zomwe ndakumana nazo zidzakhala zopindulitsa kwenikweni kwa onse ofufuza a machitidwe ogawidwa ndi akatswiri omwe ali pachiyambi pomwe amamanga nyumba zomangira zamabizinesi awo ndipo akuyang'ana Erlang/Elixir ndi chidwi. , koma dziwani kuti ndizoyenera ...

chithunzi @chuttersnap

Ogwiritsa ntchito olembetsedwa okha ndi omwe angatenge nawo gawo pa kafukufukuyu. Lowani muakauntichonde.

Ndi mitu iti yomwe ndiyenera kulongosola mwatsatanetsatane ngati gawo la VTrade Experiment?

  • Chiphunzitso: Misika, maoda ndi nthawi yake: TSIKU, GTD, GTC, IOC, FOK, MOO, MOC, LOO, LOC

  • Buku la malamulo. Lingaliro ndi machitidwe ogwiritsira ntchito buku ndi magulu

  • Kuwona malonda: nkhupakupa, mipiringidzo, malingaliro. Momwe mungasungire ndi kumata

  • Ofesi yakumbuyo. Kukonzekera ndi chitukuko. Kuwunika kwa ogwira ntchito ndi kufufuza zochitika

  • API. Tiyeni tiwone zomwe ma interfaces amafunikira komanso momwe angawagwiritsire ntchito

  • Kusungirako zidziwitso: PostgreSQL, Timescale, Tarantool mumayendedwe azamalonda

  • Reactivity mu malonda machitidwe

  • Zina. Ndilemba mu ndemanga

Ogwiritsa ntchito 6 adavota. Ogwiritsa 4 adakana.

Source: www.habr.com

Kuwonjezera ndemanga