Acest articol este un articol oglindă al traducerii automate, vă rugăm să faceți clic aici pentru a sări la articolul original.

Vedere: 12210|Răspunde: 0

Analiza selecției tehnice a middleware-ului din coada de mesaje

[Copiază linkul]
Postat pe 15.12.2016 10:52:40 | | | |
Middleware-ul de mesaje este o tehnologie middleware compusă dintr-un mecanism de transmitere a mesajelor sau mod coadă de mesaje, care folosește un mecanism de mesagerie eficient și fiabil pentru schimbul de date independent de platformă și integrează sisteme distribuite bazate pe comunicarea datelor. În prezent, există multe produse MQ în industrie, precum RabbitMQ, ActiveMQ, ZeroMQ etc., care sunt middleware excelente pentru mesaje, dar pe care ar trebui să o alegem în proiect? Această lucrare evaluează și compară următoarele produse de coadă de mesaje: RabbitMQ, ZeroMQ, ActiveMQ, MSMQ, Redis și memcacheQ

Digresiune: Aici putem mai întâi să ne gândim la o întrebare mică: "De ce avem nevoie de servicii de coadă de mesaje în aplicațiile web?" ”
De exemplu, un număr mare de cereri de inserare, actualizare și alte cereri ajung simultan la MySQL, ducând direct la nenumărate blocări de rânduri și tabele, și chiar prea multe cereri la final, declanșând astfel prea multe erori de conexiune. Prin utilizarea cozilor de mesaje, putem procesa cererile asincron, reducând presiunea asupra sistemului.

RabbitMQ
Este o coadă de mesaje open source scrisă în Erlang, care suportă multe protocoale: AMQP, XMPP, SMTP, STOMP, ceea ce o face foarte grea și mai potrivită pentru dezvoltare la nivel enterprise. Este o implementare de top a protocolului AMQP, care implementează o arhitectură de broker, ceea ce înseamnă că mesajele pot fi puse în coadă pe un nod central înainte de a fi trimise către client. Există un suport bun pentru rutare, echilibrare a încărcării sau persistența datelor. Această caracteristică face ca RabbitMQ să fie ușor de folosit și implementat, potrivit pentru multe scenarii precum rutare, echilibrarea încărcării sau persistența mesajelor, și poate fi realizată cu doar câteva linii de cod prin cozi de mesaje. Totuși, acest lucru îl face mai puțin scalabil și mai lent, deoarece nodul central crește latența și devine mai mare după încapsularea mesajului. Pentru a configura RabbitMQ, trebuie să instalezi mediul Erlang pe mașina țintă.
Faceți clic pentru a vedea această imagine într-o fereastră nouă

? MQ(ZeroMQ)
Este cunoscut ca fiind cel mai rapid sistem de coadă pentru mesaje, în special pentru scenarii cu cerere cu debit ridicat. Este un sistem de mesagerie foarte ușor, dezvoltat special pentru scenarii cu debit ridicat și latență scăzută și poate fi adesea găsit în aplicații din lumea financiară. Comparativ cu RabbitMQ, ZeroMQ suportă multe scenarii avansate de mesaje, dar trebuie să implementezi blocuri individuale în cadrul ZeroMQ (cum ar fi socket-uri sau dispozitive etc.).

? MQ (ZeroMQ) poate implementa cozi avansate/complexe la care RabbitMQ nu este bun, dar dezvoltatorii trebuie să combine singuri mai multe cadre tehnice, iar complexitatea tehnică reprezintă o provocare pentru aplicarea cu succes a acestui MQ. ZeroMQ are un model unic, non-middleware, unde nu trebuie să instalezi și să rulezi un server de mesaje sau middleware pentru că aplicația ta va juca acest rol de serviciu. Tot ce trebuie să faci este să consulți biblioteca ZeroMQ, care poate fi instalată folosind NuGet, și poți trimite cu plăcere mesaje între aplicații. Totuși, ZeroMQ oferă doar cozi nepersistente, ceea ce înseamnă că, dacă mașina cade, datele se vor pierde. Printre acestea, Storm de la Twitter folosește ZeroMQ pentru transmiterea fluxurilor de date. ZeroMQ este foarte flexibil, dar trebuie să înveți manualul său de 80 de pagini (dacă scrii despre un sistem distribuit, asigură-te că îl citești).

ZeroMQ nu are arhitectură middleware și nu necesită procese sau rulări de serviciu. De fapt, endpoint-ul aplicației tale joacă acest rol de serviciu. Acest lucru îl face foarte simplu de implementat, dar îngrijorarea este că nu ai unde să urmărești dacă ceva nu merge bine cu el. Din câte știm, ZeroMQ oferă doar cozi nepersistente. Poți implementa propriile tale capacități de audit și recuperare a datelor acolo unde ai nevoie.
Faceți clic pentru a vedea această imagine într-o fereastră nouă

MSMQ
Acesta este singurul lucru din produsul Microsoft considerat valoros. Dacă MSMQ poate demonstra că poate gestiona acest tip de sarcină, va alege să o folosească. Ideea este că acest lucru nu este complicat, nimic altceva decât să primească și să trimită; Are unele limitări stricte, cum ar fi dimensiunea maximă a mesajului de 4MB. Totuși, poate rezolva aceste probleme conectându-se la un software precum MassTransit sau NServiceBus.
Faceți clic pentru a vedea această imagine într-o fereastră nouă

Jafka/Kafka
Kafka (care distribuie mesaje între diferite noduri) este un sistem MQ distribuit dezvoltat și open-source de LinkedIn în decembrie 2010 și este acum un proiect de incubare al Apache, un sistem distribuit de înaltă performanță cross-limb pentru coada mesajelor Publish/Subscribe, iar Jafka este incubat peste Kafka, care este o versiune îmbunătățită a Kafka. Are următoarele caracteristici: persistență rapidă, care poate persista mesajele sub costul sistemului O(1); Debit ridicat, care poate atinge o rată de 10W/s pe un server obișnuit; Sistemul complet distribuit, Broker, Producător și Consumator susțin nativ distribuitul și ating automat un echilibru complex. Suportă încărcarea paralelă a datelor Hadoop, care este o soluție viabilă pentru date de jurnal și sisteme de analiză offline precum Hadoop, dar cu limitările procesării în timp real. Kafka unifică procesarea mesajelor online și offline prin mecanismul de încărcare paralelă al Hadoop, care este de asemenea important pentru sistemul studiat în acest domeniu. Apache Kafka este un sistem de mesagerie foarte ușor comparativ cu ActiveMQ și, pe lângă performanțe foarte bune, este și un sistem distribuit care funcționează bine.
Faceți clic pentru a vedea această imagine într-o fereastră nouă

Apache ActiveMQ
ActiveMQ se situează undeva între cele două (RabbitMQ și ZeroMQ), similar cu ZemoMQ, și poate fi implementat atât în moduri proxy, cât și P2P. Similar cu RabbitMQ, este ușor de implementat scenarii avansate și necesită un consum redus.
ActiveMQ este cunoscut ca coloana vertebrală a lumii Java. Are o istorie îndelungată și este larg folosită. Este, de asemenea, cross-platform, oferind un punct de acces natural de integrare pentru produsele care nu sunt pe platforma Microsoft. Totuși, este posibil să fie luat în considerare doar dacă a trecut de MSMQ. Pentru a configura ActiveMQ, trebuie să instalezi mediul Java pe mașina țintă.
Faceți clic pentru a vedea această imagine într-o fereastră nouă
Este important de menționat că produsul de nouă generație al ActiveMQ este Apollo, care se bazează pe prototipul ActiveMQ și este un instrument de broker de mesaje mai rapid, mai fiabil și mai ușor de întreținut. Apache numește Apollo cel mai rapid și robust server STOMP (Streaming Text Oriented Message Protocol).
Caracteristicile lui Apollo sunt următoarele:
Protocoalele Stomp 1.0 și Stomp 1.1 sunt suportate
Subiecte și cozi
Browser de cozi
Abonamente persistente cu teme
Coada oglindă
Mesagerie fiabilă
Expirarea și schimbul mesajelor
Selector de mesaje
JAAS verificat
Autorizare bazată pe ACL
Suport SSL/TLS și validarea certificatelor
API-ul de Management REST
Faceți clic pentru a vedea această imagine într-o fereastră nouă

Redis
Este o bază de date NoSQL cheie-valoare, care este dezvoltată și întreținută activ, deși este un sistem de stocare a bazei de date cheie-valoare, dar suportă funcții MQ, astfel încât poate fi folosită ca un serviciu ușor de coadă. Pentru operațiunile de onboarding și out-queue ale RabbitMQ și Redis, de 1 milion de ori fiecare, iar timpul de execuție este înregistrat la fiecare 100.000 de ori. Datele de test sunt împărțite în patru dimensiuni diferite: 128Bytes, 512Bytes, 1K și 10K. Experimentele arată că, atunci când se alătură echipei, performanța Redis este mai mare decât cea a RabbitMQ atunci când comparația datelor este mică, iar dacă dimensiunea datelor depășește 10K, Redis este insuportabil de lent. La ieșirea din echipă, Redis a arătat performanțe foarte bune indiferent de dimensiunea datelor, în timp ce performanța RabbitMQ a fost mult mai scăzută decât cea a lui Redis.

MemcacheQ
Coada de mesaje persistente Memcacheq (pe scurt MCQ) este o coadă de mesaje ușoară, cu funcții MemcacheQ:
1 Simplu și ușor de folosit
2 Procesare rapidă
3 Cozi multiple
4 Performanțe bune în concurență
5 Compatibil cu protocolul Memcache. Asta înseamnă că doar instalezi extensia memcache, fără a fi nevoie de pluginuri suplimentare.
6 Este de asemenea convenabil de folosit în cadrul zend.

În cele din urmă, aceste produse:
1. Ambele au propriile API-uri client sau suportă mai multe limbaje de programare;
2. Există multă documentație;
3. A fost oferit sprijin pozitiv.
4. ActiveMQ, RabbitMQ, MSMQ, Redis trebuie toate să pornească procese de serviciu, care pot fi monitorizate și configurate, iar celelalte sunt problematice
5. Toate oferă o fiabilitate relativ bună (consistență), scalabilitate și echilibrare a încărcării și, bineînțeles, performanță

Nu voi spune prostii aici, mai jos este atașat un set de rezultate ale testelor interceptate de pe Internet. Este afișat numărul de mesaje trimise și primite pe secundă. Întregul proces a generat un total de 1 milion de mesaje de 1.000 de mesaje. Testul a fost efectuat pe o mașină independentă cu Windows Vista.


După cum vezi, ZeroMQ nu este un nivel ca nimic altceva. Performanța sa este surprinzător de ridicată. Cu toate acestea, acest produs nu oferă persistență a mesajelor, nu poate stoca și monitoriza ușor procesele intermediare și necesită auto-auditare și recuperare a datelor, astfel că nu este satisfăcător din punct de vedere al ușurinței de utilizare și al HA. Concluzia este clară: dacă vrei ca o aplicație să trimită mesaje cât mai rapid posibil, alegi ZeroMQ. Este mai valoros când nu-ți pasă prea mult să pierzi anumite mesaje din întâmplare.

Bloggerul din acest articol speră (și nu speră prea mult) să folosească Rabbit, Rabbitmq are o aplicație integrată, ha, dacă formezi un cluster, nu este nevoie să-ți faci griji pentru probleme precum echilibrarea încărcării și poți configura o oglindă a cozii. Dar genul acesta de situații înseamnă că ar trebui să fie mai multe teste și să ajungi cu un favorit, iar toate lucrurile pe care le-am auzit și citit despre Rabbit mă fac să simt că ar trebui să fie cea mai bună alegere.





Precedent:C#/.NET citește codul sursă al informației hash din torrentul torrent
Următor:Interfaza Cheie Principală WiFi Interogare parolă WiFi
Disclaimer:
Tot software-ul, materialele de programare sau articolele publicate de Code Farmer Network sunt destinate exclusiv scopurilor de învățare și cercetare; Conținutul de mai sus nu va fi folosit în scopuri comerciale sau ilegale, altfel utilizatorii vor suporta toate consecințele. Informațiile de pe acest site provin de pe Internet, iar disputele privind drepturile de autor nu au legătură cu acest site. Trebuie să ștergi complet conținutul de mai sus de pe calculatorul tău în termen de 24 de ore de la descărcare. Dacă îți place programul, te rugăm să susții software-ul autentic, să cumperi înregistrarea și să primești servicii autentice mai bune. Dacă există vreo încălcare, vă rugăm să ne contactați prin e-mail.

Mail To:help@itsvse.com