TSM - Ce sistem de distribuire de mesaje din Azure să folosesc?

Radu Vunvulea - Solution Architect

În teorie, trimiterea unui mesaj prin cablu înspre un alt dispozitiv este o sarcină simplă. Dar trimiterea unui mesaj într-un mod sigur și de încredere poate fi o sarcină dificilă. În epoca IoT, în care numărul dispozitivelor conectate la internet crește dramatic în fiecare zi, noi trebuie să găsim diferite mecanisme de comunicare.

Deoarece nu putem controla când un dispozitiv este conectat la internet și pregătit să primească mesajul nostru, e important să detectăm diferite modalități de a comunica cu el.

În acest articol, vom arunca o privire asupra diferitelor sisteme de mesagerie care sunt oferite de către Microsoft Azure. Pentru fiecare sistem de mesagerie vom încerca să identificăm punctele forte și când ar trebui să îl utilizăm. Odată ce vom fi înțeles fiecare sistem de mesagerie, le vom compara unul câte unul.

În finalul acestui articol vom identifica un sistem de mesagerie perfect, care poate fi utilizat în orice situație. Pentru diferite cazuri de utilizare s-ar putea să fie nevoie să folosim sisteme de mesagerie diferite, în funcție de nevoile noastre.

Soluțiile de mesagerie care vor fi discutate în acest articol sunt următoarele:

Azure Storage Queues

Acest sistem de mesagerie face parte din Azure Storage și ne permite să stocăm multe mesaje în același șir. Când spun multe, imaginați-vă șiruri care pot ajunge nu la 1 GB, nu la 1TB și nu la 10TB, ci chiar la un șir de 200TB. De aceea, suntem capabili să depozităm cantități mari de date în șiruri, fără a ne gândi la dimensiunea șirului.

Un alt avantaj al acestui tip de șir este numărul clienților concurenți, care teoretic este nelimitat. Singura limită în acest caz este lățimea de bandă care poate limita numărul clienților concurenți. Dimensiunea maximă a unui mesaj este de 64 KB, dar în blocuri combinate putem avea mesaje care ajung la 200 GB.

Bineînțeles că mai există anumite limitări pe care trebuie să le luăm în considerare. În primul rând, chiar dacă dimensiunea șirului poate fi foarte extinsă, timpul maxim de plecare (Time To Leave - TTL) al unui mesaj este de 7 zile. Aceasta înseamnă că un mesaj trebuie să fie consumat în 7 zile sau reînnoit, altfel, mesajul va fi șters.

Chiar dacă avem suport pentru capacități de mesagerie de bază precum monitor de înlănțuire și suport lot de date, nu avem suport pentru management de stare, detectarea duplicării și suport pentru tranzacții.

O caracteristică interesantă a Azure Storage Queues este capacitatea de logging. Utilizatorii au posibilitatea de a activa mecanismul de logging și de a urmări toate acțiunile care au loc în șir. Informațiile precum IP-ul clientului sunt urmărite și stocate drept o soluție de-a gata.

Clienții au posibilitatea de a se uita la mesajele din șir, fără a le șterge sau bloca. Aceasta înseamnă că, dacă un client se uită la un mesaj, și alți clienți vor putea accesa același mesaj din șir.

Din acest motiv, Azure Storage Queues este foarte eficient când ai nevoie de un sistem de mesagerie care să fie capabil să urmărească toate acțiunile care au loc în șir. Acesta este o soluție bună pentru cazurile de utilizare în care știi că dimensiunea șirului va fi mai mare de 80-100 GB. Pentru șirurile mari, acesta poate fi cel mai bun mecanism de șiruri.

Azure Service Bus Queues

Acest sistem de mesagerie face parte dintr-o infrastructură mai complexă de mesagerie oferită de Microsoft și suportă scenarii mai complexe. Din această cauză, vom vedea că dimensiunea unui șir este limitată la 80GB, dar caracteristicile oferite de Service Bus Queues sunt mai complexe.

Este important de știut de la început că aceste două sisteme de mesagerie sunt construite pe servicii diferite și nu au nimic în comun. Dimensiunea unui mesaj poate fi de 256 KB, mai mare în comparație cu Azure Storage Queues și de asemenea un mesaj va fi păstrat în Service Bus pentru o perioadă nelimitată de timp. În plus, există suport complet pentru protocolul AMPQ, caracteristică ce poate fi foarte utilă pentru dispozitivele încorporate.

Există suport pentru mesajele moarte (dead lettering), ceea ce ne permite să mutăm automat un mesaj într-un șir secundar, dacă acel mesaj expiră sau clientul nu poate consuma un anumit mesaj. Există suport complet pentru tranzacții, gestionarea unui număr specific de mesaje în aceeași tranzacție. Mai mult decât atât, există suport pentru mesaje multiple de grup în aceeași sesiune - în acest fel ne putem asigura că un client își va consuma toate mesajele care fac parte dintr-o sesiune anume. Dacă știm ID-ul sesiunii, putem consuma mesajele din acea sesiune anume.

O caracteristică interesantă a Azure Service Bus Queues este detectarea dublurilor. Odată ce este activată, putem detecta mesajele duplicate. În momentul în care dorim să adăugăm un mesaj care deja există în sistem, mesajul nu va fi adăugat. Acest lucru este grozav când dorim să ne asigurăm că avem mesaje unice în șir.

Mesajele pot fi consumate din șir în două moduri diferite - Peek and Lock (Privește și Blochează) sau Receive and Delete (Primește și Șterge). Ne putem uita la un mesaj dintr-un șir și îl putem face indisponibil pentru restul clienților până când vom confirma că l-am consumat cu succes sau vom anula acțiunea (putem de asemenea specifica un timeout - o pauză).

Capacitatea de securitate a Azure Service Bus Queues este mai complexă; noi avem posibilitatea de a controla mai profund accesul la mesaje.

Pe baza acestor caracteristici, Azure Service Bus Queues sunt grozave atunci când este nevoie de detectarea duplicatului, suport pentru tranzacții sau depozitarea mesajelor pe termen nelimitat.

Azure Service Bus Topics

Spre deosebire de Azure Service Bus Queues care ne permite să livrăm mesajele unul la unul, Azure Service Bus Topics ne permite să livrăm un mesaj la mulți. Acest lucru înseamnă că noi putem furniza același mesaj la clienți multipli care se numesc subsribers (abonați). Acest sistem de mesagerie este în fond un sistem ESB (Enterprise Service Bus), care ne permite să avem o comunicare de tipul "publică/subscrie".

Din perspectiva caracteristicilor, acestea sunt foarte asemănătoare cu Azure Service Bus Queues, având câteva funcționalități și posibilități adiționale. Asemănarea celor două servicii se datorează faptului că ambele sisteme de mesagerie sunt construite pe același sistem de infrastructură de mesagerie broker.

Fiecare temă care este utilizată pentru a trimite mesaje poate avea maxim 2000 de abonați, însemnănd că același mesaj poate fi primit de 2000 de abonați. Acest lucru poate fi foarte util atunci când trebuie să distribuim mesaje către diferite sisteme. De asemenea, o subscriere poate fi adăugată în timpul de rulare. Nu este nevoie să oprim sistemul sau să recreăm tema. Odată ce o nouă subscriere a fost creată, toate mesajele noi care sunt trimise către acea temă vor fi primite și de către noua subscriere.

O caracteristică interesantă este suportul filtru. Noi putem atașa un filtru la fiecare subscriere. Acel filtru va permite numai mesajelor care respectă regula filtrului să ajungă la aceeași subscriere anume. În acest fel, fiecare subscriere poate asculta mesaje specifice.

Ambele sisteme de mesagerie, Azure Service Bus Topics și Queues au capacități de trimitere mai departe automată, dar pentru Topics, acestea sunt mai interesante. Aceasta înseamnă că noi putem trimite mai departe automat un mesaj dintr-o subscripție către un alt Service Bus Topic al Queue.

Fiecare mesaj care este trimis printr-un Service Bus poate avea o colecție de proprietăți. Proprietățile sunt utilizate atunci când este aplicat un filtru de comandă per subscriere. De asemenea, fiecare subscriere poate avea o acțiune la comandă care este executată atunci când primește un mesaj. Chiar dacă acțiunile care pot fi executate sunt foarte simple, poate fi foarte util în anumite situații - de exemplu, ne este permis să schimbăm numele valorii proprietății.

Datorită proprietăților sale, Azure Service Bus Topics este perfect de utilizat atunci când este nevoie să distribuim un mesaj către mai mulți ascultători. În sistemele în care numărul clienților care ar trebui să primească un mesaj se poate schimba în mod dinamic, Azure Service Bus Topics poate fi util.

Azure Event Hub

Chiar dacă, teoretic, face parte din Azure Service Bus, Azure Event Hub este un sistem de mesagerie special care este obișnuit să înghită cantități mari de date într-o perioadă scurtă de timp. Acest sistem este capabil să înghită peste 1 milion de mesaje pe secundă, fără niciun fel de problemă.

Este construit pe conceptul de curgere. Din această cauză, toate mesajele care plutesc în sistem sunt văzute drept un flux de date. Latența este foarte scăzută și chiar dacă cantitatea de date care curg este foarte mare, sistemul este stabil și fiabil.

O caracteristică interesantă a acestui sistem este capacitatea de a naviga între mesajele pe care le-am primit deja. Avem un concept similar cu un cursor și putem itera de asemenea și vechile mesaje - capacitatea de a răspunde. Mai mult, fluxul de mesaje poate ajunge la mai mulți clienți în același timp, utilizând conceptul de grup al clienților.

O calitate importantă care poate fi găsită la Azure Service Bus este păstrarea ordinii mesajelor. Aceasta înseamnă că ordinea mesajelor se păstrează. Clienții vor putea să consume mesajele în ordinea în care ele au fost trimise.

Capacitățile sistemului Event Hub pot scala destul de interesant, prin adăugarea de TU multipli (Throughput Units). Fiecare TU ne permite 1 MB/s pentru intrare și 2 MB/s pentru ieșire. Retenția unui mesaj este de o zi, fiind capabil să le depoziteze până la 7 zile.

Bineînțeles că aceasta vine cu anumite costuri. Caracteristici precum șirul scrisorilor moarte, suport pentru tranzacții sau opțiuni TTL nu pot fi găsite pe Azure Event Hub.

Această soluție este perfectă pentru volumuri mari de procesare de mesaje, cum ar fi telemetria sau în cazurile de utilizare IoT.

Care este cea mai bună soluție?

Nu există un răspuns unic la această întrebare. În funcție de nevoile noastre și de cerințe, putem utiliza sisteme diferite de mesagerie. Azure Storage Queues este perfect când este nevoie să depozităm și să gestionăm cantități mari de mesaje, dar, când avem nevoie de mai mult control, Azure Service Bus Queues poate fi o soluție mai bună. Pentru cazurile de utilizare în care avem nevoie să distribuim mesaje mai multor ascultători, Azure Service Bus Topic este cel mai bun. Dar pentru volum mare de procesare a mesajelor, nimic nu se compară cu Azure Event Hub.

Concluzie

În acest articol ne-am uitat la diferite sisteme de mesagerie oferite de Azure și am identificat cele mai importante caracteristici ale fiecăruia. Am văzut cele mai importante cazuri de utilizare în care putem folosi aceste sisteme și care sunt punctele lor slabe. În final, aș dori să vă invit să vedeți web site-ul Azure și să descoperiți mai multe despre aceste servicii grozave.