Middleware zpráv je middleware technologie složená z mechanismu přenosu zpráv nebo režimu fronty zpráv, který využívá efektivní a spolehlivý mechanismus pro výměnu dat nezávislou na platformě a integruje distribuované systémy založené na datové komunikaci. V současnosti je v oboru mnoho produktů MQ, jako jsou RabbitMQ, ActiveMQ, ZeroMQ atd., které jsou vynikajícím middleware pro zprávy, ale který bychom měli v projektu zvolit? Tento článek hodnotí a porovnává následující produkty fronty zpráv: RabbitMQ, ZeroMQ, ActiveMQ, MSMQ, Redis a memcacheQ
Odbočka: Nejprve můžeme uvažovat o malé otázce: "Proč potřebujeme služby fronty zpráv ve webových aplikacích?" ” Například velké množství insert, update a dalších požadavků dorazí do MySQL současně, což přímo vede k nespočtu zámků řádků a tabulek, a nakonec i k příliš mnoha požadavkům, což způsobuje příliš mnoho chyb spojení. Použitím fronty zpráv můžeme zpracovávat požadavky asynchronně, čímž ulevujeme systému od zátěže.
RabbitMQ Jedná se o open source frontu zpráv napsanou v Erlangu, která podporuje mnoho protokolů: AMQP, XMPP, SMTP, STOMP, což ji činí velmi náročnou a vhodnější pro vývoj na úrovni podniku. Jedná se o přední implementaci protokolu AMQP, který implementuje brokerskou architekturu, což znamená, že zprávy mohou být frontovány na centrálním uzlu před odesláním klientovi. Je zde dobrá podpora pro směrování, vyvažování zátěže nebo perzistenci dat. Tato funkce činí RabbitMQ snadným na používání a nasazení, vhodným pro různé situace, jako je směrování, vyvažování zatížení nebo perzistence zpráv, a lze jej provést jen několika řádky kódu pomocí fronty zpráv. To však činí zařízení méně škálovatelným a pomalejším, protože centrální uzel zvyšuje latenci a je větší po zapouzdření zprávy. Pro konfiguraci RabbitMQ je potřeba nainstalovat prostředí Erlang na cílový stroj. Klikněte pro zobrazení tohoto obrázku v novém okně
? MQ(ZeroMQ) Je známý jako nejrychlejší systém frontování zpráv, zejména pro scénáře s vysokou propustností poptávky. Jedná se o velmi lehký systém pro zasílání zpráv vyvinutý speciálně pro scénáře s vysokou propustností a nízkou latencí, který lze často najít v aplikacích ve finančním světě. Ve srovnání s RabbitMQ podporuje ZeroMQ mnoho pokročilých scénářů zpráv, ale musíte implementovat jednotlivé bloky v rámci ZeroMQ (například sockety, zařízení atd.).
? MQ (ZeroMQ) dokáže implementovat pokročilé/komplexní fronty, ve kterých RabbitMQ není dobrý, ale vývojáři musí sami kombinovat více technických rámců a technická složitost je výzvou pro úspěšnou aplikaci tohoto MQ. ZeroMQ má unikátní model bez middleware, kde není nutné instalovat a spouštět server zpráv nebo middleware, protože vaše aplikace bude plnit tuto roli. Stačí jednoduše odkazovat na knihovnu ZeroMQ, kterou lze nainstalovat pomocí NuGetu, a můžete bez problémů posílat zprávy mezi aplikacemi. ZeroMQ však poskytuje pouze neperzistentní fronty, což znamená, že pokud stroj vypadne, data budou ztracena. Mezi nimi Twitterův Storm využívá ZeroMQ pro přenos datových toků. ZeroMQ je velmi flexibilní, ale musíte se naučit jeho 80stránkový manuál (pokud píšete o distribuovaném systému, určitě si ho přečtěte).
ZeroMQ nemá architekturu middleware a nevyžaduje žádné servisní procesy ani spouštění. Ve skutečnosti tuto roli služby plní váš aplikační endpoint. To velmi usnadňuje nasazení, ale obava je, že nemáte kde sledovat, kdyby se něco pokazilo. Pokud víme, ZeroMQ nabízí pouze neperzistentní fronty. Můžete si implementovat vlastní auditní a obnovovací schopnosti dat tam, kde je potřebujete. Klikněte pro zobrazení tohoto obrázku v novém okně
MSMQ To je jediná věc v produktu Microsoftu, která je považována za hodnotnou. Pokud MSMQ dokáže prokázat, že tento typ úkolu zvládne, rozhodnou se ho použít. Podstata je, že to není složité, nic jiného než přijímání a odesílání; Má některá tvrdá omezení, například maximální velikost zprávy 4MB. Tyto problémy však může vyřešit připojením k nějakému softwaru, jako je MassTransit nebo NServiceBus. Klikněte pro zobrazení tohoto obrázku v novém okně
Jafka/Kafka Kafka (která distribuuje zprávy mezi různými uzly) je distribuovaný MQ systém vyvinutý a open-source společností LinkedIn v prosinci 2010, a nyní je inkubačním projektem Apache, vysoce výkonného multijazyčního distribuovaného systému pro frontování zpráv Publish/Subscribe, a Jafka je inkubována na Kafce, což je vylepšená verze Kafky. Má následující vlastnosti: rychlou perzistenci, která může přetrvávat zprávy pod systémovou režie O(1); Vysoká propustnost, která může dosáhnout propustnosti 10W/s na běžném serveru; Plně distribuovaný systém, Broker, Producer a Consumer všichni nativně podporují distribuované a automaticky dosahují složité rovnováhy. Podporuje paralelní načítání dat Hadoop, což je životaschopné řešení pro logovací data a offline analytické systémy jako Hadoop, ale s omezeními zpracování v reálném čase. Kafka sjednocuje online a offline zpracování zpráv prostřednictvím mechanismu paralelního načítání v Hadoopu, což je také důležité pro systém zkoumaný v tomto tématu. Apache Kafka je velmi lehký systém pro zasílání zpráv ve srovnání s ActiveMQ a kromě velmi dobrého výkonu je také distribuovaným systémem, který dobře funguje. Klikněte pro zobrazení tohoto obrázku v novém okně
Apache ActiveMQ ActiveMQ se nachází někde mezi těmito dvěma (RabbitMQ a ZeroMQ), podobně jako ZemoMQ, a lze jej nasadit jak v proxy, tak v P2P režimu. Podobně jako RabbitMQ je snadné implementovat pokročilé scénáře a vyžaduje nízkou spotřebu. ActiveMQ je známý jako páteř světa Javy. Má dlouhou historii a je široce používán. Je také multiplatformní, poskytuje přirozený integrační přístupový bod pro produkty, které nejsou na platformě Microsoftu. Nicméně je možné ji zvážit pouze tehdy, pokud prošla MSMQ. Pro konfiguraci ActiveMQ je potřeba nainstalovat Java prostředí na cílový stroj. Klikněte pro zobrazení tohoto obrázku v novém okně Je důležité poznamenat, že produktem nové generace ActiveMQ je Apollo, který je založen na prototypu ActiveMQ a je rychlejším, spolehlivějším a snadněji udržovatelným nástrojem pro zprostředkování zpráv. Apache nazývá Apollo nejrychlejším a nejrobustnějším serverem STOMP (Streaming Textově orientovaný protokol zpráv). Vlastnosti Apolla jsou následující: Podporovány jsou protokoly Stomp 1.0 a Stomp 1.1 Témata a fronty Prohlížeč fronty Trvalé předplatné s tématem Zrcadlová fronta Spolehlivé zprávy Vypršení platnosti a výměna zprávy Sběrač zpráv JAAS ověřeno Autorizace založená na ACL Podpora SSL/TLS a ověřování certifikátů REST Management API Klikněte pro zobrazení tohoto obrázku v novém okně
Redis Jedná se o databázi Key-Value NoSQL, která je aktivně vyvíjena a udržována, i když je to systém pro ukládání dat Key-Value, ale podporuje funkce MQ, takže může být použita jako lehká frontová služba. Pro onboarding a out-queue operace RabbitMQ a Redis každý 1 milionkrát a čas provedení je zaznamenán každých 100 000krát. Testovací data jsou rozdělena do čtyř různých velikostí: 128 bajtů, 512 bajtů, 1K a 10K. Experimenty ukazují, že při připojení k týmu je výkon Redis vyšší než u RabbitMQ, když je porovnání dat malé, a pokud velikost dat přesahuje 10 tisíc, Redis je nesnesitelně pomalý. Když tým opouštěl, Redis ukázal velmi dobrý výkon bez ohledu na velikost dat, zatímco RabbitMQ byl mnohem nižší než Redisův.
MemcacheQ Persistentní fronta zpráv Memcacheq (zkráceně MCQ) je lehká fronta zpráv, MemcacheQ obsahuje: 1 Jednoduché a snadné na použití 2 Rychlé zpracování 3 Vícenásobné fronty 4 Dobrý výkon souběžnosti 5 Kompatibilní s protokolem Memcache. To znamená, že stačí nainstalovat rozšíření memcache, nejsou potřeba žádné další pluginy. 6 Je také pohodlné používat v rámci Zend.
Nakonec tyto produkty: 1. Oba mají vlastní klientská API nebo podporují více programovacích jazyků; 2. Existuje spousta dokumentace; 3. Byla poskytnuta pozitivní podpora. 4. ActiveMQ, RabbitMQ, MSMQ, Redis všechny potřebují spustit servisní procesy, které lze monitorovat a konfigurovat, a ostatní jsou problematické 5. Všechny poskytují relativně dobrou spolehlivost (konzistenci), škálovatelnost a vyvažování zátěže, a samozřejmě výkon
Nebudu tu mluvit nesmysly, níže je přiložena sada výsledků testů zachycených z internetu. Zobrazuje se počet odeslaných a přijatých zpráv za sekundu. Celý proces vygeneroval celkem 1 milion zpráv o velikosti 1K. Test byl proveden na samostatném počítači s Windows Vista.
Jak vidíte, ZeroMQ není úroveň jako nic jiného. Jeho výkon je překvapivě vysoký. Přesto tento produkt neposkytuje perzistenci zpráv, neumožňuje snadno ukládat a monitorovat mezilehlé procesy a vyžaduje samokontrolu a obnovu dat, takže není uspokojivý z hlediska snadnosti používání a HA. Závěr je jasný: pokud chcete, aby aplikace posílala zprávy co nejrychleji, zvolíte ZeroMQ. Je cennější, když vám příliš nezáleží na tom, že náhodou ztratíte určité zprávy.
Blogger v tomto článku doufá (a moc nedoufá), že bude používat Rabbit, Rabbitmq má vestavěné systémy, haha, pokud vytvoříte cluster, nemusíte se obávat problémů jako load balancing a můžete si nastavit zrcadlové fronty. Ale takhle by mělo být víc testování, nakonec získáte oblíbenou postavu, a vše, co jsem o Rabbit slyšel a četl, mi dává pocit, že by to měla být nejlepší volba.
|