ABONAMENTE VIDEO REDACȚIA
RO
EN
NOU
Numărul 148
Numărul 147 Numărul 146 Numărul 145 Numărul 144 Numărul 143 Numărul 142 Numărul 141 Numărul 140 Numărul 139 Numărul 138 Numărul 137 Numărul 136 Numărul 135 Numărul 134 Numărul 133 Numărul 132 Numărul 131 Numărul 130 Numărul 129 Numărul 128 Numărul 127 Numărul 126 Numărul 125 Numărul 124 Numărul 123 Numărul 122 Numărul 121 Numărul 120 Numărul 119 Numărul 118 Numărul 117 Numărul 116 Numărul 115 Numărul 114 Numărul 113 Numărul 112 Numărul 111 Numărul 110 Numărul 109 Numărul 108 Numărul 107 Numărul 106 Numărul 105 Numărul 104 Numărul 103 Numărul 102 Numărul 101 Numărul 100 Numărul 99 Numărul 98 Numărul 97 Numărul 96 Numărul 95 Numărul 94 Numărul 93 Numărul 92 Numărul 91 Numărul 90 Numărul 89 Numărul 88 Numărul 87 Numărul 86 Numărul 85 Numărul 84 Numărul 83 Numărul 82 Numărul 81 Numărul 80 Numărul 79 Numărul 78 Numărul 77 Numărul 76 Numărul 75 Numărul 74 Numărul 73 Numărul 72 Numărul 71 Numărul 70 Numărul 69 Numărul 68 Numărul 67 Numărul 66 Numărul 65 Numărul 64 Numărul 63 Numărul 62 Numărul 61 Numărul 60 Numărul 59 Numărul 58 Numărul 57 Numărul 56 Numărul 55 Numărul 54 Numărul 53 Numărul 52 Numărul 51 Numărul 50 Numărul 49 Numărul 48 Numărul 47 Numărul 46 Numărul 45 Numărul 44 Numărul 43 Numărul 42 Numărul 41 Numărul 40 Numărul 39 Numărul 38 Numărul 37 Numărul 36 Numărul 35 Numărul 34 Numărul 33 Numărul 32 Numărul 31 Numărul 30 Numărul 29 Numărul 28 Numărul 27 Numărul 26 Numărul 25 Numărul 24 Numărul 23 Numărul 22 Numărul 21 Numărul 20 Numărul 19 Numărul 18 Numărul 17 Numărul 16 Numărul 15 Numărul 14 Numărul 13 Numărul 12 Numărul 11 Numărul 10 Numărul 9 Numărul 8 Numărul 7 Numărul 6 Numărul 5 Numărul 4 Numărul 3 Numărul 2 Numărul 1
×
▼ LISTĂ EDIȚII ▼
Numărul 145
Abonament PDF

Broker Pattern în sistemele software moderne

Mihai Darie
Software Architect @ Cognizant



PROGRAMARE

În contextul evoluției rapide a arhitecturii software, comunicarea eficientă și coordonarea între diversele componente și servicii existente sunt esențiale. Broker Pattern (model bazat pe intermediari) reprezintă o soluție structurată care răspunde acestor provocări, prin promovarea principiului loose coupling (asociere slabă) și a scalabilității în cadrul sistemelor distribuite.

Broker Pattern - definiție

În esență, Broker Pattern funcționează ca un intermediar între componente și sisteme. Abstractizând logica de comunicare și coordonare, facilitează o arhitectură de sistem care să fie scalabilă și decuplată. Modelul are la bază trei componente: broker (intermediarul), producers (producătorii), și consumers (consumatorii). Brokerul este componenta centrală responsabilă cu recepționarea, filtrarea și livrarea mesajelor. Producătorii generează mesajele ce urmează să fie procesate, în timp ce consumatorii se abonează la acestea și monitorizează diversele tipuri de mesaje ca să acționeze pe baza lor. Brokerul funcționează precum un intermediar care redirecționează mesajele către recipienți relevanți, pe baza unor reguli predefinite și care gestionează distribuția evenimentelor către abonați multipli. Designul facilitează comunicarea directă, fără a fi necesară partajarea de informații între partidele implicate în comunicare.

Broker Pattern - context

Să analizăm un scenariu real pentru a vedea cum se comportă Broker Pattern în acțiune. Un eveniment Order Completed (comandă finalizată) este publicat în broker. Brokerul transmite apoi acest eveniment către inventar, către sistemul de facturare și către serviciul de notificări. Este posibil ca fiecare din aceste servicii să mai trebuiască să aducă date suplimentare din alte locații, demonstrând capacitatea modelului de a decupla sistemele eficient. În cadrul unei alte instanțe, un mesaj Process Payment (procesare plată) este trimis de la serviciul comenzi către serviciul plăți prin broker, mesaj care conține toate datele necesare ca parte din payload (transfer). Aceste exemple demonstrează rolul versatil al unui broker atât în gestionarea evenimentelor, cât și în redirecționarea mesajelor.

Evenimente vs. Mesaje - aprofundare

Este esențial să înțelegem distincția dintre evenimente și mesaje pentru a folosi Broker Pattern eficient. Evenimentele presupun modificări semnificative de stare sau de ocurență în cadrul sistemului. De asemenea, evenimentele respectă modelul publish-subscribe (publicare-abonare) unde la un eveniment pot reacționa mai mulți abonați. Evenimentele sunt transmise/distribuite tuturor părților implicate, promovând decuplarea, deoarece agenții care publică nu trebuie să știe cine sunt agenții abonați. Invers, mesajele reprezintă comunicarea sau datele trimise de o componentă altei componente, tipic după model point-to-point. Acest fapt presupune o cuplare sau o asociere mai strânsă, din moment ce expeditorul știe cine este destinatarul. Mesajele sunt cereri directe pentru a face ceva sau a primi o anume informație.

Message Queue (coadă de mesaje) vs. Message Broker (broker de mesaje)

O coadă de mesaje păstrează mesajele pentru un eventual consum, după modelul FIFO, în timp ce un broker de mesaje gestionează cozile de mesaje, funcționând mai mult ca un service bus care redirecționează traficul și care decuplează componentele de sistem.

Rolul Broker Pattern în Event-Driven Architecture

Event-Driven Architecture (EDA - arhitectura bazată pe evenimente) este o paradigmă de design în cadrul căreia componentele sistemului comunică și reacționează la evenimente. Broker Pattern joacă un rol important în EDA, având rolul de coloană vertebrală care redirecționează și livrează evenimentele eficient și fiabil.

În cadrul sistemelor de monitorizare în timp real din sănătate, de exemplu, semnele vitale ale pacienților sunt monitorizate continuu prin dispozitive interconectate. Aceste dispozitive generează evenimente de fiecare dată când apar măsurători anormale, precum bătăi cardiace neregulate sau schimbări drastice de tensiune. Un broker redirecționează aceste evenimente esențiale furnizorilor relevanți și sistemelor de alertă. Acest lucru atrage după sine atenția și intervenția cadrului medical, deci implicit salvarea de vieți. De exemplu, un monitor cardiac cu IoT ar putea detecta un ritm cardiac neregulat pe care să îl trimită către broker. Acest broker trimite evenimentul mai departe unui sistem de alertă ce notifică personalul medical, datele fiind logate într-un sistem electronic, iar printr-o aplicație mobilă se trimite o notificare pe telefon mobil pacientului sau familiei.

În cadrul serviciilor financiare, detecția fraudei în timp real este crucială pentru a proteja clienții și integritatea instituțiilor financiare. Tranzacțiile sunt monitorizate continuu, iar activitățile suspecte, precum retragerile mari de numerar sau tranzacțiile rapide și consecutive generează evenimente care, prin broker, sunt trimise unui sistem de detecție a fraudelor și ofițerilor responsabili de conformitate, pentru a se lua măsuri imediate. De exemplu, dacă pe contul unui utilizator se înregistrează, într-un timp foarte scurt, un număr mare de tranzacții, datele acestor tranzacții sunt trimise către broker. Acest broker redirecționează informația unui serviciu de detecție fraudă care analizează tiparul și, dacă e considerat suspicios, generează o alertă pentru echipa de conformitate care poate îngheța contul temporar. Acest mecanism de detecție rapidă și de răspuns imediat previne activitățile frauduloase și reduce potențialele pierderi financiare.

Rolul Broker Pattern în Choreography (coregrafie) și Orchestration (orchestrare)

În sistemele distribuite, Broker Pattern are un rol crucial în coregrafie și orchestrare. Coregrafia implică un sistem în care componentele reacționează la evenimente după care decid independent care sunt următorii pași de urmat. În acest caz, brokerul se asigură că evenimentele sunt transmise tuturor componentelor relevante fără ca aceste componente să-și cunoască una alteia identitatea. De exemplu, pe o platformă e-commerce, un eveniment prin care se finalizează o comandă generează o actualizare a inventarului, procesarea plății și trimiterea notificărilor, toate coordonate de un broker.

Pe de altă parte, orchestrarea presupune un coordonator care gestionează interacțiunea dintre componente. Brokerul facilitează comunicarea dintre orchestrator și componente, asigurându-se că atât comenzile, cât și răspunsurile sunt redirecționate corect. Într-un sistem de rezervări de călătorie, un orchestrator gestionează rezervările de zboruri, hoteluri și mașini, folosind un broker pentru a se comunica cu fiecare serviciu și a gestiona răspunsurile.

Rolul Broker Pattern raportat la SAGA Pattern

SAGA pattern este un tipar de design care gestionează tranzacțiile ce implică microservicii multiple. Practic, sparge o tranzacție mare în tranzacții mai mici, în pași mai mici coordonați de servicii multiple. Brokerul joacă un rol vital în coordonarea acestor pași, asigurându-se că fiecare pas din tranzacția SAGA este transmis serviciilor relevante și că sunt generate tranzacții compensatorii, dacă apar erori. Păstrând mesajele și încercând să le retrimită, brokerul crește fiabilitatea tranzacțiilor distribuite. De exemplu, într-un sistem ce gestionează comenzi, finalizarea unei comenzi presupune pași multipli precum verificarea inventarului, procesarea plății și trimiterea comenzii. Dacă plata eșuează, brokerul inițiază acțiuni compensatorii precum actualizarea inventarului cu noul stoc și anularea livrării.

Broker Pattern - demonstrație pe baza Azure

Azure oferă o serie de servicii care reflectă principiile Broker Pattern, permițând construcția de arhitecturi robuste și decuplate. Fiecare serviciu Azure deservește unor scopuri specifice, oferind flexibilitate adaptată la diverse studii de caz. Prezentăm în detaliu cum funcționează serviciile și de ce acestea sunt ideale pentru scenariile asociate.

Azure Service Bus Queues

Azure Service Bus Queues permit producătorilor să ordoneze mesajele într-o coadă de mesaje pe care consumatorii o pot procesa.

Exemplu: O aplicație web pune comenzile într-o coadă, în timp ce serviciile backend procesează aceste comenzi.

Cum funcționează?

Industria e-commerce: Când un client efectuează o comandă pe un site e-commerce, detaliile comenzii sunt trimise sub formă de mesaj către Service Bus Queue.

Mesajul este stocat/ținut în coada de mesaje până când serviciile backend (de exemplu, procesarea comenzilor, gestionarea inventarului) îl pot procesa.

Serviciul de procesare comenzi verifică periodic coada de mesaje, preia următorul mesaj și procesează comanda prin următorii pași: actualizare de inventar, plată client, generare de detalii de expediere.

De ce este ideal?

Fiabilitate: Mesajele (comenzile) nu se pierd, chiar dacă serviciile backend sunt temporar indisponibile, permițându-se procesarea comenzilor.

Reîncercare automată: Livrarea mesajelor este repetată, reîncercată în cazul unor erori tranzitorii, aspect prioritar pentru a păstra nivelul de satisfacție al clienților în e-commerce.

Decuplare: Producătorii (aplicația web) și consumatorii (serviciile backend) nu trebuie să fie online simultan, ceea ce se traduce în scalare independentă și mentenanță independentă, aspect esențial în gestionarea perioadelor când se efectuează foarte multe cumpărături.

Exemplu suplimentar: Se poate realiza un sistem de bilete unde rezervările sunt puse într-o coadă și sunt procesate de servicii diferite responsabile cu alocarea locurilor și confirmarea plății. Datorită acestui fapt, sistemul rămâne fiabil și răspunde cererii, chiar și în perioadele cu cerere crescută (de pildă, vânzarea biletele de concert).

Azure Service Bus Topics

Azure Service Bus Topics oferă suport pentru un mecanism de mesaje pe tiparul publicare-abonare unde producătorii publică mesaje în topicuri, iar abonații primesc mesaje pe baza abonamentelor lor.

Exemplu: O aplicație publică pe un topic mesaje legate de activitatea utilizatorilor, în timp ce microserviciile se abonează pentru a efectua diverse acțiuni.

Cum funcționează?

Platforme Social Media: Aplicația publică într-un topic mesaje legate de activitățile utilizatorilor (de exemplu, postări, aprecieri, comentarii).

Diverse microservicii se abonează la un topic pe baza funcției: un serviciu actualizează feedul utilizatorilor, un alt serviciu actualizează notificările, iar un alt serviciu analizează interacțiunea utilizatorilor.

Fiecare serviciu abonat primește doar mesajele relevante operațiunilor sale și le procesează în consecință.

De ce este ideal?

Filtrare de mesaje: Abonații primesc doar mesajele de care sunt interesați, reducându-se procesarea care nu este necesară și mărindu-se eficiența, ceea ce este vital pentru interacțiunile social media în timp real.

Scalabilitate: Se oferă suport pentru abonați multipli pe un singur topic, ceea ce permite serviciilor (actualizarea feedurilor, notificări, data analitice) să scaleze independent, aspect esențial în gestionarea a milioane de utilizatori.

Flexibilitate: Se pot adăuga abonați noi fără a modifica producătorii existenți sau alți abonați, permițând extensibilitate și integrare facilă.

Exemplu suplimentar: Într-o aplicație financiară, evenimentele de tranzacționare sunt publicate pe un topic, iar serviciile se abonează pentru a gestiona procesele de evaluare a riscului, de conformitate și de raportare. Astfel, fiecare funcție poate procesa tranzacțiile independent, în același timp menținându-se integritatea generală a sistemului.

Azure Event Hubs

Azure Event Hubs este menit pentru ingestia și procesarea în timp real a unor volume mari de evenimente.

Exemplu: Dispozitivele IoT trimit date de tip senzor către un nod centralizator de evenimente unde se poate efectua atât analiză, cât și procesare backend.

Cum funcționează?

Industria medicală: Monitoarele cardiace ce includ componente IoT ( precum monitoare cardiace, manșete pentru măsurarea presiunii arteriale) trimit date legate de semnele vitale ale pacienților către un Event Hub (nod centralizator de evenimente), în mod continuu.

Event Hub capturează și stochează datele temporar.

Serviciile de procesare backend, precum platformele analitice în timp real sau sistemele AI de monitorizare a stării de sănătate, citesc datele din Event Hub pentru a detecta anomalii și a oferi diagnostice posibile.

De ce este ideal?

Procesare de date: Se pot ingera milioane de evenimente pe secundă, ceea ce este potrivit pentru aplicațiile medicale ce generează continuu cantități mari de date.

Latență redusă: Datele se procesează aproape în timp real, aspect crucial pentru intervențiile medicale ce trebuie efectuate la timp.

Partiționare: Evenimentele de intrare sunt distribuite pe mai multe partiții în vederea procesării paralele, a performanței ridicate și a fiabilității aplicațiilor importante pentru viață.

Exemplu suplimentar: O aplicație ce face streaming live de evenimente sportive trimite scoruri sau punctaje către Event Hubs, unde sunt procesate actualizările și datele analitice. Astfel, fanii primesc informații de ultimă oră, în timp real, în timpul meciului.

Azure Event Grid

Azure Event Grid simplifică programarea bazată pe evenimente prin gestiunea redirecționării evenimentelor.

Exemplu: O aplicație cloud emite evenimente către Event Grid de fiecare dată când se generează evenimente pentru activități precum crearea de resurse, ceea ce declanșează acțiuni în Azure Functions sau Logic Apps.

Cum funcționează?

Servicii financiare: Când se creează un cont nou într-o aplicație bancară, aplicația emite un eveniment către Event Grid.

Event Grid redirecționează evenimentul către abonații predefiniți, precum sunt sistemele de detecție fraudă, instrumentele de audit și conformitate, dar și fluxurile de onboarding pentru clienți.

Fiecare abonat reacționează la eveniment executând acțiuni relevante, precum verificarea contului în ceea ce privește activități suspecte, conformitatea la regulamente și generarea de emailuri și tutoriale pentru clienții noi.

De ce este ideal?

Integrare: Se integrează cu diverse servicii Azure și componente webhooks customizate, ceea ce permite lansarea mai rapidă a fluxurilor complexe din cadrul serviciilor financiare.

Scalabilitate: Se realizează o scalare automată pentru a se face față la volume mari de evenimente, ceea ce permite aplicației bancare să gestioneze crearea unui număr mare de conturi și de actualizări.

Filtrare de evenimente: Se identifică evenimentele țintă relevante pentru abonați specifici, ceea ce permite gestionarea eficientă a evenimentelor și reducerea timpului alocat pentru procesări inutile, ceea ce îmbunătățește calitatea securității și a gradului de conformitate.

Exemplu suplimentar: O platformă e-commerce folosește Event Grid pentru a genera fluxuri de lucru pentru procesarea comenzilor, actualizarea inventarului și generarea de notificări când se efectuează o achiziție. Comunicarea și actualizările eficiente îmbunătățesc nivelul de satisfacție a clienților.

Concluzie

Broker Pattern oferă o abordare flexibilă și scalabilă a comunicării și a coordonării în cadrul sistemelor distribuite. Suita de servicii Azure, incluzând Service Bus Queues, Service Bus Topics, Event Hubs și Event Grid se aliniază perfect principiilor Broker Pattern, ceea ce permite programatorilor să construiască arhitecturi robuste și decuplate. Folosind aceste unelte, organizațiile se pot asigura că dețin sisteme scalabile, fiabile și ușor de menținut. Fiecare serviciu este adaptat unor nevoi specifice, asigurând performanță optimă și eficiență în studii de caz diverse.

Referințe:

  1. Choreography pattern - Azure Architecture Center \| Microsoft Learn

  2. Publisher-Subscriber pattern - Azure Architecture Center \| Microsoft Learn

  3. Queue-Based Load Leveling pattern - Azure Architecture Center \| Microsoft Learn

  4. Priority Queue pattern - Azure Architecture Center \| Microsoft Learn

  5. Event Sourcing pattern - Azure Architecture Center \| Microsoft Learn

  6. Saga pattern - Azure Design Patterns \| Microsoft Learn

  7. Azure Service Bus messaging - queues, topics, and subscriptions - Azure Service Bus \| Microsoft Learn

  8. Azure Event Grid documentation \| Microsoft Learn

  9. Azure Event Hubs documentation \| Microsoft Learn

LANSAREA NUMĂRULUI 148

Agile Craftsmanship

joi, 24 Octombrie, ora 18:30

Colors in Projects (București)

Facebook Meetup StreamEvent YouTube

Agile Leadership &
Ways of Working

miercuri, 30 Octombrie, ora 18:00

ING Hubs Romania (Cluj)

Facebook Meetup StreamEvent YouTube

Conferință TSM

NUMĂRUL 147 - Automotive

Sponsori

  • Accenture
  • BT Code Crafters
  • Accesa
  • Bosch
  • Betfair
  • MHP
  • BoatyardX
  • .msg systems
  • P3 group
  • Ing Hubs
  • Cognizant Softvision
  • Colors in projects