Middleware správ je middleware technológia zložená z mechanizmu prenosu správ alebo režimu fronty správ, ktorý využíva efektívny a spoľahlivý mechanizmus správ na výmenu dát nezávislú od platformy a integruje distribuované systémy založené na dátovej komunikácii. V súčasnosti je v odvetví mnoho MQ produktov, ako RabbitMQ, ActiveMQ, ZeroMQ a podobne, ktoré sú vynikajúcim middleware na správu správ, ale ktorý z nich by sme mali v projekte zvoliť? Tento článok hodnotí a porovnáva nasledujúce produkty fronty správ: RabbitMQ, ZeroMQ, ActiveMQ, MSMQ, Redis a memcacheQ
Odbočka: Tu môžeme najprv zvážiť malú otázku: "Prečo potrebujeme služby fronty správ vo webových aplikáciách?" ” Napríklad veľké množstvo insert, update a ďalších požiadaviek prichádza do MySQL súčasne, čo priamo vedie k nespočetným zámkom riadkov a tabuliek, a nakoniec aj k príliš veľkému počtu požiadaviek, čo spôsobuje príliš veľa chýb spojení. Použitím fronty správ môžeme spracovávať požiadavky asynchrónne, čím odľahčujeme zaťaženie systému.
RabbitMQ Je to open source fronta správ napísaná v Erlangu, ktorá podporuje mnoho protokolov: AMQP, XMPP, SMTP, STOMP, čo ju robí veľmi náročnou a vhodnejšou pre vývoj na podnikovej úrovni. Je to vedúca implementácia protokolu AMQP, ktorý implementuje architektúru brokera, čo znamená, že správy môžu byť zaradené do fronty na centrálnom uzle pred odoslaním klientovi. Existuje dobrá podpora smerovania, vyvažovania záťaže alebo perzistencie dát. Táto funkcia robí RabbitMQ jednoduchým na používanie a nasadenie, vhodným pre mnohé scenáre ako smerovanie, vyvažovanie zaťaženia alebo perzistencia správ, a dá sa vykonať len niekoľkými riadkami kódu pomocou fronty správ. To však robí jeho škálovateľnosť menej škálovateľnou a pomalšou, pretože centrálny uzol zvyšuje latenciu a je väčší po zapuzdrení správy. Na konfiguráciu RabbitMQ je potrebné nainštalovať prostredie Erlang na cieľovom stroji. Kliknite pre zobrazenie tohto obrázka v novom okne
? MQ(ZeroMQ) Je známy ako najrýchlejší systém frontovania správ, najmä pre scenáre s vysokou priepustnosťou. Ide o veľmi ľahký systém správ vyvinutý špeciálne pre scenáre s vysokou priepustnosťou a nízkou latenciou, ktorý sa často nachádza v aplikáciách vo finančnom svete. V porovnaní s RabbitMQ podporuje ZeroMQ mnoho pokročilých scenárov správ, ale v rámci ZeroMQ je potrebné implementovať jednotlivé bloky (napríklad sockety, zariadenia a pod.).
? MQ (ZeroMQ) dokáže implementovať pokročilé/komplexné fronty, v ktorých RabbitMQ nie je dobrý, ale vývojári musia samostatne kombinovať viacero technických rámcov a technická zložitosť je výzvou pre úspešnú aplikáciu tohto MQ. ZeroMQ má jedinečný model bez middleware, kde nemusíte inštalovať a spúšťať server správ alebo middleware, pretože vaša aplikácia bude plniť túto úlohu služby. Stačí jednoducho odkazovať na knižnicu ZeroMQ, ktorú je možné nainštalovať pomocou NuGetu, a môžete bez problémov posielať správy medzi aplikáciami. ZeroMQ však poskytuje iba neperzistentné fronty, čo znamená, že ak stroj vypadne, dáta sa stratia. Medzi nimi Twitterov Storm využíva ZeroMQ na prenos dátových tokov. ZeroMQ je veľmi flexibilný, ale musíte sa naučiť jeho 80-stranový manuál (ak píšete o distribuovanom systéme, určite si ho prečítajte).
ZeroMQ nemá middleware architektúru a nevyžaduje žiadne servisné procesy ani spustenia. V skutočnosti túto úlohu služby plní váš aplikačný endpoint. To veľmi uľahčuje nasadenie, ale obava je, že nemáte kde sledovať, ak sa niečo pokazí. Pokiaľ vieme, ZeroMQ ponúka iba neperzistentné fronty. Môžete si implementovať vlastné možnosti auditu a obnovy dát tam, kde ich potrebujete. Kliknite pre zobrazenie tohto obrázka v novom okne
MSMQ Toto je jediná vec v produkte Microsoftu, ktorá je považovaná za hodnotnú. Ak MSMQ dokáže dokázať, že zvládne tento typ úlohy, rozhodnú sa ho použiť. Podstata je, že táto vec nie je zložitá, nič iné ako prijímanie a odosielanie; Má niektoré tvrdé obmedzenia, napríklad maximálnu veľkosť správy 4MB. Tieto problémy však dokáže vyriešiť pripojením k niektorému softvéru, ako sú MassTransit alebo NServiceBus. Kliknite pre zobrazenie tohto obrázka v novom okne
Jafka/Kafka Kafka (ktorá distribuuje správy medzi rôznymi uzlami) je distribuovaný MQ systém vyvinutý a open-source spoločnosťou LinkedIn v decembri 2010, a teraz je inkubačným projektom Apache, vysoko výkonného multijazyčného distribuovaného systému na frontovanie správ Publish/Subscribe, a Jafka je inkubovaná na Kafke, ktorá je vylepšenou verziou Kafky. Má nasledujúce charakteristiky: rýchlu perzistenciu, ktorá môže uchovávať správy pod systémovou režijnou záťažou O(1); Vysoká priepustnosť, ktorá môže dosiahnuť priepustnosť 10W/s na bežnom serveri; Úplne distribuovaný systém, Broker, Producer a Consumer všetci natívne podporujú distribuované a automaticky dosahujú komplexnú rovnováhu. Podporuje paralelné načítavanie Hadoop dát, čo je životaschopné riešenie pre logovacie dáta a offline analytické systémy ako Hadoop, ale s obmedzeniami spracovania v reálnom čase. Kafka zjednocuje online a offline spracovanie správ prostredníctvom mechanizmu paralelného načítavania Hadoop, ktorý je tiež dôležitý pre systém skúmaný v tejto téme. Apache Kafka je v porovnaní s ActiveMQ veľmi ľahký systém na správu správ a okrem veľmi dobrého výkonu je to aj distribuovaný systém, ktorý dobre funguje. Kliknite pre zobrazenie tohto obrázka v novom okne
Apache ActiveMQ ActiveMQ sa nachádza niekde medzi týmito dvoma (RabbitMQ a ZeroMQ), podobne ako ZemoMQ, a môže byť nasadený v režime proxy aj P2P. Podobne ako RabbitMQ, je jednoduché implementovať pokročilé scenáre a vyžaduje nízku spotrebu. ActiveMQ je známy ako chrbtica sveta Javy. Má dlhú históriu a je široko používaná. Je tiež multiplatformová, poskytuje prirodzený integračný prístupový bod pre produkty, ktoré nie sú na platforme Microsoftu. Avšak je možné ho zvážiť len vtedy, ak prešiel MSMQ. Na konfiguráciu ActiveMQ je potrebné nainštalovať Java prostredie na cieľovom stroji. Kliknite pre zobrazenie tohto obrázka v novom okne Je dôležité poznamenať, že produktom novej generácie ActiveMQ je Apollo, ktorý je založený na prototype ActiveMQ a je rýchlejším, spoľahlivejším a jednoduchším nástrojom na správu správ. Apache nazýva Apollo najrýchlejším a najrobustnejším serverom STOMP (Streaming Text Orientated Message Protocol). Vlastnosti Apolla sú nasledovné: Podporované sú protokoly Stomp 1.0 a Stomp 1.1 Témy a fronty Prehliadač fronty Trvalé predplatné s témou Zrkadlová fronta Spoľahlivé správy Vypršanie platnosti a výmena správ Zberač správ JAAS overený Autorizácia založená na ACL Podpora SSL/TLS a validácie certifikátov REST Management API Kliknite pre zobrazenie tohto obrázka v novom okne
Redis Je to databáza Key-Value NoSQL, ktorá je aktívne vyvíjaná a udržiavaná, hoci ide o databázový úložný systém Key-Value, ale podporuje funkcie MQ, takže môže byť použitá ako ľahká služba fronty. Pre onboarding a out-queue operácie RabbitMQ a Redis každý miliónkrát a čas vykonania sa zaznamenáva každých 100 000 krát. Testovacie dáta sú rozdelené do štyroch rôznych veľkostí: 128 bajtov, 512 bajtov, 1K a 10K. Experimenty ukazujú, že pri vstupe do tímu je výkon Redis vyšší ako RabbitMQ, keď je porovnanie dát malé, a ak veľkosť dát presahuje 10K, Redis je neznesiteľne pomalý. Po odchode z tímu Redis ukázal veľmi dobrý výkon bez ohľadu na veľkosť dát, zatiaľ čo výkon RabbitMQ bol oveľa nižší ako Redisov.
MemcacheQ Persistentná fronta správ Memcacheq (skrátene MCQ) je ľahká fronta správ, MemcacheQ obsahuje: 1 Jednoduché a ľahko použiteľné 2 Rýchle spracovanie 3 Viacnásobné fronty 4 Dobrý výkon súbežnosti 5 Kompatibilné s protokolom Memcache. To znamená, že stačí nainštalovať rozšírenie memcache, nie sú potrebné žiadne ďalšie pluginy. 6 Je tiež pohodlný na použitie v zend frameworku.
Nakoniec tieto produkty: 1. Obe majú vlastné klientské API alebo podporujú viacero programovacích jazykov; 2. Existuje veľa dokumentácie; 3. Bola poskytnutá pozitívna podpora. 4. ActiveMQ, RabbitMQ, MSMQ, Redis všetky potrebujú spustiť servisné procesy, ktoré je možné monitorovať a konfigurovať, a ostatné sú problematické 5. Všetky poskytujú relatívne dobrú spoľahlivosť (konzistenciu), škálovateľnosť a vyváženie záťaže, a samozrejme aj výkon
Nebudem tu hovoriť nezmysly, nižšie je priložená sada výsledkov testov zachytených z internetu. Zobrazuje sa počet odoslaných a prijatých správ za sekundu. Celý proces vygeneroval celkovo 1 milión 1K správ. Test bol vykonaný na samostatnom počítači s Windows Vista.
Ako vidíte, ZeroMQ nie je úroveň ako čokoľvek iné. Jeho výkon je prekvapivo vysoký. Napriek tomu tento produkt neposkytuje perzistenciu správ, nedokáže ľahko ukladať a monitorovať medziprocesy, vyžaduje samokontrolu a obnovu dát, takže nie je uspokojivý z hľadiska jednoduchosti používania a HA. Záver je jasný: ak chcete, aby aplikácia posielala správy čo najrýchlejšie, zvoľte ZeroMQ. Je to cennejšie, keď vám až tak nezáleží na tom, že náhodou stratíte niektoré správy.
Bloger v tomto článku dúfa (a ani veľmi nedúfa), že bude používať Rabbit, Rabbitmq má zabudovaný systém, haha, ak vytvoríte cluster, nemusíte sa obávať problémov ako load balancing a môžete si nastaviť zrkadlo fronty. Ale takéto veci sú také, že by malo byť viac testovania a nakoniec získate obľúbenú, a všetko, čo som o Rabbit počul a čítal, mi dáva pocit, že by to mala byť najlepšia voľba.
|