top of page

Wat is event-driven architectuur?


Event Driven Architecture (EDA) is een software-ontwerp patroon dat applicaties in staat stelt om asynchroon met elkaar te communiceren door middel van gebeurtenissen (events). Deze gebeurtenissen zijn berichten die veranderingen in de staat van een systeem of domein vertegenwoordigen, bijvoorbeeld wanneer een gebruiker op een knop klikt, een sensor een temperatuurverandering detecteert of wanneer er een bestelling wordt geplaatst.


Bij EDA zijn er vier hoofdcomponenten: gebeurtenis producenten, gebeurtenis consumenten, gebeurtenis kanalen en gebeurtenis brokers. Gebeurtenis producenten zijn de bronnen van gebeurtenissen, zoals gebruikersinterfaces, sensoren of externe systemen. Gebeurtenis consumenten zijn de bestemmingen van gebeurtenissen, zoals services, functies of databases. Gebeurtenis kanalen zijn de paden die gebeurtenis producenten en consumenten met elkaar verbinden, zoals berichtenwachtrijen, onderwerpen of streams. Gebeurtenis brokers zijn de tussenpersonen die het routeren en afleveren van gebeurtenissen tussen gebeurtenis kanalen en gebeurtenis consumenten beheren, zoals Apache Kafka, Azure Event Grid of AWS EventBridge.


De voordelen van EDA zijn:

  • Ontkoppeling: EDA vermindert de afhankelijkheden tussen componenten, waardoor ze onafhankelijk kunnen evolueren en horizontaal kunnen schalen.

  • Responsiviteit: EDA maakt snellere en meer responsieve applicaties mogelijk door blokkerende oproepen te vermijden en parallelle verwerking te benutten.

  • Veerkracht: EDA verbetert de fouttolerantie en betrouwbaarheid van applicaties door het mogelijk maken van herhaalpogingen, fallbacks en fout-afhandelingsmechanismen.

  • Schaalbaarheid: EDA vergemakkelijkt het toevoegen van nieuwe functies en mogelijkheden door nieuwe gebeurtenis producenten en consumenten toe te staan om zich bij het systeem aan te sluiten zonder bestaande te beïnvloeden.

  • Traceerbaarheid: EDA biedt betere zichtbaarheid en monitoring van het gedrag en de prestaties van het systeem door het vastleggen en registreren van gebeurtenissen.



De uitdagingen van EDA zijn:

  • Complexiteit: EDA introduceert extra complexiteit en overhead in termen van het ontwerpen, ontwikkelen, testen, implementeren en onderhouden van op gebeurtenissen gebaseerde applicaties.

  • Consistentie: EDA vereist zorgvuldige coördinatie en synchronisatie van gebeurtenissen om de consistentie en integriteit van gegevens over gedistribueerde componenten te waarborgen.

  • Beveiliging: EDA vormt beveiligingsrisico's en uitdagingen op het gebied van het versleutelen, authenticeren, autoriseren en controleren van gebeurtenissen.

  • Kwaliteit: EDA vereist hoge kwaliteit en betrouwbaarheid van evenementen op het gebied van format, inhoud, timing en accuraatheid.


Om EDA succesvol te implementeren, zijn er enkele best practices:

  • Definieer duidelijke en consistente gebeurtenisschema's en contracten die de structuur, semantiek en metadata van gebeurtenissen specificeren.

  • Gebruik standaard en interoperabele protocollen en formaten voor gebeurteniscommunicatie, zoals HTTP, AMQP, MQTT of JSON.

  • Implementeer gebeurtenis-gedreven workflows en patronen die passen bij de bedrijfslogica en -vereisten van de toepassing, zoals publish-subscribe, request-reply of saga.

  • Pas principes van event sourcing en CQRS toe om de statuswijzigingen van het systeem vast te leggen als een reeks gebeurtenissen en de lees- en schrijfmodellen van gegevens te scheiden.

  • Adopteer microservices-architectuur en serverloze computing om modulaire, schaalbare en veerkrachtige event driven toepassingen te bouwen.



Event driven architectuur is een krachtige en flexibele manier om moderne toepassingen te ontwerpen die complexe en dynamische scenario's aankunnen. Door de voordelen, uitdagingen en best practices te begrijpen, kunnen ontwikkelaars EDA gebruiken om high-performance, schaalbare en betrouwbare softwaresystemen te creëren.


Laten we eens kijken naar drie praktische use-cases van event driven architectuur en hoe het verschillende domeinen en scenario's ten goede kan komen.



1. Internet of Things (IoT)

IoT is een domein waarin apparaten en sensoren verbonden zijn met internet en grote hoeveelheden gegevens genereren. Een event driven architectuur kan IoT-systemen helpen om gegevens bijna in realtime te verwerken en analyseren, evenals acties te activeren op basis van gebeurtenissen. Bijvoorbeeld, een IoT-systeem kan een event streaming platform, zoals AzureIoT Hub of Apache Kafka, gebruiken om gegevens van apparaten te verzamelen en deze te voeden naar stream processors die taken kunnen uitvoeren zoals filtering, aggregatie, anomaliedetectie of machine learning. De stream processors kunnen ook gebeurtenissen publiceren naar andere services of toepassingen die dienovereenkomstig kunnen reageren. Als bijvoorbeeld een stream processor een hoge temperatuur detecteert in een apparaat, kan het een gebeurtenis publiceren naar een service die een waarschuwing naar de eigenaar van het apparaat kan sturen of een koelmechanisme kan starten.


2. Microservices

Microservices zijn een software-architectuurstijl waarbij toepassingen zijn samengesteld uit kleine, onafhankelijke en losjes gekoppelde services die communiceren via goed gedefinieerde interfaces. Een event driven architectuur kan microservices helpen om hoge schaalbaarheid, beschikbaarheid en veerkracht te bereiken, evenals afhankelijkheden te ontkoppelen en koppeling te verminderen. Bijvoorbeeld, een microservice kan een publish/subscribe-model gebruiken om gebeurtenissen te publiceren naar een message broker, zoals Azure Service Bus of RabbitMQdie ze vervolgens aan andere geïnteresseerde microservices levert. Op deze manier hoeft de microservice niet te weten wie de gebeurtenissen verbruikt of hoe ze worden verwerkt. De consumenten kunnen ook onafhankelijk schalen en fouten op een elegante manier afhandelen zonder de producent te beïnvloeden.


3. Bedrijfsprocesautomatisering

Bedrijfsprocesautomatisering is een praktijk waarbij bedrijfsprocessen worden geautomatiseerd met behulp van softwaretools en -technologieën. Een op gebeurtenissen gebaseerde architectuur kan bedrijfsprocesautomatisering helpen om complexe workflows over meerdere systemen en services te orchestreren, evenals de uitvoering van de processen te monitoren en te auditen. Bijvoorbeeld, een systeem voor bedrijfsprocesautomatisering zou een complexe gebeurtenisverwerkingsengine kunnen gebruiken, zoals Azure Stream Analytics of Apache Storm, om gebeurtenissen van verschillende bronnen te correleren en regels of logica toe te passen om acties of beslissingen te triggeren. De acties of beslissingen kunnen worden geïmplementeerd door andere services of applicaties aan te roepen via gebeurtenissen of berichten. Het systeem kan ook de status en voortgang van de processen bijhouden en gebeurtenissen genereren voor rapportage- of auditdoeleinden.


Op gebeurtenissen gebaseerde architecturen zijn een populaire manier om software systemen te ontwerpen die kunnen reageren op veranderingen in de staat, zoals gebruikersacties, sensorinvoer of berichten van andere systemen. Laten we ook twee alternatieven voor op gebeurtenissen gebaseerde architecturen beschrijven: pub/sub en gebeurtenisstreaming.


Pub/sub staat voor publiceer/abonneer en het is een model waarbij gebeurtenisproducenten gebeurtenissen naar een berichteninfrastructuur sturen die abonnementen bijhoudt. De berichteninfrastructuur levert vervolgens de gebeurtenissen aan elke abonnee, die ze dienovereenkomstig kan verwerken. Pub/sub is handig wanneer u de gebeurtenisproducenten wilt loskoppelen van de gebeurtenisconsumenten en wanneer u ervoor wilt zorgen dat elke gebeurtenis naar elke abonnee wordt geleverd. Pub/sub heeft echter enkele beperkingen, zoals:

  • Gebeurtenissen kunnen niet opnieuw worden afgespeeld nadat ze zijn ontvangen, wat betekent dat nieuwe abonnees geen eerdere gebeurtenissen zien en dat gebeurtenissen verloren kunnen gaan als een abonnee offline is of faalt.

  • Gebeurtenissen zijn niet geordend of duurzaam, wat betekent dat abonnees gebeurtenissen in willekeurige volgorde kunnen ontvangen of sommige gebeurtenissen kunnen missen als gevolg van netwerkstoringen of congestie.

  • Gebeurtenissen worden niet opgeslagen, wat betekent dat abonnees geen historische gebeurtenissen kunnen opvragen of analyseren of complexe gebeurtenisverwerking kunnen uitvoeren.


Event streaming is een andere alternatief voor event-driven architecturen en het is een model waarbij gebeurtenissen worden geschreven naar een logboek dat een strikte volgorde en duurzaamheid van gebeurtenissen bijhoudt. Gebeurtenisconsumenten abonneren zich niet op het logboek, maar lezen in hun eigen tempo vanuit elk deel van het logboek. Event streaming is nuttig wanneer u gebeurtenis-herafspeelbaarheid, volgorde, duurzaamheid en persistentie wilt inschakelen en wanneer u complexe gebeurtenisverwerking en analyse wilt ondersteunen. Er zijn echter ook uitdagingen bij event streaming, zoals:

  • Gebeurtenisconsumenten moeten hun eigen offsets in het logboek beheren, wat betekent dat ze moeten bijhouden waar ze zich bevinden in het logboek en hoe ze hun positie kunnen verhogen.

  • Gebeurtenisconsumenten moeten dubbele gebeurtenissen verwerken, die kunnen optreden als gevolg van herhaalpogingen of storingen in het logboek.

  • Gebeurtenisconsumenten moeten schema-evolutie verwerken, wat betekent dat ze moeten omgaan met veranderingen in de structuur of opmaak van de gebeurtenissen in de loop van de tijd.


Beide pub/sub en event streaming hebben hun voor- en nadelen, en de keuze tussen hen hangt af van de vereisten en kenmerken van uw systeem. Over het algemeen is pub/sub eenvoudiger en sneller, maar minder betrouwbaar en expressief. Event streaming is betrouwbaarder en expressiever, maar complexer en langzamer. U moet factoren zoals latentie, doorvoer, schaalbaarheid, betrouwbaarheid, consistentie en complexiteit overwegen bij het beslissen welke alternatief beter bij uw behoeften past.

Comments


bottom of page