Viestiväliohjelmisto on väliohjelmistoteknologia, joka koostuu viestinsiirtomekanismista tai viestijonotilasta, ja joka käyttää tehokasta ja luotettavaa viestintämekanismia alustariippumattomaan tiedonvaihtoon sekä integroi hajautettuja järjestelmiä, jotka perustuvat tiedonsiirtoon. Tällä hetkellä alalla on monia MQ-tuotteita, kuten RabbitMQ, ActiveMQ, ZeroMQ jne., jotka ovat erinomaisia viestien välitysohjelmistoja, mutta kumman meidän tulisi valita projektiin? Tässä artikkelissa arvioidaan ja vertaillaan seuraavia viestijonotuotteita: RabbitMQ, ZeroMQ, ActiveMQ, MSMQ, Redis ja memcacheQ
Sivupolku: Tässä voimme ensin pohtia pientä kysymystä: "Miksi tarvitsemme viestijonopalveluita web-sovelluksissa?" ” Esimerkiksi suuri määrä lisäys-, päivitys- ja muita pyyntöjä saapuu MySQL:ään samanaikaisesti, mikä johtaa suoraan lukemattomiin rivi- ja taulukkolukituksiin, ja jopa liian moniin pyyntöihin lopussa, mikä laukaisee liikaa yhteysvirheitä. Viestijonojen avulla voimme käsitellä pyyntöjä asynkronisesti, mikä helpottaa järjestelmän kuormitusta.
RabbitMQ Se on avoimen lähdekoodin viestijono, joka on kirjoitettu Erlangilla ja tukee monia protokollia: AMQP, XMPP, SMTP, STOMP, mikä tekee siitä erittäin raskaan ja sopivamman yritystason kehitykseen. Se on johtava AMQP-protokollan toteutus, joka toteuttaa välittäjäarkkitehtuurin, mikä tarkoittaa, että viestit voidaan jonottaa keskitettyyn solmuun ennen kuin ne lähetetään asiakkaalle. Reititykseen, kuormantasaukseen tai datan pysyvyyteen on hyvä tuki. Tämä ominaisuus tekee RabbitMQ:sta helppokäyttöisen ja käyttöönotettavan, sopivan moniin tilanteisiin, kuten reititykseen, kuormantasapainotukseen tai viestin pysyvyyteen, ja sen voi tehdä vain muutamalla koodirivillä viestijonojen avulla. Tämä kuitenkin tekee siitä vähemmän skaalautuvan ja hitaamman, koska keskussolmu lisää viivettä ja on suurempi viestikapseloinnin jälkeen. RabbitMQ:n konfigurointiin sinun täytyy asentaa Erlang-ympäristö kohdekoneelle. Klikkaa nähdäksesi tämän kuvan uudessa ikkunassa
? MQ(ZeroMQ) Se tunnetaan nopeimpana viestijonotusjärjestelmänä, erityisesti suuren läpimenon kysyntätilanteissa. Se on erittäin kevyt viestintäjärjestelmä, joka on kehitetty erityisesti korkean läpimenon ja matalan viiveen tilanteisiin, ja sitä löytyy usein rahoitusalan sovelluksista. RabbitMQ:han verrattuna ZeroMQ tukee monia edistyneitä viestitilanteita, mutta ZeroMQ:n kehyksessä täytyy toteuttaa yksittäisiä lohkoja (kuten soketteja tai laitteita jne.).
? MQ (ZeroMQ) voi toteuttaa edistyneitä/monimutkaisia jonoja, joissa RabbitMQ ei ole hyvä, mutta kehittäjien täytyy yhdistää useita teknisiä kehyksiä yksinään, ja tekninen monimutkaisuus on haaste tämän MQ:n onnistuneelle soveltamiselle. ZeroMQ:lla on ainutlaatuinen ei-middleware-malli, jossa sinun ei tarvitse asentaa ja ajaa viestipalvelinta tai middlewarea, koska sovelluksesi toimii tässä palveluroolissa. Tarvitsee vain viitata ZeroMQ-kirjastoon, jonka voi asentaa NuGetin avulla, ja voit mielellään lähettää viestejä sovellusten välillä. ZeroMQ tarjoaa kuitenkin vain ei-pysyviä jonoja, mikä tarkoittaa, että jos kone menee rikki, data katoaa. Näistä Twitterin Storm käyttää ZeroMQ:ta datavirtojen siirtona. ZeroMQ on hyvin joustava, mutta sinun täytyy opetella sen 80-sivuinen käsikirja (jos kirjoitat hajautetusta järjestelmästä, muista lukea se).
ZeroMQ:lla ei ole väliohjelmistoarkkitehtuuria eikä se vaadi palveluprosesseja tai suorituksia. Itse asiassa sovelluksesi päätepiste toimii tässä palveluroolissa. Tämä tekee sen käyttöönotosta hyvin helppoa, mutta huolena on, ettei sinulla ole paikkaa katsoa, jos siinä menee jotain pieleen. Tietojemme mukaan ZeroMQ tarjoaa vain ei-pysyviä jonoja. Voit toteuttaa omat auditointi- ja tietojen palautuskyvyt siellä, missä niitä tarvitset. Klikkaa nähdäksesi tämän kuvan uudessa ikkunassa
MSMQ Tämä on ainoa asia Microsoftin tuotteessa, jota pidetään arvokkaana. Jos MSMQ pystyy osoittamaan pystyvänsä hoitamaan tämänkaltaisen tehtävän, he valitsevat käyttää sitä. Pointti on, että tämä asia ei ole monimutkainen, pelkkää vastaanottamista ja lähettämistä; Siinä on joitakin tiukkoja rajoituksia, kuten viestin maksimikoko 4MB. Kuitenkin se voi ratkaista nämä ongelmat yhdistämällä ohjelmistoihin kuten MassTransit tai NServiceBus. Klikkaa nähdäksesi tämän kuvan uudessa ikkunassa
Jafka/Kafka Kafka (joka jakaa viestejä eri solmujen kesken) on hajautettu MQ-järjestelmä, jonka LinkedIn kehitti ja avoimesti lähdekoodina joulukuussa 2010. Se on nyt Apache-järjestelmän, korkean suorituskyvyn monikielisen hajautetun Publish/Subscribe -viestijonojärjestelmän, inkubaatioprojekti, ja Jafka on inkuboitu Kafkan päälle, joka on päivitetty versio Kafkasta. Sillä on seuraavat ominaisuudet: nopea pysyvyys, joka voi jatkaa viestejä järjestelmän O(1)-ylikuormituksen alaisena; Korkea läpäisykyky, joka voi saavuttaa 10 W/s nopeuden tavallisella palvelimella; Täysin hajautettu järjestelmä, välittäjä, tuottaja ja kuluttaja tukevat kaikki natiivisti hajautettua ja saavuttavat automaattisesti monimutkaisen tasapainon. Tukee Hadoop-datan rinnakkaista latausta, mikä on toimiva ratkaisu lokidatalle ja offline-analyysijärjestelmille, kuten Hadoopille, mutta reaaliaikaisen käsittelyn rajoituksin. Kafka yhdistää online- ja offline-viestinkäsittelyn Hadoopin rinnakkaislatausmekanismin avulla, mikä on myös tärkeää tässä aiheessa tutkittavalle järjestelmälle. Apache Kafka on erittäin kevyt viestijärjestelmä verrattuna ActiveMQ:hon, ja hyvän suorituskyvyn lisäksi se on myös hajautettu järjestelmä, joka toimii hyvin. Klikkaa nähdäksesi tämän kuvan uudessa ikkunassa
Apache ActiveMQ ActiveMQ sijoittuu jonnekin näiden kahden (RabbitMQ ja ZeroMQ) välimaastoon, samankaltainen kuin ZemoMQ, ja sitä voidaan ottaa käyttöön sekä välitys- että P2P-tilassa. Samoin kuin RabbitMQ:ssa, on helppo toteuttaa edistyneitä skenaarioita ja vaatii vähän kulutusta. ActiveMQ tunnetaan Java-maailman selkärankana. Sillä on pitkä historia ja sitä käytetään laajasti. Se on myös monialustainen, tarjoten luonnollisen integraatioyhteyden tuotteille, joita ei ole Microsoftin alustalla. Kuitenkin sitä voidaan ottaa huomioon vain, jos se on suoritettu MSMQ:n yli. ActiveMQ:n konfigurointiin sinun täytyy asentaa Java-ympäristö kohdekoneelle. Klikkaa nähdäksesi tämän kuvan uudessa ikkunassa On tärkeää huomata, että ActiveMQ:n seuraavan sukupolven tuote on Apollo, joka perustuu ActiveMQ-prototyyppiin ja on nopeampi, luotettavampi ja helpommin ylläpidettävä viestinvälitystyökalu. Apache kutsuu Apolloa nopeimmaksi ja kestävimmäksi STOMP-palvelimeksi (Streaming Text Orientated Message Protocol). Apollon ominaisuudet ovat seuraavat: Stomp 1.0 ja Stomp 1.1 -protokollat ovat tuettuja Aiheet ja jonot Jonoselain Teeman pysyvät tilaukset Peilijono Luotettava viestintä Viestin vanheneminen ja vaihto Viestinpoimija JAAS vahvistettu ACL-pohjainen valtuutus Tue SSL/TLS:ää ja sertifikaattien validointia REST Management API Klikkaa nähdäksesi tämän kuvan uudessa ikkunassa
Redis Se on Key-Value NoSQL-tietokanta, jota kehitetään ja ylläpidetään, vaikka se onkin Key-Value-tietokantatallennusjärjestelmä, mutta se tukee MQ-toimintoja, joten sitä voidaan käyttää kevyenä jonopalveluna. RabbitMQ:n ja Redisin käyttöönotto- ja ulkojonottotoiminnoissa kumpikin miljoona kertaa, ja suoritusaika kirjataan joka 100 000 kerta. Testidata on jaettu neljään eri kokoon: 128Bytes, 512Bytes, 1K ja 10K. Kokeet osoittavat, että tiimiin liittyessä Redisin suorituskyky on korkeampi kuin RabbitMQ:n, kun datan vertailu on pieni, ja jos datakoko ylittää 10K, Redis on sietämättömän hidas. Lähdettyään tiimistä Redis osoitti erittäin hyvää suoritusta datan koosta riippumatta, kun taas RabbitMQ:n suorituskyky oli paljon heikompi kuin Redisin.
MemcacheQ Pysyvä viestijono Memcacheq (lyhennettynä MCQ) on kevyt viestijono, jossa MemcacheQ:n ominaisuudet ovat seuraavat: 1 Yksinkertainen ja helppokäyttöinen 2 Nopea prosessointi 3 Useat jonot 4 Hyvä rinnakkaiskäyttö 5 Yhteensopiva Memcache-protokollan kanssa. Tämä tarkoittaa, että sinun tarvitsee vain asentaa memcache-laajennus, eikä lisäosia tarvita. 6 Sen käyttö zend-kehyksessä on myös kätevää.
Lopulta nämä tuotteet: 1. Molemmilla on omat asiakasrajapinnat tai ne tukevat useita ohjelmointikieliä; 2. Dokumentaatiota on paljon; 3. Positiivista tukea annettiin. 4. ActiveMQ:n, RabbitMQ:n, MSMQ:n, Redis kaikki tarvitsevat palveluprosesseja, joita voidaan seurata ja konfiguroida, ja muut ovat ongelmallisia 5. Kaikki tarjoavat suhteellisen hyvän luotettavuuden (johdonmukaisuuden), skaalautuvuuden ja kuormantasapainotuksen sekä tietenkin suorituskyvyn
En aio puhua hölynpölyä, alla on liitteenä joukko testituloksia, jotka on siepattu internetistä. Näytetään lähetettyjen ja vastaanotettujen viestien määrä sekunnissa. Koko prosessi tuotti yhteensä miljoona 1K-viestiä. Testi suoritettiin Windows Vistan itsenäisellä koneella.
Kuten näet, ZeroMQ ei ole taso kuten mikään muu. Sen suorituskyky on yllättävän korkea. Tästä huolimatta tämä tuote ei tarjoa viestin pysyvyyttä, ei pysty helposti tallentamaan ja valvomaan väliprosesseja, ja vaatii itseauditointia sekä tietojen palautusta, joten se ei ole tyydyttävä helppokäyttöisyyden ja HA:n kannalta. Johtopäätös on selvä: jos haluat sovelluksen lähettävän viestejä mahdollisimman nopeasti, valitset ZeroMQ:n. Se on arvokkaampaa, kun et välitä liikaa tiettyjen viestien menettämisestä sattumalta.
Tämän artikkelin bloggaaja toivoo (ja ei toivo kovin paljon) käyttävänsä Rabbitia, Rabbitmq:ssa on sisäänrakennettu haha, jos muodostat klusterin, ei tarvitse huolehtia kuormantasapainotuksesta, ja voit ottaa käyttöön jonopeilin. Mutta tämänkaltaisessa tilanteessa testauksia pitäisi tehdä enemmän, ja lopulta saat suosikkini, ja kaikki kuulemani ja lukemani asiat Rabbitista saavat minut tuntemaan, että sen pitäisi olla paras valinta.
|