Awọn bulọọki ile ti awọn ohun elo ti a pin. Isunmọ keji

Ikede

Awọn ẹlẹgbẹ, ni aarin-ooru Mo gbero lati tusilẹ lẹsẹsẹ awọn nkan miiran lori apẹrẹ ti awọn eto isinyi: “Ayẹwo VTrade” - igbiyanju lati kọ ilana kan fun awọn eto iṣowo. Awọn jara yoo ṣe ayẹwo ilana ati adaṣe ti kikọ paṣipaarọ, titaja ati ile itaja. Ni ipari nkan naa, Mo pe ọ lati dibo fun awọn akọle ti o nifẹ si julọ.

Awọn bulọọki ile ti awọn ohun elo ti a pin. Isunmọ keji

Eyi ni nkan ikẹhin ninu jara lori awọn ohun elo ifaseyin pinpin ni Erlang/Elixir. IN akọkọ article o le wa awọn ipilẹ tumq si ti ifaseyin faaji. Abala keji ṣe apejuwe awọn ilana ipilẹ ati awọn ilana fun kikọ iru awọn ọna ṣiṣe.

Loni a yoo gbe awọn ọran ti idagbasoke ti ipilẹ koodu ati awọn iṣẹ akanṣe ni apapọ.

Ajo ti awọn iṣẹ

Ni igbesi aye gidi, nigba idagbasoke iṣẹ kan, o nigbagbogbo ni lati darapọ ọpọlọpọ awọn ilana ibaraenisepo ni oludari kan. Fun apẹẹrẹ, iṣẹ olumulo, eyiti o yanju iṣoro ti iṣakoso awọn profaili olumulo ise agbese, gbọdọ dahun si awọn ibeere req-resp ati jabo awọn imudojuiwọn profaili nipasẹ pub-sub. Ọran yii jẹ ohun rọrun: lẹhin fifiranṣẹ oludari kan wa ti o ṣe adaṣe ọgbọn iṣẹ ati ṣe atẹjade awọn imudojuiwọn.

Ipo naa ni idiju diẹ sii nigba ti a nilo lati ṣe imuse iṣẹ-ipinnu ọlọdun ẹbi kan. Jẹ ki a fojuinu pe awọn ibeere fun awọn olumulo ti yipada:

  1. bayi iṣẹ yẹ ki o ṣe ilana awọn ibeere lori awọn apa iṣupọ 5,
  2. ni anfani lati ṣe awọn iṣẹ ṣiṣe ṣiṣe lẹhin,
  3. ati tun ni anfani lati ṣakoso awọn atokọ ṣiṣe alabapin ni agbara fun awọn imudojuiwọn profaili.

Akiyesi: A ko ṣe akiyesi ọran ti ibi ipamọ deede ati ẹda data. Jẹ ki a ro pe awọn ọran wọnyi ti ni ipinnu ni iṣaaju ati pe eto naa ti ni aaye ipamọ ti o gbẹkẹle ati iwọn, ati awọn oluṣakoso ni awọn ilana lati ṣe ajọṣepọ pẹlu rẹ.

Apejuwe deede ti iṣẹ olumulo ti di idiju diẹ sii. Lati wiwo olupilẹṣẹ, awọn ayipada kere nitori lilo fifiranṣẹ. Lati ni itẹlọrun ibeere akọkọ, a nilo lati tunto iwọntunwọnsi ni aaye paṣipaarọ req-resp.

Ibeere lati ṣe ilana awọn iṣẹ-ṣiṣe lẹhin waye nigbagbogbo. Ninu awọn olumulo, eyi le jẹ ṣiṣayẹwo awọn iwe aṣẹ olumulo, sisẹ multimedia ti a ṣe igbasilẹ, tabi mimuuṣiṣẹpọ data pẹlu media awujọ. awọn nẹtiwọki. Awọn iṣẹ-ṣiṣe wọnyi nilo lati pin kaakiri laarin iṣupọ ati ilọsiwaju ti ṣiṣe abojuto. Nitorinaa, a ni awọn aṣayan ojutu meji: boya lo awoṣe pinpin iṣẹ-ṣiṣe lati inu nkan ti tẹlẹ, tabi, ti ko ba baamu, kọ oluṣeto iṣẹ-ṣiṣe aṣa ti yoo ṣakoso adagun ti awọn ilana ni ọna ti a nilo.

Ojuami 3 nbeere itẹsiwaju awoṣe-ọti-iha. Ati fun imuse, lẹhin ṣiṣẹda aaye paṣipaarọ pub-sub, a nilo lati ṣe ifilọlẹ oludari aaye yii ni afikun laarin iṣẹ wa. Nitorinaa, o dabi ẹni pe a n gbe ọgbọn-ọrọ fun ṣiṣe awọn ṣiṣe alabapin ati yọkuro kuro ni ipele fifiranṣẹ sinu imuse awọn olumulo.

Bi abajade, ibajẹ ti iṣoro naa fihan pe lati le pade awọn ibeere, a nilo lati ṣe ifilọlẹ awọn iṣẹlẹ 5 ti iṣẹ naa lori awọn apa oriṣiriṣi ati ṣẹda ohun elo afikun - oluṣakoso ile-ọti, lodidi fun ṣiṣe alabapin.
Lati ṣiṣẹ awọn olutọju 5, iwọ ko nilo lati yi koodu iṣẹ pada. Iṣe afikun nikan ni iṣeto awọn ofin iwọntunwọnsi ni aaye paṣipaarọ, eyiti a yoo sọrọ nipa diẹ diẹ nigbamii.
Idiju afikun tun wa: oludari ile-ọti ati oluṣeto iṣẹ-ṣiṣe aṣa gbọdọ ṣiṣẹ ni ẹda kan. Lẹẹkansi, iṣẹ fifiranṣẹ, gẹgẹbi ipilẹ kan, gbọdọ pese ẹrọ kan fun yiyan adari kan.

Aṣayan olori

Ninu awọn eto pinpin, idibo oludari jẹ ilana fun yiyan ilana kan ṣoṣo ti o ni iduro fun ṣiṣe eto sisẹ pinpin ti diẹ ninu awọn ẹru.

Ninu awọn eto ti ko ni itara si isọdọkan, gbogbo agbaye ati awọn algoridimu ti o da lori ipohunpo, gẹgẹbi paxos tabi raft, ni a lo.
Niwọn igba ti fifiranṣẹ jẹ alagbata ati ipin aringbungbun, o mọ nipa gbogbo awọn oludari iṣẹ - awọn oludari oludije. Fifiranṣẹ le yan olori laisi idibo.

Lẹhin ti o bẹrẹ ati sisopọ si aaye paṣipaarọ, gbogbo awọn iṣẹ gba ifiranṣẹ eto kan #'$leader'{exchange = ?EXCHANGE, pid = LeaderPid, servers = Servers}. Ti o ba jẹ LeaderPid ni ibamu pẹlu pid lọwọlọwọ ilana, o ti wa ni yàn bi olori, ati awọn akojọ Servers pẹlu gbogbo awọn apa ati awọn aye wọn.
Ni akoko tuntun kan yoo han ati pe ipade iṣupọ ti n ṣiṣẹ ti ge asopọ, gbogbo awọn oludari iṣẹ gba #'$slave_up'{exchange = ?EXCHANGE, pid = SlavePid, options = SlaveOpts} и #'$slave_down'{exchange = ?EXCHANGE, pid = SlavePid, options = SlaveOpts} awọn atẹle.

Ni ọna yii, gbogbo awọn paati mọ gbogbo awọn iyipada, ati pe iṣupọ naa ni iṣeduro lati ni oludari kan ni akoko eyikeyi.

Awọn agbedemeji

Lati ṣe awọn ilana iṣelọpọ pinpin eka, ati ni awọn iṣoro ti iṣapeye faaji ti o wa tẹlẹ, o rọrun lati lo awọn agbedemeji.
Ni ibere ki o má ṣe yi koodu iṣẹ pada ki o yanju, fun apẹẹrẹ, awọn iṣoro ti afikun sisẹ, ipa-ọna tabi awọn ifiranṣẹ iwọle, o le mu olutọju aṣoju ṣiṣẹ ṣaaju iṣẹ naa, eyi ti yoo ṣe gbogbo iṣẹ afikun.

Apeere Ayebaye ti iṣapeye-ọti-ọti jẹ ohun elo pinpin pẹlu ipilẹ iṣowo ti o ṣe agbekalẹ awọn iṣẹlẹ imudojuiwọn, gẹgẹbi awọn iyipada idiyele ni ọja, ati ipele iwọle – Awọn olupin N ti o pese API websocket kan fun awọn alabara wẹẹbu.
Ti o ba pinnu ni iwaju, lẹhinna iṣẹ alabara dabi eyi:

  • onibara ṣeto awọn asopọ pẹlu Syeed. Ni ẹgbẹ ti olupin ti o fopin si ijabọ, ilana kan ti ṣe ifilọlẹ lati ṣe iṣẹ asopọ yii.
  • Ni ipo ti ilana iṣẹ, aṣẹ ati ṣiṣe alabapin si awọn imudojuiwọn waye. Ilana naa n pe ọna alabapin fun awọn koko-ọrọ.
  • Ni kete ti iṣẹlẹ kan ba ti ipilẹṣẹ ninu ekuro, o ti jiṣẹ si awọn ilana ti n ṣiṣẹ awọn asopọ.

Jẹ ki a fojuinu pe a ni awọn alabapin 50000 si koko-ọrọ “iroyin”. Awọn alabapin ti pin boṣeyẹ kọja awọn olupin 5. Bi abajade, imudojuiwọn kọọkan, ti o de ni aaye paṣipaarọ, yoo tun ṣe awọn akoko 50000: awọn akoko 10000 lori olupin kọọkan, ni ibamu si nọmba awọn alabapin lori rẹ. Kii ṣe ero ti o munadoko pupọ, otun?
Lati mu ipo naa dara, jẹ ki a ṣafihan aṣoju kan ti o ni orukọ kanna bi aaye paṣipaarọ. Alakoso orukọ agbaye gbọdọ ni anfani lati da ilana ti o sunmọ julọ pada nipasẹ orukọ, eyi jẹ pataki.

Jẹ ki a ṣe ifilọlẹ aṣoju yii lori awọn olupin Layer wiwọle, ati gbogbo awọn ilana wa ti n ṣiṣẹ api websocket yoo ṣe alabapin si rẹ, kii ṣe si aaye paṣipaarọ pub-sub atilẹba ninu ekuro. Aṣoju ṣe alabapin si mojuto nikan ni ọran ti ṣiṣe alabapin alailẹgbẹ ati ṣe atunṣe ifiranṣẹ ti nwọle si gbogbo awọn alabapin rẹ.
Bi abajade, awọn ifiranṣẹ 5 yoo firanṣẹ laarin ekuro ati awọn olupin wiwọle, dipo 50000.

Ipa ọna ati iwontunwosi

Req-Resp

Ninu imuse fifiranṣẹ lọwọlọwọ, awọn ilana pinpin ibeere 7 wa:

  • default. Ibeere naa ni a firanṣẹ si gbogbo awọn oludari.
  • round-robin. Awọn ibeere ti wa ni iṣiro ati pin kaakiri ni ọna kika laarin awọn oludari.
  • consensus. Awọn oludari ti o ṣe iranṣẹ iṣẹ naa ti pin si awọn oludari ati awọn ẹrú. Awọn ibeere ni a fi ranṣẹ si olori nikan.
  • consensus & round-robin. Ẹgbẹ naa ni oludari, ṣugbọn awọn ibeere ti pin laarin gbogbo awọn ọmọ ẹgbẹ.
  • sticky. Iṣẹ elile jẹ iṣiro ati sọtọ si oluṣakoso kan pato. Awọn ibeere ti o tẹle pẹlu ibuwọlu yii lọ si olutọju kanna.
  • sticky-fun. Nigbati ipilẹṣẹ aaye paṣipaarọ, iṣẹ iṣiro hash fun sticky iwontunwosi.
  • fun. Iru si alalepo-fun, nikan o le tun darí, kọ tabi ṣaju ilana.

Ilana pinpin ti ṣeto nigbati aaye paṣipaarọ ti wa ni ibẹrẹ.

Ni afikun si iwọntunwọnsi, fifiranṣẹ n gba ọ laaye lati samisi awọn nkan. Jẹ ki a wo awọn oriṣi awọn afi ninu eto naa:

  • Aami asopọ. Faye gba o lati ni oye nipasẹ eyi ti asopọ awọn iṣẹlẹ wá. Ti a lo nigbati ilana oludari kan sopọ si aaye paṣipaarọ kanna, ṣugbọn pẹlu awọn bọtini ipa ọna oriṣiriṣi.
  • Aami iṣẹ. Gba ọ laaye lati ṣajọpọ awọn olutọju sinu awọn ẹgbẹ fun iṣẹ kan ati faagun ipa-ọna ati awọn agbara iwọntunwọnsi. Fun apẹrẹ req-resp, ipa ọna jẹ laini. A firanṣẹ ibeere kan si aaye paṣipaarọ, lẹhinna o kọja si iṣẹ naa. Ṣugbọn ti a ba nilo lati pin awọn oluṣakoso si awọn ẹgbẹ ọgbọn, lẹhinna pipin naa ni lilo awọn afi. Nigbati o ba n ṣalaye aami kan, ibeere naa yoo firanṣẹ si ẹgbẹ kan ti awọn oludari.
  • Beere tag. Gba ọ laaye lati ṣe iyatọ laarin awọn idahun. Niwọn igba ti eto wa jẹ asynchronous, lati ṣe ilana awọn idahun iṣẹ a nilo lati ni anfani lati pato RequestTag kan nigba fifiranṣẹ ibeere kan. Lati inu rẹ a yoo ni anfani lati loye idahun si ibeere ti o wa si wa.

Pub-sub

Fun pobu-iha ohun gbogbo ni kekere kan rọrun. A ni ohun paṣipaarọ ojuami si eyi ti awọn ifiranṣẹ ti wa ni atejade. Aaye paṣipaarọ n pin awọn ifiranṣẹ laarin awọn alabapin ti o ti ṣe alabapin si awọn bọtini ipa ọna ti wọn nilo (a le sọ pe eyi jẹ afiwe si awọn akọle).

Scalability ati ifarada ẹbi

Imuwọn ti eto naa lapapọ da lori iwọn ti scalability ti awọn fẹlẹfẹlẹ ati awọn paati ti eto naa:

  • Awọn iṣẹ jẹ iwọn nipasẹ fifi awọn apa afikun kun si iṣupọ pẹlu awọn olutọju fun iṣẹ yii. Lakoko iṣẹ idanwo, o le yan eto imulo iwọntunwọnsi to dara julọ.
  • Iṣẹ fifiranṣẹ funrararẹ laarin iṣupọ lọtọ jẹ iwọn gbogbogbo boya nipa gbigbe awọn aaye paṣipaarọ pataki ti o kojọpọ si awọn apa iṣupọ lọtọ, tabi nipa fifi awọn ilana aṣoju kun si awọn agbegbe pataki ti iṣupọ naa.
  • Imuwọn ti gbogbo eto bi abuda kan da lori irọrun ti faaji ati agbara lati darapo awọn iṣupọ ẹni kọọkan sinu nkan ọgbọn ti o wọpọ.

Aṣeyọri ti iṣẹ akanṣe nigbagbogbo da lori ayedero ati iyara ti iwọn. Fifiranṣẹ ni ẹya lọwọlọwọ rẹ dagba pẹlu ohun elo naa. Paapa ti a ko ba ni iṣupọ ti awọn ẹrọ 50-60, a le lo si apapo. Laanu, koko-ọrọ ti federation kọja ipari ti nkan yii.

Ifiṣura

Nigbati o ba n ṣe itupalẹ iwọntunwọnsi fifuye, a ti jiroro tẹlẹ apọju ti awọn oludari iṣẹ. Sibẹsibẹ, fifiranṣẹ gbọdọ tun wa ni ipamọ. Ni iṣẹlẹ ti ipade tabi jamba ẹrọ, fifiranṣẹ yẹ ki o gba pada laifọwọyi, ati ni akoko to kuru ju.

Ninu awọn iṣẹ akanṣe mi Mo lo awọn apa afikun ti o gbe ẹru ni ọran ti isubu. Erlang ni imuse ipo pinpin boṣewa fun awọn ohun elo OTP. Ipo pinpin n ṣe imularada ni ọran ikuna nipa ifilọlẹ ohun elo ti o kuna lori ipade miiran ti a ṣe ifilọlẹ tẹlẹ. Ilana naa jẹ sihin; lẹhin ikuna, ohun elo naa gbe lọ laifọwọyi si ipade ikuna. O le ka diẹ sii nipa iṣẹ ṣiṣe yii nibi.

Ise sise

Jẹ ki a gbiyanju lati ni o kere ju ni aijọju afiwe iṣẹ ti rabbitmq ati fifiranṣẹ aṣa wa.
Mo ti ri osise esi idanwo rabbitmq lati ẹgbẹ openstack.

Ni ìpínrọ 6.14.1.2.1.2.2. Iwe atilẹba fihan abajade ti RPC CAST:
Awọn bulọọki ile ti awọn ohun elo ti a pin. Isunmọ keji

A kii yoo ṣe awọn eto afikun eyikeyi si ekuro OS tabi erlang VM ni ilosiwaju. Awọn ipo fun idanwo:

  • erl opts: +A1 +sbtu.
  • Idanwo laarin oju ipade erlang kan jẹ ṣiṣe lori kọǹpútà alágbèéká kan pẹlu i7 atijọ ni ẹya alagbeka.
  • Awọn idanwo iṣupọ ni a ṣe lori awọn olupin pẹlu nẹtiwọọki 10G kan.
  • Awọn koodu nṣiṣẹ ni docker awọn apoti. Nẹtiwọọki ni ipo NAT.

Koodu idanwo:

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.

Oju iṣẹlẹ 1: Idanwo naa jẹ ṣiṣe lori kọǹpútà alágbèéká kan pẹlu ẹya i7 alagbeka atijọ kan. Idanwo naa, fifiranṣẹ ati iṣẹ ni a ṣe lori ipade kan ninu apoti Docker kan:

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)

Oju iṣẹlẹ 2: Awọn apa 3 nṣiṣẹ lori awọn ẹrọ oriṣiriṣi labẹ 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)

Ni gbogbo awọn ọran, lilo Sipiyu ko kọja 250%

Awọn esi

Mo nireti pe iyipo yii ko dabi idalẹnu ọkan ati pe iriri mi yoo jẹ anfani gidi si awọn oniwadi mejeeji ti awọn ọna ṣiṣe pinpin ati awọn oṣiṣẹ ti o wa ni ibẹrẹ ibẹrẹ ti kikọ awọn ile-iṣẹ ti a pin kaakiri fun awọn eto iṣowo wọn ati pe wọn n wo Erlang/Elixir pẹlu iwulo. , ṣugbọn ni iyemeji ṣe o tọ...

Fọto @chuttersnap

Awọn olumulo ti o forukọsilẹ nikan le kopa ninu iwadi naa. wọle, Jowo.

Awọn akọle wo ni MO yẹ ki n bo ni awọn alaye diẹ sii bi apakan ti jara Idanwo VTrade?

  • Ilana: Awọn ọja, awọn aṣẹ ati akoko wọn: DAY, GTD, GTC, IOC, FOK, MOO, MOC, LOO, LOC

  • Iwe aṣẹ. Imọran ati iṣe ti imuse iwe kan pẹlu awọn akojọpọ

  • Wiwo ti iṣowo: Tiki, awọn ifi, awọn ipinnu. Bii o ṣe le fipamọ ati bi o ṣe le lẹ pọ

  • Ile-iṣẹ afẹyinti. Eto ati idagbasoke. Abáni monitoring ati isẹlẹ iwadi

  • API. Jẹ ká ro ero ohun ti awọn atọkun wa ni ti nilo ati bi o si mu wọn

  • Ibi ipamọ alaye: PostgreSQL, Timecale, Tarantool ni awọn eto iṣowo

  • Reactivity ni iṣowo awọn ọna šiše

  • Omiiran. Emi yoo kọ ninu awọn asọye

6 olumulo dibo. 4 olumulo abstained.

orisun: www.habr.com

Fi ọrọìwòye kun