<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>EDE &#8211; Smals Research</title>
	<atom:link href="https://www.smalsresearch.be/tag/ede/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.smalsresearch.be</link>
	<description></description>
	<lastBuildDate>Thu, 09 Apr 2026 12:19:12 +0000</lastBuildDate>
	<language>en-GB</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://www.smalsresearch.be/wp-content/uploads/2026/01/cropped-cropped-Smals_Research-32x32.png</url>
	<title>EDE &#8211; Smals Research</title>
	<link>https://www.smalsresearch.be</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Serverless Architecture: Is Software nu Lego?</title>
		<link>https://www.smalsresearch.be/serverless-architecture-is-software-nu-lego/</link>
		
		<dc:creator><![CDATA[Koen Vanderkimpen]]></dc:creator>
		<pubDate>Tue, 17 Dec 2019 08:23:22 +0000</pubDate>
				<category><![CDATA[[NL]]]></category>
		<category><![CDATA[Blog post]]></category>
		<category><![CDATA[architecture]]></category>
		<category><![CDATA[cloud computing]]></category>
		<category><![CDATA[Container]]></category>
		<category><![CDATA[EDA]]></category>
		<category><![CDATA[EDE]]></category>
		<category><![CDATA[Event]]></category>
		<category><![CDATA[FaaS]]></category>
		<category><![CDATA[FPaaS]]></category>
		<category><![CDATA[Kubernetes]]></category>
		<category><![CDATA[microservices]]></category>
		<category><![CDATA[PaaS]]></category>
		<category><![CDATA[Productivity]]></category>
		<category><![CDATA[Serverless]]></category>
		<category><![CDATA[Software architectures]]></category>
		<category><![CDATA[software design]]></category>
		<category><![CDATA[software engineering]]></category>
		<guid isPermaLink="false">/?p=13933</guid>

					<description><![CDATA[Serverless: de ideale link tussen APIs, Events, en je eigen code. Serverless Computing is een Cloud Computing model waarbij de gebruikers enkel code en een stuk configuratie aanleveren voor een beoogde software, en de cloud provider de volledige verantwoordelijkheid in handen neemt voor het beheer van de onderliggende resources (rekenkracht, geheugen, netwerk, etc.). De gebruikers [&#8230;]]]></description>
										<content:encoded><![CDATA[
<div class="wp-block-image"><figure class="alignleft is-resized"><img decoding="async" src="/wp-content/uploads/2019/12/mijn-logo.png" alt="" class="wp-image-13973" width="133" height="133" srcset="https://www.smalsresearch.be/wp-content/uploads/2019/12/mijn-logo.png 685w, https://www.smalsresearch.be/wp-content/uploads/2019/12/mijn-logo-150x150.png 150w, https://www.smalsresearch.be/wp-content/uploads/2019/12/mijn-logo-300x300.png 300w" sizes="(max-width: 133px) 100vw, 133px" /></figure></div>



<p class="has-text-align-center"><em>Serverless: de ideale link tussen APIs, Events, en je eigen code.</em></p>



<p class="justify-text">Serverless Computing is een Cloud Computing model waarbij de gebruikers enkel code en een stuk configuratie aanleveren voor een beoogde software, en de cloud provider de volledige verantwoordelijkheid in handen neemt voor het beheer van de onderliggende resources (rekenkracht, geheugen, netwerk, etc.). De gebruikers zijn normaal gezien software ontwikkelaars, en het concept valt dan ook onder de noemer &#8220;<a href="/productiviteitsverhoging-met-paas/">Platform as a Service</a>&#8221; (PaaS). Bij Gartner wordt deze technologie ook <a href="https://blogs.gartner.com/tony-iams/containers-serverless-computing-pave-way-cloud-native-infrastructure/">Functional Platform as a Service</a> (FPaaS) genoemd. Elders gebruikt men kortweg de term &#8220;<a href="https://en.wikipedia.org/wiki/Function_as_a_service">Function as a Service</a>” (FaaS).</p>



<span id="more-13933"></span>



<p class="justify-text">Serverless gaat dus nog een stuk verder dan wat momenteel als &#8220;mainstream&#8221; PaaS-gebruik kan worden beschouwd: <a href="/disruptie-in-de-cloud-stack-caas/">Container platformen en Kubernetes</a>. Bij deze laatste is de developer zelf nog verantwoordelijk voor een deel van de &#8220;<a href="/architecturale-evoluties-deel-2/">stack</a>&#8221; en bepaalt daarmee zelf voor een groot deel op welke manier de software binnen de container zal werken, en daarmee dus ook over de manier waarop de gecompileerde programmacode wordt geïnstalleerd en uitgerold. Bij Serverless zal men enkel broncode (en een stuk tekstuele configuratie) uploaden naar het platform. De configuratie bepaalt daarbij op welke manier het stuk code kan worden opgeroepen (daarover dadelijk meer). Ook de <a href="/services-in-alle-maten-van-macro-naar-nano/">granulariteit</a> van Serverless is typisch kleiner dan die van Containers: meestal wordt er slechts één specifieke functie per Serverless eenheid geïmplementeerd, tegenover typisch een volledige <a href="/van-n-tier-naar-microservices/">microservice</a> (of groter&#8230;) bij Containers.</p>



<div class="wp-block-image justify-text"><figure class="alignright is-resized"><img decoding="async" src="/wp-content/uploads/2019/12/lambda.png" alt="" class="wp-image-13958" width="82" height="82"/><figcaption>AWS Lambda</figcaption></figure></div>



<p class="justify-text">Serverless Architecture verwierf bekendheid dankzij het product &#8220;<a href="https://aws.amazon.com/lambda/">AWS Lambda</a>&#8221; van Amazon. Dit is momenteel nog steeds het platform waarrond het meest furore wordt gemaakt, mede dankzij een verregaande integratie met de rest van de AWS platformen. Je kan b.v. erg interessante zaken doen rond <a href="https://www.cloudforecast.io/blog/event-driven-pipeline-aws-serverless/">event-based monitoring</a>.  Naast Amazon hebben alle grotere Cloud providers nu wel een Serverless oplossing, en er zijn ook reeds enkele open source initiatieven ontstaan (b.v. <a href="https://kubeless.io/">Kubeless</a>, een platform dat bovenop een Kubernetes cluster werkt), waarmee je op je eigen infrastructuur een FPaaS kan gaan opzetten.</p>



<h2 class="wp-block-heading">Serverless = Event Driven</h2>



<p class="justify-text">Men kan dus als het ware functies in een Cloud uitrollen, maar hoe worden deze dan uiteindelijk opgeroepen? Daar komt de configuratie bij te pas. Zo&#8217;n functie zal men namelijk typisch oproepen als gevolg van één of andere gebeurtenis, en dit zal men dan definiëren in de bijhorende configuratie. Indien het een functie is die een website ondersteunt kan dit b.v. een <a href="/data-centric-it-met-rest/">oproep naar een bepaalde API zijn</a>, waar de functie dan een stukje van implementeert. Maar in principe kan men de functie laten reageren op alle mogelijke soorten gebeurtenissen, zolang men deze gebeurtenissen kan capteren via het gebruikte Cloud platform. Voorbeelden zijn legio:</p>



<ul class="wp-block-list"><li>Business Events (b.v. een bestelling wordt geplaatst)</li><li>Events gepubliceerd door andere software (mogelijks andere Serverless functies)</li><li>Het binnenkomen van nieuwe data (b.v. door het monitoren van een database of door het volgen van een zogenaamde &#8220;stream&#8221;, dus eigenlijk een vorm van &#8220;<a href="https://en.wikipedia.org/wiki/Reactive_programming">Reactive Programming</a>&#8220;).</li><li>Het verstrijken van een bepaalde hoeveelheid tijd (dit komt neer op scheduling)</li><li>Het binnenkomen van sensor data (denk aan <a href="/er-zit-een-hacker-in-mijn-diepvries/">Internet of Things</a>)</li></ul>



<p class="justify-text">De mogelijkheden zijn in principe eindeloos. Men kan dus eigenlijk stellen dat Serverless Architecture een vorm is van <a href="/het-event-als-leidend-voorwerp-in-software-engineering/">Event Driven Architecture</a>, waarbij van het infrastructuur aspect abstractie wordt gemaakt. Over <a href="/geavanceerd-event-driven-engineering/">Event Driven Engineering</a> hebben we reeds uitvoerig <a href="/de-vortex-van-enablers/">geblogd</a>.</p>



<h2 class="wp-block-heading">Voor- en Nadelen</h2>



<p>Serverless is een nuttige technologie aan het worden, met duidelijke voordelen. Er moet echter nog een beetje gezocht worden naar oplossingen voor enkele problemen&#8230;</p>



<h3 class="wp-block-heading">Pay Per Use</h3>



<p class="justify-text">In de meeste platformen zal men een Serverless functie enkel uitvoeren en dit aanrekenen, wanneer ze daadwerkelijk wordt opgeroepen. Je betaalt dus enkel voor het daadwerkelijke verbruik ervan, en wanneer ze niet wordt gebruikt, betaal je niets. Dit principe noemt men &#8220;Scale to Zero&#8221;. Dit kan echter ook een nadeel zijn: als de functie echt enorm veel gebruikt wordt, zal de prijs typisch nogal oplopen en kan het interessanter worden deze op een andere manier aan te bieden (b.v. door een aantal containers die men permanent actief maakt, aan een lagere maandelijkse kost).</p>



<h3 class="wp-block-heading">Schaalbaarheid en Elasticiteit</h3>



<p class="justify-text">Deze aspecten zijn nu heel gemakkelijk. Een functie heeft typisch geen toestand, en vermits de developer enkel rekening moet houden met de code voor één uitvoering, is het de Cloud provider die instaat voor het verzorgen van parallellisatie en alle andere aspecten die bij een verhoogde schaal komen kijken. Men krijgt dus als het ware een zeer flexibele schaalbaarheid cadeau (en in het geval van een publieke Cloud Provider ook een quasi oneindige). Daartegenover staat weliswaar dat de performantie bij een laag gebruik iets slechter kan zijn, vermits een serverless functie normaal gezien pas wordt geïnitialiseerd (en resources krijgt) op het moment dat ze wordt opgeroepen.</p>



<h3 class="wp-block-heading">Veiligheid</h3>



<p class="justify-text">Ook het veiligheidsaspect is een tweesnijdend zwaard: alhoewel men zich minder zorgen moet maken over de veiligheid van onderliggende infrastructuur (de Cloud Provider doet dit normaal gezien volgens de state of the art), vergroot men op een andere manier de zogenaamde &#8220;attack surface&#8221;. Typisch zal men voor een volledige oplossing heel veel kleine functies nodig hebben, en het aantal toegangswegen tot de applicatiecode is op die manier groter.</p>



<h3 class="wp-block-heading">Eenvoudige Ontwikkeling, Complex Beheer</h3>



<p class="justify-text">De productiviteit van de ontwikkelaars zal waarschijnlijk een stuk hoger zijn, gezien ze enkel rekening moeten houden met functionaliteit en code, en veel minder belang moeten hechten aan onderliggende infrastructuur. Daartegenover staat een verhoogde vendor lock-in: een stuk van de code en de configuratie zal typisch gebruik maken van vendor-specifieke functies, die men bij een andere provider niet zal terugvinden.</p>



<p class="justify-text">Daarnaast is er een groot nadeel verbonden aan het bouwen van een groot web van interopererende functies: de complexiteit van dit gedistribueerde geheel. <em>Er ontstaat als het ware een doos vol kleine &#8220;legoblokjes&#8221; van allerlei functies</em>, die men dan wel nog met een goed plan tot een mooi geheel in elkaar zal moeten puzzelen. In principe is dit niet nieuw: zelfs binnen monolithische applicaties moet men aandacht besteden aan allerlei componenten en stukken code die onderling afhankelijk zijn, omdat ze elkaar oproepen of dezelfde resources gebruiken. Maar doordat deze complexiteit nu verschuift naar de configuratie en het platform, en ze typisch overheen een netwerk zal reiken, wordt het een probleem van beheersbaarheid en routering, eerder dan van code kwaliteit. Men zal nog goede manieren moeten vinden om dit soort zaken beter te gaan ondersteunen, misschien zelfs door encapsulatie, zoals dit reeds vrij goed op punt staat voor het eigenlijke programmeerwerk.</p>



<h2 class="wp-block-heading">Conclusie</h2>



<p class="justify-text">Serverless Architecture is een snel maturerende technologie met duidelijke voordelen. De FaaS platformen maken zeker deel uit van wat de aantrekkingskracht van de Cloud groter maakt. Ze moeten zich echter nog iets grondiger gaan bewijzen: nu komt het er op aan om de laatste nadelen, zoals de beheersbaarheid, nog op punt te stellen en om de meest nuttige toepassingen voor deze architectuur te vinden en te bouwen.</p>



<p>

_________________________</p>



<p><em>Dit is een ingezonden bijdrage van Koen Vanderkimpen, IT consultant bij Smals Research. &nbsp;Dit artikel werd geschreven in eigen naam en neemt geen standpunt in namens Smals.</em></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Geavanceerd Event Driven Engineering</title>
		<link>https://www.smalsresearch.be/geavanceerd-event-driven-engineering/</link>
		
		<dc:creator><![CDATA[Koen Vanderkimpen]]></dc:creator>
		<pubDate>Wed, 16 Dec 2015 08:00:42 +0000</pubDate>
				<category><![CDATA[Blog post]]></category>
		<category><![CDATA[analytics]]></category>
		<category><![CDATA[big data]]></category>
		<category><![CDATA[CEP]]></category>
		<category><![CDATA[EBA]]></category>
		<category><![CDATA[EDA]]></category>
		<category><![CDATA[EDE]]></category>
		<category><![CDATA[egov]]></category>
		<category><![CDATA[Event]]></category>
		<category><![CDATA[Event Sourcing]]></category>
		<category><![CDATA[methodology]]></category>
		<category><![CDATA[Productivity]]></category>
		<category><![CDATA[Software architectures]]></category>
		<category><![CDATA[software design]]></category>
		<category><![CDATA[software engineering]]></category>
		<guid isPermaLink="false">/?p=9041</guid>

					<description><![CDATA[Een Event Driven Architecture (EDA) is een sterke architectuur om de communicatie tussen IT-systemen te organizeren. EDA is echter niet het enige wat je met Events kan doen. In deze blog bekijken we een aantal geavanceerde mogelijkheden binnen de ruimere context van Event Driven Engineering. &#160; In een vorige blog bespraken we reeds de basis [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><a href="/wp-content/uploads/2015/12/Event2.png"><img decoding="async" class="alignleft wp-image-9259" src="/wp-content/uploads/2015/12/Event2-150x150.png" alt="Event2" width="117" height="117" /></a>Een Event Driven Architecture (EDA) is een sterke architectuur om de communicatie tussen IT-systemen te organizeren. EDA is echter niet het enige wat je met Events kan doen. In deze blog bekijken we een aantal geavanceerde mogelijkheden binnen de ruimere context van Event Driven Engineering.<span id="more-9041"></span></p>
<p>&nbsp;</p>
<p>In een <a href="/het-event-als-leidend-voorwerp-in-software-engineering/">vorige blog</a> bespraken we reeds de basis van <a href="/het-event-als-leidend-voorwerp-in-software-engineering/">Event Driven Engineering</a>: de definitie van wat Events juist zijn, het publish/subscribe mechanisme, en de <a href="https://en.wikipedia.org/wiki/Event-driven_architecture">Event-Driven Architecture</a>, gebaseerd op de Event Bus. Nu zullen we het gaan hebben over Event Sourcing: het bouwen van applicaties, volledig gebaseerd op het concept van Events, en over Complex Event Processing: een techniek waarmee, in real-time, intelligente beslissingen kunnen worden genomen.</p>
<h1>Event Sourcing</h1>
<p>De meeste webapplicaties die we kennen, hebben één of andere toestand die evolueert doorheen de tijd, en die doorgaans opgeslagen wordt in een achterliggende database. Wanneer we b.v. inloggen op online banking, zien we het huidige saldo van onze rekeningen. Wanneer we morgen geld van onze rekening halen, dan zal deze toestand overmorgen zijn veranderd.</p>
<p>Wanneer we even afstand nemen van deze gang van zaken, dan kunnen we de bedenking maken, dat elke huidige toestand in feite het gevolg is van een hele reeks van historische toestands<em>veranderingen</em>, startende bij één of andere begintoestand, wanneer de applicatie voor het eerst online ging.</p>
<p>Welnu, elke toestandsverandering binnen een systeem kunnen we perfect modelleren als&#8230; een Event! Wanneer we dit daadwerkelijk doen, kunnen we het computersysteem op zo&#8217;n manier laten werken, dat de huidige toestand &#8220;berekend wordt&#8221; op basis van alle in chronologische volgorde gezette toestandsveranderingen, die we als Events in de applicatie laten binnenkomen. Wanneer we daarnaast ook nog deze Events opslaan &#8211; i.p.v. de huidige toestand &#8211; dan spreken we van &#8220;<a href="https://martinfowler.com/eaaDev/EventSourcing.html">Event Sourcing</a>&#8220;. Dit wil dus letterlijk zeggen dat de broncode van de applicatie gebaseerd is op Events.</p>
<p><figure id="attachment_9257" aria-describedby="caption-attachment-9257" style="width: 688px" class="wp-caption aligncenter"><a href="/wp-content/uploads/2015/12/chess.png"><img loading="lazy" decoding="async" class="size-large wp-image-9257" src="/wp-content/uploads/2015/12/chess-1024x314.png" alt="Event Sourcing in het schaakspel: de huidige toestand van het spel wordt bekomen door de opeenvolgende zetten toe te passen op het bord in de begintoestand. Door de zetten op te slaan in plaats van enkel het bord krijgen we een veel rijker inzicht in hoe dit spel is geëvolueerd." width="688" height="211" srcset="https://www.smalsresearch.be/wp-content/uploads/2015/12/chess-1024x314.png 1024w, https://www.smalsresearch.be/wp-content/uploads/2015/12/chess-768x235.png 768w, https://www.smalsresearch.be/wp-content/uploads/2015/12/chess-1536x470.png 1536w, https://www.smalsresearch.be/wp-content/uploads/2015/12/chess-2048x627.png 2048w, https://www.smalsresearch.be/wp-content/uploads/2015/12/chess-300x92.png 300w" sizes="auto, (max-width: 688px) 100vw, 688px" /></a><figcaption id="caption-attachment-9257" class="wp-caption-text">Event Sourcing in het schaakspel: de huidige toestand van het spel wordt bekomen door de opeenvolgende zetten toe te passen op het bord in de begintoestand. Door de zetten op te slaan in plaats van enkel het bord, krijgen we een veel rijker inzicht in hoe dit spel is geëvolueerd.</figcaption></figure></p>
<p>Een bedenking die iedereen snel zal maken, is natuurlijk dat dit na verloop van tijd zeer onefficiënt zou worden: hoe meer Events er zijn, hoe zwaarder de berekening wordt om de huidige toestand te bekomen! Om die reden zullen er uiteraard steeds bepaalde optimizaties aanwezig zijn in de applicatie, zonder wezenlijk de Event-Sourced eigenschappen ervan te veranderen. Zo is het natuurlijk zaak om de huidige toestand in een cache of buffer te houden, zodat enkel nieuwe Events in rekening gebracht moeten worden om de toestand te laten evolueren. Daarnaast is het ook handig om van deze toestand af en toe een backup weg te schrijven, zodat ook bij het eventuele uitvallen van de toepassing, slechts een deel van de toestand opnieuw berekend dient te worden aan de hand van Events.</p>
<p>Met het bewaren van Events in plaats van enkel de huidige toestand, krijgt men een aantal interessante mogelijkheden. Zoals in de vorige paragraaf gezegd, kunnen we de toestand terug heropbouwen. Sterker nog: we kunnen de toestand van eender welk moment in de geschiedenis van de applicatie terugbrengen (handig om te weten wat er op een bepaald moment aan de hand was). Daarnaast kunnen we nieuwe versies van de applicatie testen door Events opnieuw af te laten spelen voor een testversie: zo krijgt men erg realistische tests. Ten slotte laat de rijkheid aan gegevens binnen de Events ons toe om <a href="https://en.wikipedia.org/wiki/Temporal_database">temporele queries</a> te gaan uitvoeren; dit soort data zouden we bij een standaard aanpak vaak kwijt zijn.</p>
<p>Er zijn een aantal speciale vormen van temporele gegevens die automatisch beschikbaar zijn, indien men Event Sourcing goed aanpakt. Zo kunnen Events erg eenvoudig gelogd worden en op die manier deel gaan uitmaken van een rijkere applicatielogging. Ook <a href="/ga-veilig-om-met-uw-geprivilegieerde-accounts/">audit logs</a> kunnen vaak (deels) uit de Events worden afgeleid. Ten slotte vormen de Events van een Event-Sourced applicatie automatisch ook een goede backup van de gegevens, gezien men de toestand van de applicatie ermee kan heropbouwen.</p>
<h1>Complex Event Processing (en Analytics)</h1>
<p>Complex Event Processing (CEP) systemen zijn een belangrijke schakel wanneer men applicaties tijdige intelligente beslissingen wil laten nemen, op basis van wat er aan het gebeuren is. Dit soort systemen zal naar binnenkomende Events luisteren (zoals andere applicaties die zich ervoor inschrijven), en zal specifiek letten op het voorkomen van bepaalde <a href="/analytics-behind-the-scenes-humans-and-computers-versus-big-data/">patronen</a> in Events die zich afspelen. Wanneer het CEP systeem zo&#8217;n opeenvolging van Events heeft opgemerkt, zal het reageren. Dit kan het doen door zelf een nieuw, &#8220;complex&#8221; Event te publiceren, waar weer andere systemen op zullen kunnen reageren. Op die manier transformeren zulke systemen een bepaalde reeks van elkaar opvolgende Events dus in een nieuw, complex Event; dit alles op basis van een set van complexe regels, die door programmeurs, maar vaak ook door een &#8220;<a href="/elementary-my-dear-watson/">(zelf-)lerend</a>&#8221; systeem, zijn ingegeven.</p>
<p>Op die manier zijn CEP systemen ook belangrijk in <a href="/big-data-krakend-ijs-onder-anonimisatie/">Big Data</a> <a href="/big-data-analytics-whats-in-a-name/">Analytics</a>, waarbij de Big Data bestaat uit zaken die doorheen de tijd gebeuren (plus uiteraard andere vormen van verwante data). Deze vorm van Big Data is bijvoorbeeld interessant bij het detecteren van fraudepatronen, waarbij fraudeurs gedurende een bepaalde tijd een aantal handelingen uitvoeren die uiteindelijk tot fraude leiden. Het herkennen en vervolgens detecteren van de juiste patronen in een hele reeks van handelingen (waar uiteraard ook niet-verdachte handelingen en zelfs niet-gerelateerde handelingen tussen zitten), is daarbij cruciaal.</p>
<p><figure id="attachment_9263" aria-describedby="caption-attachment-9263" style="width: 688px" class="wp-caption aligncenter"><a href="/wp-content/uploads/2015/12/CEP.png"><img loading="lazy" decoding="async" class="wp-image-9263 size-large" src="/wp-content/uploads/2015/12/CEP-1024x770.png" alt="Complex Event Processing: patronen van eenvoudige Events worden herkend op basis van regel en leiden tot &quot;complexe Events&quot;. Alle Events samen kunnen via Analytics leiden tot de juiste regels voor patroonherkenning." width="688" height="517" srcset="https://www.smalsresearch.be/wp-content/uploads/2015/12/CEP-1024x770.png 1024w, https://www.smalsresearch.be/wp-content/uploads/2015/12/CEP-768x578.png 768w, https://www.smalsresearch.be/wp-content/uploads/2015/12/CEP-300x226.png 300w, https://www.smalsresearch.be/wp-content/uploads/2015/12/CEP.png 1250w" sizes="auto, (max-width: 688px) 100vw, 688px" /></a><figcaption id="caption-attachment-9263" class="wp-caption-text">Complex Event Processing: patronen van eenvoudige Events worden herkend op basis van regels en leiden tot &#8220;complexe Events&#8221;. Alle Events samen kunnen via Analytics leiden tot betere regels voor patroonherkenning.</figcaption></figure></p>
<p>CEP laat in deze use case toe de resultaten van analytics &#8211; de herkende patronen van zaken die gebeuren doorheen de tijd &#8211; rechtstreeks toe te passen op een systeem dat live is, waardoor ze in real-time kunnen worden gedetecteerd en er dus veel sneller op kan worden gereageerd. Daarnaast genereren de CEP systemen nieuwe, complexe Events, die de reeds aanwezige Events in de Big Data kunnen verrijken. Hierdoor vergroot de hoeveelheid data waaruit de analytische applicaties zullen kunnen putten om weer nieuwe Event-patronen aan te leren.</p>
<h1>Besluit</h1>
<p>Events zijn niet alleen nuttig als loskoppelend communicatiesysteem tussen applicaties, maar zijn op zich ook een erg krachtig paradigma als bouwsteen voor sommige individuele applicaties, of als gegevensbron voor Big Data Analytics en real-time intelligente systemen.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Het Event als Leidend(!) Voorwerp in Software Engineering</title>
		<link>https://www.smalsresearch.be/het-event-als-leidend-voorwerp-in-software-engineering/</link>
					<comments>https://www.smalsresearch.be/het-event-als-leidend-voorwerp-in-software-engineering/#comments</comments>
		
		<dc:creator><![CDATA[Koen Vanderkimpen]]></dc:creator>
		<pubDate>Tue, 20 Oct 2015 09:38:25 +0000</pubDate>
				<category><![CDATA[Blog post]]></category>
		<category><![CDATA[cost cutting]]></category>
		<category><![CDATA[EBA]]></category>
		<category><![CDATA[EDA]]></category>
		<category><![CDATA[EDE]]></category>
		<category><![CDATA[egov]]></category>
		<category><![CDATA[Event]]></category>
		<category><![CDATA[Managing IT costs]]></category>
		<category><![CDATA[methodology]]></category>
		<category><![CDATA[Productivity]]></category>
		<category><![CDATA[Software architectures]]></category>
		<category><![CDATA[software design]]></category>
		<category><![CDATA[software engineering]]></category>
		<guid isPermaLink="false">/?p=8942</guid>

					<description><![CDATA[Binnen een IT systeem zijn er gebeurtenissen in overvloed. We schenken er echter meestal slechts als bijzaak enige aandacht aan. Deze blog is een (eerste) oproep om, bij het ontwerpen van software, het Event een centrale plaats te geven, met alle voordelen van dien. Events Heel veel zaken binnen een softwaresysteem kunnen worden gemodelleerd als een [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><a href="/wp-content/uploads/2015/10/event.png"><img loading="lazy" decoding="async" class="alignleft wp-image-9123" src="/wp-content/uploads/2015/10/event-150x150.png" alt="event" width="119" height="119" /></a>Binnen een IT systeem zijn er gebeurtenissen in overvloed. We schenken er echter meestal slechts als bijzaak enige aandacht aan. Deze blog is een (eerste) oproep om, bij het ontwerpen van software, het Event een centrale plaats te geven, met alle voordelen van dien.<span id="more-8942"></span></p>
<h1>Events</h1>
<p>Heel veel zaken binnen een softwaresysteem kunnen worden gemodelleerd als een gebeurtenis, of Event: het aanklikken van een knop, het indrukken van een toets, het verbinden met een server, enz. Een bijzonder interessante vorm van gebeurtenissen zijn daarbij degene die ook op <em>business niveau</em> een betekenis hebben: het inloggen van een gebruiker, het versturen van een aanvraagformulier, het aanmaken van een nieuw record met gegevens, of zelfs het beschikbaar worden van een signaal komende uit een <a href="/big-data-analytics-whats-in-a-name/">big data analytics</a> platform.</p>
<p><a href="/wp-content/uploads/2015/10/events.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-9118 size-full" src="/wp-content/uploads/2015/10/events-e1445259889108.png" alt="events" width="942" height="624" srcset="https://www.smalsresearch.be/wp-content/uploads/2015/10/events-e1445259889108.png 942w, https://www.smalsresearch.be/wp-content/uploads/2015/10/events-e1445259889108-768x509.png 768w, https://www.smalsresearch.be/wp-content/uploads/2015/10/events-e1445259889108-300x199.png 300w" sizes="auto, (max-width: 942px) 100vw, 942px" /></a></p>
<p>Deze gebeurtenissen zijn er altijd, maar we besteden er niet altijd enorm veel aandacht aan: het verbinden van een server wordt simpelweg het oproepen van een hulpdienst vanuit een ander deel van het programma, de gegevens van een aanvraagformulier worden gewoon gecontroleerd en weggeschreven, het signaal wordt getoond op een dashboard, enz. We doen dus wel iets met de gegevens die samenhangen met het Event, maar we beschouwen het Event zelf niet als volwaardig concept. Eens voorbij, verliezen we dan ook het concept van iets dat zich afspeelt op een bepaald moment in de tijd. De betrokken gegevens worden weggeschreven, vaak als deel van een aggregaat, en de historische context en tijdsgebondenheid gaan verloren.</p>
<p>Wanneer we nu het Event wél gaan beschouwen als een object van eerste klasse (in het Engels &#8216;<a href="https://en.wikipedia.org/wiki/First-class_citizen">first class citizen</a>&#8216;), dan maken we er als het ware een tastbaar, vastgrijpbaar iets van. Het Event wordt als dusdanig &#8220;gereïficeerd&#8221; (<a href="https://www.encyclo.nl/begrip/re%C3%AFficatie">&#8216;écht gemaakt&#8217;</a>). Wanneer we dit doen, dan spreken we van <strong>Event Driven Engineering</strong>. Dit is een brede tak binnen de Software Engineering, die zelf nog uit een aantal verschillende paradigma&#8217;s bestaat.</p>
<p>De twee meest eenvoudige van deze paradigma&#8217;s, het Publish/Subscribe mechanisme en het bredere concept Event Driven Architecture, zullen we verder uitdiepen in deze blog.</p>
<h1>Publish/Subscribe</h1>
<p>Het <a href="https://en.wikipedia.org/wiki/Publish%E2%80%93subscribe_pattern">publish/subscribe mechanisme</a> is al erg lang een gekende techniek binnen software-ontwerp, om subsystemen van elkaar los te koppelen.</p>
<p>Het mechanisme speelt zich af tussen drie partijen: de <em>publisher</em> (die een Event kan &#8220;publiceren&#8221;), de <em>subscriber</em> (die zich voor een event kan &#8220;onderschrijven&#8221;), en het <em>Event systeem</em>. Deze partijen kunnen verschillende vormen aannemen (van één welbepaald object binnen een applicatie, over subsystemen heen, tot verschillende en volledig op zichzelf staande applicaties of IT-systemen). Van publishers en subscribers kunnen er meerdere zijn. Van het Event systeem is er, althans wat de interacties rond minstens één welbepaalde soort Events betreft, slechts één.</p>
<p>Op een bepaald moment kan een subscriber het Event systeem contacteren om zijn interesse te uiten in een welbepaald Event. Vanaf dan is het zo dat, elke keer dit event voorkomt, de subscriber hiervan op de hoogte zal worden gebracht. Dit laatste gebeurt wanneer een publisher op zijn beurt het Event systeem inlicht over een door hem gegenereerd event. Dit laatste wordt ook wel &#8220;to fire an Event&#8221; genoemd: een Event wordt als het ware afgevuurd. De subscribers hebben dan de verantwoordelijkheid om het Event af te handelen (to &#8220;handle an Event&#8221;). Naast inschrijven, is het voor subscribers ook mogelijk zich opnieuw uit te schrijven voor een Event, een beetje zoals met een nieuwsbrief.</p>
<p><a href="/wp-content/uploads/2015/10/publish-subscribe-1.png"><img loading="lazy" decoding="async" class="wp-image-9106 size-thumbnail alignnone" src="/wp-content/uploads/2015/10/publish-subscribe-1-150x150.png" alt="publish-subscribe-1" width="150" height="150" /></a> <a href="/wp-content/uploads/2015/10/publish-subscribe-2.png"><img loading="lazy" decoding="async" class="wp-image-9107 size-thumbnail alignnone" src="/wp-content/uploads/2015/10/publish-subscribe-2-150x150.png" alt="publish-subscribe-2" width="150" height="150" /></a> <a href="/wp-content/uploads/2015/10/publish-subscribe-3.png"><img loading="lazy" decoding="async" class="wp-image-9108 size-thumbnail alignnone" src="/wp-content/uploads/2015/10/publish-subscribe-3-150x150.png" alt="publish-subscribe-3" width="150" height="150" /></a> <a href="/wp-content/uploads/2015/10/publish-subscribe-4.png"><img loading="lazy" decoding="async" class="wp-image-9109 size-thumbnail alignnone" src="/wp-content/uploads/2015/10/publish-subscribe-4-150x150.png" alt="publish-subscribe-4" width="150" height="150" /><img loading="lazy" decoding="async" class="alignleft wp-image-9110 size-thumbnail" src="/wp-content/uploads/2015/10/publish-subscribe-5-150x150.png" alt="publish-subscribe-5" width="150" height="150" srcset="https://www.smalsresearch.be/wp-content/uploads/2015/10/publish-subscribe-5-150x150.png 150w, https://www.smalsresearch.be/wp-content/uploads/2015/10/publish-subscribe-5-300x298.png 300w, https://www.smalsresearch.be/wp-content/uploads/2015/10/publish-subscribe-5.png 769w" sizes="auto, (max-width: 150px) 100vw, 150px" /></a><em>Het typische publish/subscribe scenario:</em></p>
<ol>
<li>Een paar subscribers onderschrijven zich</li>
<li>Een publisher publiceert een event</li>
<li>Het Event komt terecht in het Event Systeem</li>
<li>Het Event wordt verspreid via het Event Systeem</li>
<li>Het Event bereikt alle subscribers</li>
</ol>
<p>&nbsp;</p>
<p style="text-align: left;">Voor het publish/subscribe mechanisme is het echter nog niet expliciet vereist om de events te reïficeren. Men kan ook gebruik maken van het principe van <a href="https://en.wikipedia.org/wiki/Callback_(computer_programming)">callbacks</a>: de subscriber geeft aan wat hij wil dat er gebeurt, indien een bepaalde gebeurtenis voorkomt. De publisher kan dan via het event systeem aangeven dat iets gebeurd is, zonder verdere details te geven, en de callback wordt uitgevoerd. Daarnaast is het zelfs mogelijk dat er geen event systeem is, maar dat subscribers zich rechtstreeks tot publishers richten.</p>
<p>Indien we de Events echter expliciet modelleren, biedt dit mechanisme veel meer opties: publishers kunnen het Event dan verrijken met details over het gebeurde, en deze gegevens kunnen door de subscribers worden gebruikt om het Event beter af te handelen. Bovendien hebben we de optie om het Event voor later hergebruik op te slaan. Daarnaast krijgen we door het invoeren van een event systeem een vorm van <em>indirectie</em>, die toelaat dat publishers en subscribers elkaar niet meer te hoeven kennen.</p>
<p><figure id="attachment_9104" aria-describedby="caption-attachment-9104" style="width: 688px" class="wp-caption aligncenter"><a href="/wp-content/uploads/2015/10/ObserverPattern.png"><img loading="lazy" decoding="async" class="wp-image-9104 size-large" src="/wp-content/uploads/2015/10/ObserverPattern-1024x300.png" alt="ObserverPattern" width="688" height="202" srcset="https://www.smalsresearch.be/wp-content/uploads/2015/10/ObserverPattern-1024x300.png 1024w, https://www.smalsresearch.be/wp-content/uploads/2015/10/ObserverPattern-768x225.png 768w, https://www.smalsresearch.be/wp-content/uploads/2015/10/ObserverPattern-1536x451.png 1536w, https://www.smalsresearch.be/wp-content/uploads/2015/10/ObserverPattern-2048x601.png 2048w, https://www.smalsresearch.be/wp-content/uploads/2015/10/ObserverPattern-300x88.png 300w" sizes="auto, (max-width: 688px) 100vw, 688px" /></a><figcaption id="caption-attachment-9104" class="wp-caption-text">Een voorbeeld van publish/subscribe (zonder gereïficeerde events): het &#8216;Observer Pattern&#8217;, vaak gebruikt in Grafische User Interfaces</figcaption></figure></p>
<p>Een typisch voorbeeld zien we bij de ondersteuning van Grafische User Interfaces (GUI). Grafische elementen zullen daar Events afvuren die door de eindgebruiker werden veroorzaakt (&#8216;er werd op een knop geklikt&#8217;, &#8216;een veld werd ingevuld&#8217;, &#8230;). De achterliggende applicatiecode zal zich op deze Events hebben ingeschreven en er aldus op kunnen reageren om de applicatie (en GUI) aan te passen.</p>
<h1>Event Driven Architecture</h1>
<p>Binnen een <a href="https://en.wikipedia.org/wiki/Event-driven_architecture">Event Driven Architecture</a> (EDA), hebben we ook publish/subscribe, maar dan op een veel grotere schaal. Meestal gaat het nu om communicatie tussen verschillende applicaties en systemen op een zo robuust mogelijke manier. Het Event systeem zal nu worden geïmplementeerd a.d.h.v. een <a href="https://en.wikipedia.org/wiki/Bus_(computing)">BUS</a> systeem, en we zullen het de <strong>Event Bus</strong> noemen.</p>
<p>EDA kan nuttig worden aangewend wanneer men een heel aantal applicaties heeft, die dezelfde of gerelateerde Business Events behandelen. Gebeurtenissen binnen één applicatie zullen daarbij vaak relevant zijn voor andere applicaties. De Event Bus zal binnen zo&#8217;n geheel de verantwoordelijkheid op zich nemen om een Event, door één applicatie gecreëerd, tot bij alle geïnteresseerde applicaties te krijgen. De applicaties hoeven van elkaars bestaan niet af te weten: het is voldoende dat ze van het bestaan van bepaalde Events afweten, en dat ze kunnen communiceren met de Event Bus.</p>
<p>Deze vorm van architectuur laat een grote loskoppeling toe van de betrokken systemen en applicaties, en zorgt er ook voor dat er snel gereageerd kan worden op voorkomende business events, zelfs op plaatsen waar, en op manieren waarop dit niet initiëel werd voorzien. Men kan zich namelijk inbeelden dat men, eens een bepaald Event bestaat en men weet dat het over de bus passeert, nieuwe ideeën kan krijgen om deze Events aan te wenden en erop te reageren, zowel in bestaande als nieuwe applicaties.</p>
<p><a href="/wp-content/uploads/2015/10/EdA.png"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-9119" src="/wp-content/uploads/2015/10/EdA.png" alt="EdA" width="926" height="575" srcset="https://www.smalsresearch.be/wp-content/uploads/2015/10/EdA.png 926w, https://www.smalsresearch.be/wp-content/uploads/2015/10/EdA-768x477.png 768w, https://www.smalsresearch.be/wp-content/uploads/2015/10/EdA-300x186.png 300w" sizes="auto, (max-width: 926px) 100vw, 926px" /></a></p>
<p>Communicatie via Events zal natuurlijk niet de enige communicatie zijn die er tussen verschillende systemen moet bestaan: soms heeft één systeem ook historische informatie nodig, die reeds lang via een andere applicatie is verwerkt en opgeslagen. Het eventuele event, indien het al zou bestaan, dat tot die informatie heeft geleid, is op dat moment natuurlijk reeds lang gepasseerd. Normaal gezien gaat dit echter altijd om read-only operaties. Hier moeten we dus, binnen het geheel van applicaties, nog iets voor voorzien (b.v. een collectie <a href="https://www.restapitutorial.com/">RESTful API</a>s). Communicatie die schrijfoperaties veroorzaakt, moet echter in principe altijd via Events kunnen worden gemodelleerd (wanneer er een gegeven moet worden aangepast, kan men desnoods deze wijziging op zich óók modelleren als een gebeurtenis).</p>
<h1>Conclusie en Vervolg</h1>
<p>De Event Driven <em>Architecture</em> is veelbelovend: het laat een sterk loskoppelen toe van de betrokken applicaties en systemen, wat het onderhoud van het softwarepark een stuk eenvoudiger maakt. Maar indien we de Events die op de bus binnenkomen permanent gaan bewaren en voor nog allerlei andere zaken gaan (her-)gebruiken, ontketenen we pas echt de kracht van Event Driven <em>Engineering</em>. Daarover meer in een volgende blog!</p>
<p>&nbsp;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.smalsresearch.be/het-event-als-leidend-voorwerp-in-software-engineering/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
	</channel>
</rss>
