RabbitMQ. Osa 2. Uurime vÀlja Exchanges

Exchange — vahetuspunkt vĂ”i vahetusplatvorm. Siia saadetakse sĂ”numid. Exchange jagab sĂ”numi ĂŒhe vĂ”i mitme jĂ€rjekorra. See marsruutitab sĂ”numid jĂ€rjekorda sĂ”ltuvalt loodud sidemetest (sidemed) tema ja jĂ€rjekorra vahel.

Exchange ei ole Erlang-protsess. Skaalabiltuse kaalutlustel vahetus — see on rida (link moodulile, kus asub marsruutimise loogika) sisseehitatud andmebaasis mnesia. 1 tuhande vahetuspunkti tarbimine on vaid 1MB mĂ€lu.

Sisukord

Otsene vahetus

Direct exchange — kasutatakse, kui on vaja saata sĂ”num kindlatesse jĂ€rjekordadesse. SĂ”num avaldatakse vahetuspunktis teatud marsruudivĂ”tmena ja jĂ”uab kĂ”igisse jĂ€rjekordadesse, mis on ĂŒhendatud sellega sarnase marsruudivĂ”tmega. MarsruudivĂ”ti on rida. Vastavuse otsimine toimub stringide vĂ”rdlemise abil.

SÔnumite voolu graafiline esitus:

RabbitMQ. Osa 2. Uurime vÀlja Exchanges

Uues rabbitmq eksisteerib mÔisted vahetuspunkt vaikimisi. See on otsene vahetus ilma nime. Kui kasutatakse vaikimisi vahetuspunkti, siis sÔnum marsruutitakse jÀrjekorda, mille nimi vastab sÔnumi marsruudivÔtmele.

Teemavahetus

Teemavahetus – sarnaselt otsene vahetus pakub valikulist marsruutimist marsruudivĂ”tme vĂ”rdlemise kaudu. Kuid sel juhul mÀÀratakse vĂ”tme hiti kaudu. Malli loomisel kasutatakse 0 ĂŒht vĂ”i mitut sĂ”na (tĂ€hte AZ ja az ja numbreid 0-9), mis on eraldatud punktidega, samuti sĂŒmboleid * ja #.

  • * — saab asendada tĂ€pselt 1 «replica» (nĂ€iteks funktsioon snd_ctl_add_slave() vahetati vĂ€lja snd_ctl_add_replica() vastu), mis pĂ”hjustas
  • # — saab asendada 0 ĂŒhe vĂ”i mitme sĂ”naga

SÔnumite voolu graafiline esitus:

RabbitMQ. Osa 2. Uurime vÀlja Exchanges

Alates versioonist RabbitMQ 2.4.0 marsruutimisalgoritm teemavahetuse töötas kuni 145 kord kiiremini. Seda saavutati sokkides trie rakendamine, mis tÀhendab mallide esitamist puustruktuurina. NÀiteks mallid a.b.c, a.*.b.c, a.#.c ja b.b.c esitatakse jÀrgmise struktuurina:

RabbitMQ. Osa 2. Uurime vÀlja Exchanges

Malli vastavuse otsimine toimub, alustades juurest ja jÀrk-jÀrgult alla liikudes.

suurendatud ressursside piirangud;

  • selle vahetuspunkti rakendamine vĂ”ib olla hea valik vĂ”imaliku tulevase rakenduse arendamiseks, kuna malli saab alati konfigureerida nii, et sĂ”num avaldatakse sarnaselt otsene vahetus vĂ”i fanout vahetus
  • mallide, mis kasutavad * much faster:, kui mallid, mis kasutavad #.
  • teemavahetuse aeglase otsene vahetus

Fanout Exchange

Fanout vahetus – kĂ”ik sĂ”numid toimetatakse kĂ”ikidesse jĂ€rjekordadesse isegi kui sĂ”numis on mÀÀratud marsruudivĂ”ti.

suurendatud ressursside piirangud;

  • RabbitMQ ei toimi marsruudivĂ”tmete ja mallide puhul mis positiivselt mĂ”jutab jĂ”udlust. See on kiireim. vahetus;
  • kĂ”ik kasutajad peavad olema vĂ”imelised töötlema kĂ”iki sĂ”numeid;

SÔnumite voolu graafiline esitus:

RabbitMQ. Osa 2. Uurime vÀlja Exchanges

Pealkirjade vahetus

Pealkirjade vahetus — suunab sĂ”numid seotud jĂ€rjekordadesse, vĂ”rreldes paaride (vĂ”ti, vÀÀrtus) omadusi pealkirjad seondumis- ja vastava sĂ”numi omadusega. pealkirjad on Dictionary<vĂ”ti, vÀÀrtus>.

Kui spetsiaalne vÔti lisada sÔnastikku x-match vÀÀrtusega iga, siis sÔnum suunatakse osalise vaste korral paarides (vÔti, vÀÀrtus). See kÀitumine vastab operaatorile vÔi.

var bindingArguments = new Dictinary<String, Object>();
bindingArguments.add("x-match", "any");

Kuva vÀÀrtus x-match sisaldab vÀÀrtust all. See tÀhendab, et sÔnum suunatakse tÀpse vaste korral paarides (vÔti, vÀÀrtus). See kÀitumine vastab operaatorile ja.

SÔnumite voolu graafiline esitus:

RabbitMQ. Osa 2. Uurime vÀlja Exchanges

suurendatud ressursside piirangud;

  • tĂ€iendav paindlikkus
  • tĂ€iendavad arvutuslikud kulud. KĂ”ik (vĂ”ti, vÀÀrtus) paaride atribuudid pealkirjad peavad olema sorteeritud vĂ”tmepĂ€ringu alusel enne sĂ”numi suunamisvÀÀrtuste arvutamist. Aeglasem kui teised vahetuse tĂŒĂŒbid.

Consistent-Hashing Exchange

See vahetus on plugin ja pole sisse ehitatud ja RabbitMQ.

Consistent-hashing exchange (vahetus kindla hash’iga) – kasutatakse, kui on mitu jĂ€rjekorda, mis on potentsiaalsed sĂ”numi saajad ja kui on vajalik tasakaalustada koormust nende vahel. SĂ”numi seondumine jĂ€rjekorra juurde toimub kaalu alusel (tingimuslik stringivÀÀrtus vahemikus 0 - n).

Vastav kaalu jĂ€rjekordade vahel – tĂ€hendab, et igasse jĂ€rjekorda jĂ”uab umbes sama arv sĂ”numeid (iga sĂ”num paigutatakse ainult ĂŒhte jĂ€rjekorda). TĂ€ielikku garantiid mitteĂŒhtlasest sĂ”numite jaotamisest ei ole.

SÔnumite voolu graafiline esitus:

RabbitMQ. Osa 2. Uurime vÀlja Exchanges

Hash arvutatakse marsruudivÔti vÔi pealkirjad sÔnumi omadus. Kui kÔik avaldatud sÔnumid on erinevate marsruudivÔtmetega vÔi pealkirjad, siis jaotamine toimub kaalu jÀrgi. Vastupidisel juhul kasutatakse marsruudivÔtit vÔi pealkirjad.

Peab aitama, kui tarbija lĂ€bilaskevĂ”ime peab tĂ”usma ĂŒlespoole, kui lahendus, kus mitu tarbijat kasutavad ĂŒhte jĂ€rjekorda.

Vahetuste kombineerimine (E2E)

KĂ”ikide vahetuste kĂ€itumist saab kombineerida seondumisega Vahetus-ĂŒle-vahetus (vahetuste kombineerimine ei ole spetsifikatsioonis AMQP. See on ĐżŃ€ĐŸŃ‚ĐŸĐșĐŸĐ»i laiendamine poolest RabbitMQ).

SÔnumite voolu graafiline esitus:

RabbitMQ. Osa 2. Uurime vÀlja Exchanges

TÀnu E2E saame leida Ôige skaleeritava konfiguratsiooni, mis vastab nii praegustele kui ka kasvavatele nÔudmistele.

Exchange'i loomine

Exchange'i loomine toimub sĂŒnkroonsete RPC serveri pĂ€ringu kaudu. PĂ€ring tehakse meetodi Exchange.Declare, mis kutsutakse esile koos parameetritega:

  • vahetuse nimi
  • vahetuse tĂŒĂŒp
  • muu parameeter

NĂ€ide loomise kohta vahetus kohtudes RabbitMQ.Client:

//...
channel.ExchangeDeclare(
    exchange: "my_exchange",
    type: "direct",
    durable: "false",
    autoDelete: "false",
    arguments: null
);
//...

  • vahetus — vahetuse nimi, mille soovime luua. Nimi peab olema ainulaadne
  • type — vahetuse tĂŒĂŒp
  • kestvad — kui seate true, siis vahetus rikkaks jÀÀb. See salvestatakse kettale ja suudab ĂŒle elada serveri/brokkeri taaskĂ€ivitamise. Kui vÀÀrtus false, siis vahetus on ajutine ja kustutatakse, kui server/brokker taaskĂ€ivitub
  • autoDelete — automaatne kustutamine. Exchange kustutatakse, kui kĂ”ik seotud jĂ€rjekorrad on eemaldatud
  • — valikulised argumendid. Allpool vaatame lĂ€hemalt. — valikulised argumendid. Enamasti mÀÀratakse argumentide kaudu alternatiivne vahetus (alternatiivne vahetus). Kui sĂ”num ei saa algset marsruuti jĂ€rgida, saab selle saata alternatiivsele vahetusele, et suunata see teise teedpidi.

RabbitMQ. Osa 2. Uurime vÀlja Exchanges

Kui loomine vahetus vĂ”ib-olla, siis server saadab kliendile sĂŒnkroonse RPC vastuse Exchange.DeclareOk. Kui loomine teostada (tekib tĂ”rge pĂ€ringus Exchange.Declare), siis kanal suletakse serveri kaudu asĂŒnkroonse kĂ€su abil Channel.Close ja klient saab erandi OperationInterruptedException, mis sisaldab veakoodi ja selle kirjelduse.

Vahetus peab olema loodud enne sĂ”numite avaldamist. Kui avaldate sĂ”numi mĂ”nesse mitteeksisteerivasse vahetusse — RabbitMQ kustutab selle vaikselt.

Exchange'i loomine graafilise liidesega

Siseneme administraatori paneeli RabbitMQ kasutaja all guest (username: guest ja password: guest). Pange tĂ€hele, et kasutaja guest saab ĂŒhenduda ainult lokaalsest hostist. NĂŒĂŒd liigutame vahekaardile Vahetused ja vajutame Lisa uus vahetus. TĂ€idame omadused:

RabbitMQ. Osa 2. Uurime vÀlja Exchanges

Enamik omadusi on eespool kirjeldatud. Siin tasub mÀrkida, et kui mÀÀrata Sisemine, siis saab vahetust kasutada ainult E2E. Producer ei saa sellesse vahetusse sÔnumeid saata.

KokkuvÔte

SĂŒsteemi arendamisel on mugav kirjeldada marsruutimise grafikuna. Kuid enne graafi loomise alustamist tasub vĂ€lja joonistada suure liiklusega teed, kuna just need nĂ”uavad kĂ”rgemat lĂ€bilaskvust (sooritusvĂ”imet). SeejĂ€rel saab liiklust klassifitseerida. Ja seejĂ€rel saab alustada ehitamist.

Kui loodud graafis on lÔpmatu kogus marsruudivÔtmeid, siis tasub vaadata mitme poole fanout vahetus, mis on 1:1 seotud marsruudivÔtmega. Peame meeles pidama, et fanout vahetus on kÔige kiirem.

Kui marsruutide arv lÀheneb lÔpmatusele, siis tasub tÀhelepanu pöörata teemavahetuse vÔi, kui mall pole vajalik, siis vÔib valida otsese vahetuse, kuna see on kiirem teemavahetuse.

Erinevate kombinatsioonide vahetus tuleb aidata leida Ă”ige skaleeritav konfiguratsioon, mis vastab nii praegustele kui ka kasvavatele sĂŒsteemi nĂ”udmistele.

Kogus vahetus ja jÀrjekordade arv peaks olema minimaalne vÔrreldes marsruutide arvuga.

JĂ€rgmises artiklis hakkame sĂŒgavamalt arvestama Ques ja Bindings'iga.

Viidatud lingid

Allikas: habr.com

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster