RabbitMQ. Osa 2. Uurime Exchanges

Vahetus — vahetuspunkt või vahetuspunkt. Siia saadetakse sõnumeid. Vahetus jagab sõnumi ühe või mitme järjekorra vahel. See suunab sõnumeid järjekorda loodud sidemete alusel (seosed) tema ja järjekorra vahel.

Vahetus ei ole Erlang-protsess. Skaalautuvuse tõhustamiseks exchange — see on rida (viide moodulile koos koodiga, kus asub suunamislaundus) sisseehitatud andmebaasis mnesia. 1 000 vahetuspunkti tarbib kokku vaid 1 MB mälu.

Sisukord

  • RabbitMQ. Osa 1. Sissejuhatus. Erlang, AMQP ja RPC
  • RabbitMQ. Osa 2. Uurime Exchanges
  • RabbitMQ. Osa 3. Uurime Queues ja Bindings
  • RabbitMQ. Osa 4. Uurime, mis on sõnumid ja raamid
  • RabbitMQ. Osa 5. Sõnumite avaldamise ja tarbimise jõudlus
  • RabbitMQ. Osa 6. Ülevaade moodulitest Federation ja Shovel
  • RabbitMQ. Osa 7. Üksikasjalikult Connection ja Channel
  • RabbitMQ. Osa 8. RabbitMQ .NET-is
  • RabbitMQ. Osa 9. Juhendamine

Otsene vahetus

Otsene vahetus — kasutatakse, kui on vaja saata sõnum kindlasse järjekorda. Sõnum avaldatakse vahetuses kindla suunamisvõtmega ja jõuab kõikidesse järjekordadesse, mis on seotud selle vahetuse sarnase suunamisvõtmega. Suunamisvõti on tekst. Vastavuse kontrollimine toimub stringide võrdsuse kontrollimisega.

Sõnumivoogude graafiline esitus:

RabbitMQ. Osa 2. Uurime Exchanges

V rabbitmq on olemas mõisted vahetuspunkt vaikimisi. See on otsene vahetus ilma nime. Kui kasutatakse vahetuspunkti vaikimisi, siis sõnum suunatakse järjekorda, mille nimi on võrdne sõnumi suunamisvõtmega.

Teemavahetus

Teemavahetus – sarnane otsene vahetus pakub võimalust teostada valikulist suunamist, võrreldes suunamisvõtit. Kuid, sel juhul määratakse võti malli järgi. Malli loomisel kasutatakse 0 või rohkem sõna (tähed AZ ja az ja numbrid 0-9), mida eraldatakse punktiga, ja samuti märke * ja #.

  • * — võib asendada täpselt 1 sõna
  • # — võib asendada 0 või rohkem sõna

Sõnumivoogude graafiline esitus:

RabbitMQ. Osa 2. Uurime Exchanges

Alates versioonist RabbitMQ 2.4.0 suunamisalgoritm teema vahetus on hakanud töötama kuni 145 kord kiirem. Nad saavutasid selle, rakendades lähenemist trie implementation, mis tähendab mallide esitamist puustruktuurina. Näiteks malli a.b.c, a.*.b.c, a.#.c ja b.b.c esitatakse järgmise struktuurina:

RabbitMQ. Osa 2. Uurime Exchanges

Malliga vastavuse leidmine toimub, alustades juurest ja järgides ülalt alla.

Omadused:

  • selle vahetuse rakendamine võib olla hea valik võimaliku tuleviku rakenduse arendamiseks, kuna malle saab alati kohandada, et sõnumit avaldataks samamoodi nagu otsene vahetus või fanout exchange
  • malle, mis kasutavad * oluliselt kiirem, kui mallid, mis kasutavad #.
  • teema vahetus aeglasemalt otsene vahetus

Fanout Exchange

Fanout exchangekõik sõnumid jõuavad kõikidesse järjekordadesse isegi kui sõnumis on määratud suunamisvõti.

Omadused:

  • RabbitMQ ei tööta marsruutimisvõtmete ja mallidega mis mõjutab positiivselt jõudlust. See on kõige kiirem exchange;
  • kõik tarbijad peavad suutma töödelda kõiki sõnumeid;

Sõnumivoogude graafiline esitus:

RabbitMQ. Osa 2. Uurime Exchanges

Pealkirjade vahetus

Pealkirjade vahetus suunab sõnumid seotud järjekordadesse, tuginedes paaride (võti, väärtus) omaduste võrdlemisele pealkirjad sidumiste ja sarnaste sõnumi omaduste. pealkirjad esindab Sõnastik.

Kui sõnastikku lisada eriline võti x-match väärtusega iga, siis sõnum suunatakse osalise vastavuse korral paaride (võti, väärtus). See käitumine on sarnane operaatorile või.

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

Vaikimisi võti x-match sisaldab väärtust all. See tähendab, et sõnum suunatakse täieliku vastavuse korral paaride (võti, väärtus). See käitumine on sarnane operaatorile ja.

Sõnumivoogude graafiline esitus:

RabbitMQ. Osa 2. Uurime Exchanges

Omadused:

  • täiendav paindlikkus
  • täiendavad arvutuskoormused. Kõik paarid (võti, väärtus) atribuudist pealkirjad peavad olema järjestatud võtme nime järgi enne sõnumi suunamisväärtuste arvutamist. Aeglasem kui muud tüübid exchange.

Consistent-Hashing Exchange

See vahetus on plugin ja ei ole sisseehitatud ühes RabbitMQ.

Consistent-hashing exchange (exchange kaaluga hashimisega) – kasutatakse, kui on mitu järjekorda, mis võivad potentsiaalselt sõnumi vastu võtta, ning kui on vajalik koormuse tasakaalustamine nende vahel. Sõnumi seos järjekorraga toimub kaalu alusel (tingimuslik stringiväärtus alates 0 - n).

Järjekordade ekvivalentne kaal – näitab, et igasse järjekorda jõuab umbes sama arv sõnumeid (iga sõnum paigutatakse ainult ühte järjekorda). Täielikku garantiid sõnumite ühtlasest jaotumisest ei ole.

Sõnumivoogude graafiline esitus:

RabbitMQ. Osa 2. Uurime Exchanges

Hash arvutatakse räsimise võtme või sõnumi omaduse alusel. Kui kõik avaldatud sõnumid omasid erinevaid räsimisvõtmeid või pealkirjad , siis jaotamine toimub kaalu alusel. Vastupidisel juhul kasutatakse räsimise võtit või pealkirjad, siis jaotamine toimub kaalu alusel. Vastasel juhul kasutatakse marsruutimisvõtit või pealkirjad.

Peab aitama, kui tarbija läbilaskevõime vajab kasvamist, mis on kõrgem kui lahendus mitme tarbija kasutamisel ühe järjekorraga.

Vahetusjaamade (E2E) kombineerimine

Kõigi vahetusjaamade käitumist saab kombineerida ühenduse kaudu Vahetus- ja vahetuse vahel (vahetusjaamade kombineerimine ei kuulu spetsifikatsiooni AMQP. Protokolli laiendamine RabbitMQ).

Sõnumivoogude graafiline esitus:

RabbitMQ. Osa 2. Uurime Exchanges

Arvelt E2E saame leida õige skaleeritava konfiguratsiooni, mis rahuldab nii olemasolevaid kui ka kasvavaid nõudmisi.

Vahetuse loomine

Vahetuse loomine toimub sümbioosina RPC päringuga serverisse. Päring tehakse meetodi kaudu Exchange.Declare, mida kutsutakse välja parameetritega:

  • vahetuse nimi
  • vahetuse tüüp
  • teised parameetrid

Näide loomist exchange kasutades RabbitMQ.Client:

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

  • exchange — vahetuse nimi, mida soovime luua. Nimi peab olema ainulaadne
  • type — vahetuse tüüp
  • durable — kui seada true, siis exchange oluline. See salvestatakse kettale ja suudab ellu jääda serveri/brokkeri taaskäivitamisel. Kui väärtus false, siis exchange on ajutine ja kustutatakse, kui server/brokker taaskäivitub
  • autoDelete — automaatne kustutamine. Vahetus kustutatakse, kui kõik seotud järjekorrad on kustutatud
  • argumentide — valikulised argumendid. Kõige sagedamini määratakse argumentide kaudu alternatiivne vahetus (alternatiivne vahetus). Kui sõnum ei saa esialgsel marsruudil liikuda, saab selle saata alternatiivsele vahetusele teise marsruudi kaudu suunamiseks.

RabbitMQ. Osa 2. Uurime Exchanges

Kui loomine exchange on võimalik, siis server saadab kliendile sünkroonse RPC vastuse Exchange.DeclareOk. Kui loomine ei ole võimalik (taotluse tõttu tekkis tõrge Exchange.Declare), siis kanal suletakse serveri kaudu asünkroonse käsuga Channel.Close ja klient saab erandi OperationInterruptedException, mis sisaldab veakoodi ja selle kirjeldust.

Vahetus peab olema loodud enne sõnumite avaldamist. Kui avaldate sõnumi mõnes olematus vahetuses — RabbitMQ kustutab see vaikselt selle.

Vahetuse loomine graafilise liidese kaudu

Siseneme administraatori paneeli RabbitMQ kasutaja all guest (kasutajanimi: guest ja parool: guest). Pange tähele, et kasutaja guest saab ühendust luua ainult kohalikust hostist. Nüüd liigume vahekaardile Vahetused ja klõpsame Lisa uus vahetus. Täidame omadused:

RabbitMQ. Osa 2. Uurime Exchanges

Enamik omadusi on juba eespool kirjeldatud. Siin mainime, et kui määrata Sisemine, siis saab vahetust kasutada ainult E2E. Producer ei saa sellisesse vahetusse sõnumeid saata.

Kokkuvõte

Süsteemi arendamisel on mugav kirjeldada topoloogiat marsruutimise graafi abil. Kuid enne graafi ehitamist on mõistlik välja tuua suured liiklusvood, kuna just need nõuavad kõrgemat läbilaskevõimet (töötlemisvõime). Seejärel saab klassifitseerida liiklust. Ja alles siis alustada ehitamist.

Kui loodud graafis on olemas lõpmatu hulk marsruudivõtmeid, siis tasub vaadata mitme fanout exchange, mis on 1:1 seotud marsruudivõtmega. Peame meeles, et fanout exchange see on kõige kiirem.

Kui marsruutide arv pulbitseb lõpmatusse, siis tasub tähelepanu pöörata teema vahetus või kui mall ei ole vajalik, siis võib valida otsevahetuse, kuna see on kiirem. teema vahetus.

Erinevate kombinatsioonide exchange peaks aitama leida õige. skaleeritav konfiguratsioon, mis vastab nii praegustele kui ka kasvavatele süsteemi nõudmistele.

Kogus exchange ja järjekordi peaks olema minimaalne võrreldes marsruutide arvuga.

Järgmises artiklis alustame Queues ja Bindings põhjalikumat uurimist.

Lingid

Allikas: habr.com

Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster