<?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>SOA &#8211; Smals Research</title>
	<atom:link href="https://www.smalsresearch.be/tag/soa/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.smalsresearch.be</link>
	<description></description>
	<lastBuildDate>Thu, 09 Apr 2026 12:19:37 +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>SOA &#8211; Smals Research</title>
	<link>https://www.smalsresearch.be</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Architecturale Evoluties, deel 2</title>
		<link>https://www.smalsresearch.be/architecturale-evoluties-deel-2/</link>
		
		<dc:creator><![CDATA[Koen Vanderkimpen]]></dc:creator>
		<pubDate>Tue, 06 Nov 2018 12:16:29 +0000</pubDate>
				<category><![CDATA[[NL]]]></category>
		<category><![CDATA[Blog post]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[cloud computing]]></category>
		<category><![CDATA[CQRS]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[EDA]]></category>
		<category><![CDATA[Event]]></category>
		<category><![CDATA[MASA]]></category>
		<category><![CDATA[methodology]]></category>
		<category><![CDATA[microservices]]></category>
		<category><![CDATA[Productivity]]></category>
		<category><![CDATA[SOA]]></category>
		<category><![CDATA[software design]]></category>
		<category><![CDATA[software engineering]]></category>
		<guid isPermaLink="false">/?p=11475</guid>

					<description><![CDATA[Tijd om met een aantal exotische afkortingen te beginnen schermen, zoals EDA, CQRS en MASA. De moderne architectuur is soms ingewikkelder dan de oude, maar wie ze meester is, kan profiteren van een enorme flexibiliteit. Deze blog is het tweede deel van een reeks, waarin we een aantal mogelijkheden die ons worden geboden door goede architecturale [&#8230;]]]></description>
										<content:encoded><![CDATA[<p style="text-align: justify;"><a href="/wp-content/uploads/2018/05/architecture2.png"><img decoding="async" class="alignleft wp-image-11754 size-full" src="/wp-content/uploads/2018/05/architecture2.png" alt="" width="146" height="141" /></a>Tijd om met een aantal exotische afkortingen te beginnen schermen, zoals EDA, CQRS en MASA. De moderne architectuur is soms ingewikkelder dan de oude, maar wie ze meester is, kan profiteren van een enorme flexibiliteit.</p>
<p><span id="more-11475"></span></p>
<p style="text-align: justify;">Deze blog is het tweede deel van een reeks, waarin we een aantal mogelijkheden die ons worden geboden door goede architecturale principes en technologieën, zullen toelichten. Een aantal van deze zaken werden ook reeds in vroegere blogs besproken, en de meeste worden ook nog eens samengevat in de blog &#8220;<a href="/de-vortex-van-enablers/">Vortex van Enablers</a>&#8220;. De eerste blog van deze reeks beschouwde de gedeeltes van een applicatie-architectuur die de gebruikersinterface en externe clients ondersteunen: <a href="/architecturale-evoluties-deel-1/">Architecturale Evoluties, deel 1</a>.</p>
<p style="text-align: justify;">In dit deel duiken we dieper in de applicatie, en zullen we beschouwen hoe we de interacties met onze applicatie verder kunnen afhandelen. Interacties kunnen via allerlei wegen onze applicatie binnenkomen (b.v. aanvragen vanuit een GUI, requests via een extern-gerichte API, maar ook interne, geplande acties die op bepaalde momenten worden gestart). Voor de binnenste onderdelen van de architectuur is dit onderscheid echter van minder belang. Wel belangrijk is of het gaat om een vraag om output te genereren (dit zullen we een <strong>query</strong> noemen), of dat het eerder gaat om nieuwe input (vaak een <strong>command</strong> genoemd, maar dit komt eigenlijk overeen met een <a href="/het-event-als-leidend-voorwerp-in-software-engineering/"><strong>Event</strong></a>). Soms zijn deze beide vormen gecombineerd (er is nieuwe input, die op zich al tot nieuwe output moet leiden), maar vaak is het mogelijk om deze aspecten in de verwerking van de interactie voldoende gescheiden te houden.</p>
<h1 style="text-align: justify;">De Moderne Architectuur, Deel 2</h1>
<p style="text-align: justify;">In het eerste deel van deze blogreeks beschreven we reeds hoe alle externe interactie met onze applicatie kon worden herleid tot het oproepen van Restful APIs, die we konden aanbieden via één of meerdere <a href="/van-n-tier-naar-microservices/">microservices</a>. In dit tweede deel kunnen we ons daardoor volledig focussen op de interne werking van een collectie microservices, die samen een applicatie (of een groep van applicaties) ondersteunen. Dit is een radicale breuk met de meer traditionele 3-tier of n-tier architecturen van weleer. Gartner heeft deze nieuwe trend de naam &#8220;MASA&#8221; gegeven, wat staat voor <a href="https://www.gartner.com/doc/3645328/top--strategic-technology-trends">Mesh App and Service Architecture</a>: een zeer modulair and flexibel aanpasbaar netwerk van oplossingen die de dynamisch veranderde behoeften vanuit de business snel kunnen opvangen.</p>
<p style="text-align: justify;">Eén opmerking die we voor de volledigheid nog moeten maken, is dat het in deel 1 om interactie met écht externe zaken ging, zoals de clients en 3rd party applicaties. Dit leidt er doorgaans toe dat we sterk gestandaardiseerde interactievormen via het web zullen gebruiken (waardoor vrijwel enkel REST APIs kunnen worden beschouwd). Integratie binnen het eigen ecosysteem kan echter, naast APIs, ook nog via de <strong>Event Bus</strong> gebeuren, die op zich gebouwd is bovenop het principe van asynchrone uitwisseling van berichten tussen de services. Dit duale principe (synchroon REST kanaal en asynchroon event kanaal, ook reeds toegelicht in de <a href="/data-centric-it-met-rest/">blog over Data Centric IT</a>) moet volstaan om alle communicatie tussen de verschillende onderdelen van een applicatie (of ecosysteem) in goede banen te leiden. Op zijn beurt laat deze ogenschijnlijke beperking toe om de technische kant van het verhaal te standaardiseren.</p>
<ul>
<li>
<h2>Een woordje over de MASA</h2>
</li>
</ul>
<figure id="attachment_12263" aria-describedby="caption-attachment-12263" style="width: 300px" class="wp-caption alignright"><a href="/wp-content/uploads/2018/11/mesh.png"><img fetchpriority="high" decoding="async" class="wp-image-12263 size-medium" src="/wp-content/uploads/2018/11/mesh-300x294.png" alt="" width="300" height="294" srcset="https://www.smalsresearch.be/wp-content/uploads/2018/11/mesh-300x294.png 300w, https://www.smalsresearch.be/wp-content/uploads/2018/11/mesh.png 693w" sizes="(max-width: 300px) 100vw, 300px" /></a><figcaption id="caption-attachment-12263" class="wp-caption-text">Fig. 1: Mesh App &amp; Service Architecture</figcaption></figure>
<p style="text-align: justify;">Zoals reeds gezegd, staat MASA voor &#8220;Mesh App &amp; Service Architecture&#8221;. Het woordje &#8220;mesh&#8221; (= een fijnmazig net) betekent dat de huidige architectuur uit vele aparte onderdelen zal bestaan, die via steeds veranderende configuraties met elkaar communiceren. Het model dat we in deze blogreeks uit de doeken doen, namelijk een ecosysteem van samenwerkende microservices, communicerend via <a href="/het-event-als-leidend-voorwerp-in-software-engineering/">Event Bus</a> en RESTful APIs, is daarbij eigenlijk nog een eenvoudige versie. In de praktijk zal men evolueren naar ingewikkelder patronen, waarbij in deze mesh ook legacy toepassingen zullen verweven zitten, alsook zaken die in de <a href="/disruptie-in-de-cloud-stack-caas/">Cloud</a> draaien i.p.v. op het lokale netwerk, afzonderlijke functies die volgens het zogenaamde &#8220;<a href="https://en.wikipedia.org/wiki/Serverless_computing">Serverless</a>&#8221; principe werken, en zelfs <a href="/er-zit-een-hacker-in-mijn-diepvries/">IoT</a> devices. Dit soort gemengde architectuur ontstaat doordat vele organisaties nu eenmaal legacy toepassingen draaiende moeten houden, en doordat er een grote heterogeniteit aan projecten te volbrengen is, hetgeen er voor zorgt dat er vaak ook verschillende keuzes gemaakt worden wat betreft de onderliggende platformen. In zo&#8217;n geval is het echter ook belangrijk (of zelfs nog belangrijker) dat men tracht de communicatiepatronen tussen al deze verschillende zaken te standaardiseren, om aldus de compatibiliteit en integreerbaarheid te maximaliseren.</p>
<ul>
<li>
<h2>De Duale Service Interface: CQRS</h2>
</li>
</ul>
<p style="text-align: justify;">In de introductie vermeldden we reeds het onderscheid tussen commando&#8217;s en queries. <a href="https://martinfowler.com/bliki/CQRS.html">CQRS</a> staat voor <a href="https://docs.microsoft.com/en-us/azure/architecture/patterns/cqrs">Command Query Responsability Segregation</a>, wat zoveel betekent als &#8220;scheiding van de verantwoordelijkheid voor het afhandelen van commando&#8217;s en queries&#8221;. In de praktijk wil dat zeggen dat we zullen proberen om een logische scheiding te krijgen tussen de systemen die commando&#8217;s verwerken en tussen degene die vragen beatwoorden. Dit is schematisch weergegeven in onderstaande Fig. 2.</p>
<figure id="attachment_12196" aria-describedby="caption-attachment-12196" style="width: 688px" class="wp-caption alignnone"><a href="/wp-content/uploads/2018/09/highlevelbackend.png"><img decoding="async" class="wp-image-12196 size-large" src="/wp-content/uploads/2018/09/highlevelbackend-1024x372.png" alt="" width="688" height="250" srcset="https://www.smalsresearch.be/wp-content/uploads/2018/09/highlevelbackend-1024x372.png 1024w, https://www.smalsresearch.be/wp-content/uploads/2018/09/highlevelbackend-300x109.png 300w, https://www.smalsresearch.be/wp-content/uploads/2018/09/highlevelbackend-768x279.png 768w, https://www.smalsresearch.be/wp-content/uploads/2018/09/highlevelbackend.png 1081w" sizes="(max-width: 688px) 100vw, 688px" /></a><figcaption id="caption-attachment-12196" class="wp-caption-text">Fig. 2: Schematisch overzicht van de backend systemen: aanvragen worden opgesplitst in queries en commands, die elk hun eigen pad vervolgen richting een groep backend (micro-)services. Deze zullen informatie in de vorm van inkomende events verwerken tot hapklare zaken die later door queries kunnen worden opgevraagd.</figcaption></figure>
<p style="text-align: justify;">Queries kunnen doorgaans rechtstreeks door een API worden beantwoord, al dan niet door de vraag, mogelijks in stukjes gekapt, aan een verdere API door te geven. Uiteindelijk zullen het de onderliggende (micro-)services zijn die het echte werk doen van opzoeken in databases en eventueel nog een paar bewerkingen uitvoeren om het antwoord in de gevraagde vorm te krijgen. Wat betreft de interactie tussen verschillende services, hoeft hier dus niet te worden afgeweken van RESTful synchrone communicatie.</p>
<p style="text-align: justify;">Het ligt iets anders voor commando&#8217;s. Wanneer we volledig het paradigma van <a href="/geavanceerd-event-driven-engineering/">Event Sourcing</a> toepassen, zullen we een commando steeds omzetten in een gebeurtenis (b.v. het commando &#8220;<em>bestel één <a href="/blockchain-vs-event-driven-architecture/">blockchain</a> boek</em>&#8221; wordt dan het <span style="text-decoration: underline;">event</span> &#8220;<em>bestelling van één <a href="https://www.larciergroup.com/nl/blockchain-en-smart-contracts-2018-9782807909380.html">blockchain boek</a> geplaatst</em>&#8220;). Deze omzetting zal door een eerste laag van services worden gedaan, speciaal gebouwd voor het opvangen van dergelijke commando&#8217;s vanuit de client side.</p>
<p style="text-align: justify;">Het commando kan dan verder worden afgehandeld als een typisch event: het komt op de Event Bus terecht en alle geïnteresseerde diensten zullen het asynchroon ontvangen en kunnen behandelen (één backend service zal b.v. de inventory aanpassen; een andere zet het verpakken op gang en nog een andere verwittigt de koerierdienst). In elk geval is het creëren van afgeleide informatie (b.v. de hoeveelheid in stock) een verantwoordelijkheid van een microservice die daarvoor zijn eigen database zal hebben.</p>
<p style="text-align: justify;">Wanneer nu later een vraag toekomt die betrekking heeft op informatie beïnvloed door een eerder commando, dan zal deze geforward worden naar de microservices die deze up-to-date informatie controleren (b.v. de vraag &#8220;<em>hoeveel van die blockchain boeken zijn er nog in voorraad</em>&#8221; komt uiteindeljik terecht bij de service voor de inventory). Vermits events asynchroon werken kan het soms zijn dat een vraag nét te snel komt en de informatie dus niet volledig up-to-date is (meestal is het echter een kwestie van enkele seconden). Vandaar dat het bij dit soort architecturen aangewezen is de principes van &#8220;<a href="https://en.wikipedia.org/wiki/Eventual_consistency">eventual consistency</a>&#8221; goed toe te passen, en zelfs door te trekken tot op business niveau.</p>
<figure id="attachment_12198" aria-describedby="caption-attachment-12198" style="width: 1050px" class="wp-caption aligncenter"><a href="/wp-content/uploads/2018/09/complexexample.png"><img loading="lazy" decoding="async" class="size-full wp-image-12198" src="/wp-content/uploads/2018/09/complexexample.png" alt="" width="1050" height="543" srcset="https://www.smalsresearch.be/wp-content/uploads/2018/09/complexexample.png 1050w, https://www.smalsresearch.be/wp-content/uploads/2018/09/complexexample-300x155.png 300w, https://www.smalsresearch.be/wp-content/uploads/2018/09/complexexample-768x397.png 768w, https://www.smalsresearch.be/wp-content/uploads/2018/09/complexexample-1024x530.png 1024w" sizes="auto, (max-width: 1050px) 100vw, 1050px" /></a><figcaption id="caption-attachment-12198" class="wp-caption-text">Fig. 3: Een iets gedetailleerder voorbeeld. Voor de uitleg verwijzen we naar de tekst.</figcaption></figure>
<p style="text-align: justify;">Bovenstaande Figuur 3 toont een iets gedetailleerder voorbeeld. In de figuur zien we dat er achter de App API, 2 Command APIs en 1 Query API schuilgaan. Daarnaast zien we een door meerdere zaken gebruikte Event Bus, waarvan alle events ook in een centrale event store terecht komen. Sommige backend microservices communiceren rechtsreeks met de bus en spelen dus kort op de bal; daarnaast is er een service die vooral gebruik maakt van de event store en die dus meer zaken kan doen met historische events (b.v. <a href="/big-data-analytics-whats-in-a-name/">analytics</a>). Verder zien we dat er een legacy systeem communiceert via het event kanaal en dat een aantal services APIs aanbieden, sommige zelfs rechstreeks aan externe systemen. Er is een kort scenario uitgewerkt in de tekening:</p>
<ol>
<li style="text-align: justify;">Een update wordt gevraagd, wat zich vertaalt in een reeks van events die door een aantal services verwerkt worden. Het event komt uiteraard in de event store terecht.</li>
<li style="text-align: justify;">Een andere update zorgt er uiteindelijk voor dat er events ontstaan die aanpassingen doen gebeuren aan een database van afgeleide informatie, behorende tot een bepaalde microservice.</li>
<li style="text-align: justify;">Een query vraagt informatie op via API, en uiteindelijk wordt een API van de microservice van stap 2 aangeroepen; deze zal dus van de geüpdate informatie uit de database van stap 2 gebruik maken.</li>
<li style="text-align: justify;">Een andere query doet een iets diepgaandere vraag. Via verschillende calls tussen deelnemende services, wordt er uiteindelijk informatie opgevraagd uit de event store.</li>
</ol>
<figure id="attachment_12194" aria-describedby="caption-attachment-12194" style="width: 206px" class="wp-caption alignleft"><a href="/wp-content/uploads/2018/09/GoodClientUpdate.png"><img loading="lazy" decoding="async" class="wp-image-12194" src="/wp-content/uploads/2018/09/GoodClientUpdate-171x300.png" alt="" width="206" height="362" srcset="https://www.smalsresearch.be/wp-content/uploads/2018/09/GoodClientUpdate-171x300.png 171w, https://www.smalsresearch.be/wp-content/uploads/2018/09/GoodClientUpdate.png 486w" sizes="auto, (max-width: 206px) 100vw, 206px" /></a><figcaption id="caption-attachment-12194" class="wp-caption-text">Fig. 4: Een goed gebouwde client van het systeem kan worden geüpdated bij binnenkomende events aan de serverkant.</figcaption></figure>
<p style="text-align: justify;">Dit verhaal is, vanwege het gebruik van Events, voor een deel asynchroon. Sommige cliënts zullen echter zo synchroon mogelijk moeten worden geüpdated. Hoe kunnen zij vlot op de hoogte worden gebracht van de meest recente informatie? Ter herinnering: in een volledig synchrone wereld zal een cliënt als antwoord op een commando ook onmiddellijk de nieuwe toestand meekrijgen. Met de nieuwe architectuur moet de cliënt echter &#8220;gissen&#8221; na hoeveel tijd hij een query naar de server moet sturen, om er zeker van te zijn dat het effect van zijn laatste commando in rekening is gebracht. Dit giswerk kan men echter vermijden. Sowieso is het niet zo efficiënt om ervan uit te gaan dat het altijd de cliënt is die alle communicatie moet initiëren. We zullen er dus voor zorgen dat ook de server dit initiatief kan nemen. Als gevolg van een binnenkomend Event moet ook de server in staat zijn om op dat moment een bericht te sturen naar de client. Er zijn ondertussen verschillende manieren waarop een cliënt aan een server zijn interesse kan laten blijken in het krijgen van callbacks wanneer up-to-date informatie beschikbaar is, en er zijn zelfs al full-duplex communicatiemogelijkheden voor applicaties op het web. (<a href="https://en.wikipedia.org/wiki/WebSocket">WebSocket</a> is een vrij modern voorbeeld).</p>
<p style="text-align: justify;">Indien het niet mogelijk is de client op een manier te bouwen dat deze door de server kan worden gecontacteerd, en het is evenwel belangrijk dat de client zo snel mogelijk up-to-date informatie krijgt, dan is er nog een noodoplossing mogelijk. We kunnen alsnog een API voorzien die toelaat dat men via één enkele request zowel een update doet als de nieuwe informatie meekrijgt in het antwoord. Desalniettemin zullen we het CQRS patroon voor het grootste gedeelte respecteren in de backend. Het volstaat om de API zo te bouwen, dat hij de request zelf opdeelt in een commando en één of meerdere queries. De microservice die achter deze API schuilgaat, zal dan eerst het event lanceren om het commando uit te laten voeren, en zal vervolgens wachten tot er genotificeerd komt via de juiste events, die de afhandeling van dit commando aangeven. Daarna kan de service overgaan tot het lanceren van de queries en dan vervolgens zelf antwoorden op de vraag van de client. Dit patroon zorgt er wel voor dat soms de client wat langer (synchroon) zal moeten wachten op zijn antwoord, omdat het asynchrone gedeelte volledig aan de serverkant moet worden afgehandeld.</p>
<h2>Conclusie</h2>
<p style="text-align: justify;">We zien hoe een moderne architectuur ervoor zorgt dat men een applicatie (of groep applicaties) kan opdelen in zo klein mogelijke microservices, elk met hun eigen verantwoordelijkheid. Deze zijn efficient te onderhouden en ook vervangbaar, wat het gehele systeem een ongeziene flexibiliteit geeft om zich aan te kunnen passen aan zowel veranderende functionaliteit als aan veranderingen aan de infrastructuur of de benodigde capaciteit. Daarnaast hebben we een gestandaardiseerde manier van communiceren toegelicht, die ervoor zorgt dat de mesh van apps, de &#8220;MASA&#8221;, continu kan veranderen en groeien, doordat men alle onderdelen gemakkelijk via het netwerk met elkaar kan laten communiceren. Ten slotte konden we ook zien hoe CQRS hiervan gebruik maakt om een nette afhandeling van alle mogelijke vragen te voorzien, gebruik makende van Events, die ook de historiek en traceerbaarheid van het systeem garanderen, van client tot backend.</p>
<p style="text-align: justify;">
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Services in alle Maten: van Macro naar Nano</title>
		<link>https://www.smalsresearch.be/services-in-alle-maten-van-macro-naar-nano/</link>
		
		<dc:creator><![CDATA[Koen Vanderkimpen]]></dc:creator>
		<pubDate>Mon, 27 Nov 2017 10:33:40 +0000</pubDate>
				<category><![CDATA[[NL]]]></category>
		<category><![CDATA[Blog post]]></category>
		<category><![CDATA[architecture]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[EDA]]></category>
		<category><![CDATA[Event]]></category>
		<category><![CDATA[methodology]]></category>
		<category><![CDATA[microservices]]></category>
		<category><![CDATA[rest]]></category>
		<category><![CDATA[SOA]]></category>
		<category><![CDATA[Software architectures]]></category>
		<category><![CDATA[software design]]></category>
		<category><![CDATA[software engineering]]></category>
		<guid isPermaLink="false">/?p=11111</guid>

					<description><![CDATA[Eén van de grote hypes in de wereld van de software architectuur, is het gebruik van MicroServices. Vaak is het &#8220;micro&#8221; aspect echter een beetje overkill, en maakt men eerder &#8220;MiniServices&#8221;. Deze blog werpt een blik op welke maten en gewichten van services er zoal bestaan. We zullen het daarbij hebben over een aantal categorieën [&#8230;]]]></description>
										<content:encoded><![CDATA[<p style="text-align: justify;"><a href="/wp-content/uploads/2016/06/logomicro.png"><img loading="lazy" decoding="async" class="alignleft size-thumbnail wp-image-9733" src="/wp-content/uploads/2016/06/logomicro-150x150.png" alt="" width="150" height="150" /></a>Eén van de grote hypes in de wereld van de software architectuur, is het gebruik van MicroServices. Vaak is het &#8220;micro&#8221; aspect echter een beetje overkill, en maakt men eerder &#8220;MiniServices&#8221;. Deze blog werpt een blik op welke maten en gewichten van services er zoal bestaan.</p>
<p style="text-align: justify;"><span id="more-11111"></span></p>
<p style="text-align: justify;">We zullen het daarbij hebben over een aantal categorieën of grootteordes van services: <a href="/van-n-tier-naar-microservices/">microservices</a>, miniservices en macroservices. En dan zetten we er ook nog zogenaamde nanoservices langs, die eigenlijk (nog?) geen officiële definitie hebben&#8230; Al deze architecturele paradigma&#8217;s zijn in zekere mate geïnspireerd door de reeds langs gekende <a href="https://en.wikipedia.org/wiki/Service-oriented_architecture">Service-Oriented Architecture</a> (SOA).</p>
<p style="text-align: justify;">We kunnen nu wel al iedereen gerust stellen: er bestaat geen &#8220;one size fits all&#8221;; alle groottes van services zullen nuttig zijn in de portfolio van applicaties, diensten en componenten die een IT-bedrijf zal ondersteunen. Deze heterogeniteit wordt ook vooropgesteld door Gartner en ze noemen dit de MultiGrained <a href="https://apifriends.com/2017/06/05/what-is-masa/">Mesh App and Service Architecture</a> (MG-MASA). Het belangrijkste daarbij is dat alle componenten hierin zo onafhankelijk mogelijk ontwikkelbaar zijn, terwijl ze toch vlot met elkaar kunnen communiceren en integreren.</p>
<p style="text-align: justify;">Met uitzondering van de dubieuze term &#8220;nanoservices&#8221;, zullen we van klein naar groot gaan: we zullen eerst grondig definiëren wat microservices nu eigenlijk zijn, alvorens de &#8220;grotere&#8221; services te bespreken.</p>
<h1 style="text-align: justify;">MicroServices: van Startup tot Web Scale speler</h1>
<p style="text-align: justify;">Microservices zijn onafhankelijke diensten met een sterk beperkte scope. Ze volgen rigoureus een aantal architecturale principes waardoor ze extreem wendbaar ( <strong><em>agile </em></strong>) zijn en ook heel flexibel schaalbaar. Ze zijn zo ontkoppeld mogelijk van andere applicaties en diensten, doch communiceren er ook mee. Deze schijnbare tegenstrijdigheid wordt doorgaans opgevangen door een <a href="/het-event-als-leidend-voorwerp-in-software-engineering/">Event-Driven Architecture</a>, dewelke losgekoppelde communicatie in gedistribueerde systemen ondersteunt.</p>
<div style="width: 300px; display: block; align: right; vertical-align: top; float: right; border: 1px solid #ddd; margin: 4px 0 5px 10px; padding: 5px 5px 0px 5px; background-color: #eee;">
<p><strong><em>Definitie: MicroService</em></strong></p>
<p style="text-align: justify;">Microservices zijn sterk ingekapselde, losgekoppelde, onafhankelijk ontplooibare en schaalbare applicatiecomponenten met een sterk beperkte scope. De microservices architectuur is gebaseerd op een combinatie van SOA en DDD en heeft drie belangrijke objectieven: wendbaarheid bij de ontwik-keling, flexibiliteit bij de uitrol en precieze schaalbaarheid.</p>
</div>
<p style="text-align: justify;">De beperkte scope en bijgevolg doorgaans kleinere codebase is ook voor een stuk wat een microservice zo wendbaar maakt: ze kunnen door een klein devops team worden ontwikkeld en onderhouden en meermaals daags opnieuw uitgerold worden met veranderende features. Een grote applicatie die aldus ondersteund wordt door een groep van microservices, zal constant online blijven maar continu kleine veranderingen ondergaan en dus voortdurend evolueren. Op deze manier zorgt de microservices architectuur dus voor extreem door-gedreven <a href="https://en.wikipedia.org/wiki/Continuous_delivery">Continuous Delivery</a>. Andere aspecten van deze architectuur zijn het principe van &#8220;single responsability&#8221; (wat op hetzelfde neerkomt als de beperkte scope), extreme schaalbaarheid en &#8211; indien de microservice gepersisteerde data beheert, exclusieve toegang (= &#8220;eigenaarschap&#8221; of <em>ownership</em>) tot zijn database (of andere persistentie-oplossing), in het kader van de loskoppeling.</p>
<p style="text-align: justify;">Microservices zijn op de kaart gezet door toepassing bij een aantal grote en bekende bedrijven als <span class="fontstyle0">Twitter, </span><span class="fontstyle0">Airbnb, Disney, Dropbox, GE, Goldman Sachs, en uiteraard ook grote Cloud spelers  zoals Amazon en Google. M</span><span style="font-weight: 300; text-align: justify;">icroservices, volgens de strikte definitie, zijn echter bij veel middelgrote bedrijven nog zeldzaam, al evolueren sommige miniservices (zie verder) na een tijdje wel tot een groepje microservices, doordat aparte functionaliteiten worden afgesplitst.</span></p>
<div style="width: 375px; display: block; align: right; vertical-align: top; float: left; border: 1px solid #ddd; margin: 4px 10px 5px 0; padding: 5px 5px 0px 5px; background-color: #eee;">
<p><strong><em>&#8220;Reuse&#8221;: Een anti-patroon&nbsp;?</em></strong></p>
<p style="text-align: justify;">Hergebruik wordt vaak gezien als de heilige graal van ontwikkeling: alles wat we reeds bouwden, zouden we moeten kunnen hergebruiken indien de functionaliteit voorkomt in iets anders dat we gaan bouwen.</p>
<p style="text-align: justify;">We moeten echter goed gaan opletten op welk niveau we gaan hergebruiken, zeker als we met de architectuur richting microservices evolueren. Vermits deze zo onafhankelijk mogelijk van elkaar moeten zijn, kan het <strong>soms contraproductief</strong> zijn <strong>om code te gaan hergebruiken tussen meerdere microservices</strong>. Dergelijk hergebruik creëert afhankelijkheden en verplichtingen die de wendbaarheid van een microservice doen afnemen.</p>
<p style="text-align: justify;">Waar vinden we dan wel nog <strong>herbruikbaarheid</strong>? <strong>Op het niveau van de APIs</strong>. Deze dienen te worden behandeld als een volwaardig eindproduct, dat kan worden gebruikt in tal van andere toepassingen en eventueel zelfs extra-muros.</p>
</div>
<p style="text-align: justify;"><span style="font-weight: 300; text-align: justify;">Ze worden qua aangeboden functionaliteit opzettelijk en strikt beperkt gehouden: normaal gezien wordt er slechts één specifieke feature ondersteund, of één bounded context binnen een domein (voor meer info over deze term, kijk naar </span><a style="font-weight: 300; text-align: justify;" href="https://en.wikipedia.org/wiki/Domain-driven_design">Domain Driven Design</a><span style="font-weight: 300; text-align: justify;"> (DDD)). </span>Doordat ze zo klein zijn en slechts één functionaliteit hebben, en apart uitrolbaar zijn, vormen microservices dus de ultieme vorm van flexibele schaalbaarheid. Een applicatie bestaande uit vele microservices kan optimaal gebruik maken van beschikbare resources: elke component die iets meer gebruikt wordt dan een andere, kan apart opgeschaald worden. Componenten die minder vaak nodig zijn, worden omlaag geschaald.</p>
<p style="text-align: justify;">De onafhankelijkheid van een microservice beperkt zich best niet tot fysiek afzonderlijke deployments. Ook gedeelde libraries kunnen namelijk worden beschouwd als een te grote afhankelijkheid tussen verschillende microservices. Op deze manier wordt hergebruik soms een anti-patroon (&#8220;anti-pattern&#8221;). Het gaat dan natuurlijk wel om de code die het domein implementeert, er is weinig op tegen om utilitaire bibliotheken, zoals een logging raamwerk, te hergebruiken in meerdere microservices.</p>
<p style="text-align: justify;">Microservices vinden we dan ook vooral terug bij bedrijven die op grote schaal (&#8220;web scale&#8221;) actief zijn, en dusdanig grote volumes moeten ondersteunen dat elke uitgespaarde percent benodigde resources een enorme kostenreductie tot gevolg heeft. We denken dan aan grote mediaspelers als Netflix, winkels als Amazon en Zalando, en uiteraard ook de Twitters, Facebooks en Googles van deze tijd.</p>
<div style="width: 475px; display: block; align: right; vertical-align: top; float: center; border: 1px solid #ddd; margin: 0 auto; padding: 5px; background-color: #eee;">
<p><strong><em>MicroServices: een andere &#8220;ph-waarde&#8221;: van ACID naar BASE</em></strong></p>
<p style="text-align: justify;">In de wereld van transacties is het ACID-model reeds lang ingeburgerd. Het stelt voorwaarden waaraan transacties moeten voldoen: A<span class="fontstyle0">tomicity, Consistency, Isolation and Durability. Dit komt erop neer dat de gegevens ten allen tijde overal overeenkomen, correct zijn, goed bewaard worden, nooit verloren kunnen gaan, etc.</span></p>
<p style="text-align: justify;">Voor gedistribueerde systemen is dit echter moeilijk, omdat deze sterke consistentie inhoudt dat men (voor de zelfde prijs) op minstens één van twee andere vlakken zal moeten inbinden: beschikbaarheid of partition tolerance (tolerantie voor netwerkfalen tussen de componenten). Microservices hebben hier per definitie last van, vanwege hun gedistribueerde natuur. Dit principe noemt men het <a href="/99-9-availability-fundamenteel-anders/">CAP-theorema</a>.</p>
<p style="text-align: justify;"><span class="fontstyle0">Bij gebruik van deze architectuur raadt men dan ook een alternatief aan: BASE. Dit wil zeggen: B</span><span class="fontstyle0">asically Available, Soft state, Eventually consistent. In dit model geeft men een stuk consistentie op om het geheel beschikbaarder en schaalbaarder te kunnen maken.</span></p>
<p style="text-align: justify;"><span class="fontstyle0">Puur technisch is het echt niet altijd gemakkelijk om met eventual consistency om te gaan; men zal dit model eerder moeten doortrekken op business niveau. Een aanpak gebaseerd op (business) Events zal doorgaans nauwer aansluiten bij dit model.</span></p>
</div>
<p style="text-align: justify;">Maar doordat het een nieuwe, moderne manier van ontwikkelen is, zijn microservices ook enorm populair bij startups. Deze hebben vaak het voordeel dat ze van nul kunnen beginnen met hun technologie, zonder enige legacy, en dat ze met kleine teams en een frisse bedrijfscultuur werken. <strong>Een Devops en Agile cultuur zijn namelijk sterke vereisten om microservices te kunnen ontwikkelen</strong>; hun architectuur verschuift namelijk de complexiteit weg van de binnenkant van een monoliet, maar recht naar de onderlinge interacties tussen vele (gedistribueerde) applicatiecomponten. Het voordeel  van microservices voor de startups is weliswaar dat ze op technologisch vlak een stuk robuuster zijn bij eventuele plotse groei, en ze de wendbaarheid ook goed kunnen gebruiken om snel in te spelen op marktopportuniteiten (er zijn reducties in ontwikkelingstijd tot 75% geschat).</p>
<h2 style="padding-left: 30px;"><em>APIs en Microservices</em></h2>
<p style="text-align: justify;">Microservices worden vaak beschouwd als de ideale manier om een <a href="/data-centric-it-met-rest/">API</a> te implementeren. Dit is inderdaad een goede werkwijze, maar dan met één hele belangrijke caveat: de onafhankelijkheid van de microservice moet gewaarborgd blijven. Het scheiden van een<span class="fontstyle0"> API en zijn implementatie is een fundamenteel principe bij SOA, dat nog belangrijker wordt in de context van de extreme vereisten die aan een microservices architectuur worden gesteld.</span></p>
<p style="text-align: justify;">Een API moet behandeld worden als een product. Geregeld worden APIs namelijk naar buiten toe opengesteld (en soms zelfs effectief gemonetariseerd), en op zijn minst dienen ze als interface naar andere software componenten (en dus andere ontwikkelteams) toe. Ze hebben dus nood aan een rigoureus change management.</p>
<figure id="attachment_11196" aria-describedby="caption-attachment-11196" style="width: 938px" class="wp-caption aligncenter"><a href="/wp-content/uploads/2017/11/MSA-example.png"><img loading="lazy" decoding="async" class="size-full wp-image-11196" src="/wp-content/uploads/2017/11/MSA-example.png" alt="" width="938" height="558" srcset="https://www.smalsresearch.be/wp-content/uploads/2017/11/MSA-example.png 938w, https://www.smalsresearch.be/wp-content/uploads/2017/11/MSA-example-300x178.png 300w, https://www.smalsresearch.be/wp-content/uploads/2017/11/MSA-example-768x457.png 768w" sizes="auto, (max-width: 938px) 100vw, 938px" /></a><figcaption id="caption-attachment-11196" class="wp-caption-text">Een voorbeeld van een Microservices architectuur, waarbij een API wordt aangeboden aan de buitenwereld.</figcaption></figure>
<p style="text-align: justify;">De microservices daarentegen moeten snel kunnen evolueren en aangepast kunnen worden. Soms worden ze zelfs volledig vervangen (ze zijn <em>disposable</em>: het verlies blijft beperkt doordat ze kleiner zijn). Sowieso zal één microservice ook nooit een volledige API implementeren (tenzij als het echt om een miniscuul klein product zou gaan): achter de API bevindt zich doorgaans een hele batterij van componenten, waarbij verschillende microservices de effectieve business logica zullen uitvoeren. Andere componenten zijn bijvoorbeeld een Event bus, maar ook en vooral een API bemiddelingstool (&#8220;mediation&#8221;), die ervoor zal zorgen dat de calls naar de API bij de correcte afhandeling terecht komen, en op die manier de microservice loskoppelen van de ondersteunde API. Deze tools zijn doorgaans vervat binnen de context van een API Gateway of API Management suite.</p>
<h1 style="text-align: justify;">De Pragmatische Aanpak: MiniServices</h1>
<p style="text-align: justify;">De term &#8220;microservice&#8221; wordt vaak misbruikt om eender welke kleine en herbruikbare dienst te benoemen. Maar zoals we hierboven zagen, voldoet dit nog lang niet aan de eigenlijke definitie, en is het ook zo dat een microservice zijn eigen API best niet zelf publiceert.</p>
<p style="text-align: justify;">De categorie die dan ook door vele &#8220;enterprise niveau&#8221; bedrijven het vaakst wordt toegepast, is eigenlijk de <em>miniservice</em>, ook al zijn deze bedrijven snel om te zeggen dat ze een &#8220;microservices architectuur&#8221; gebruiken. De architecturen lijken dan ook wel enigszins op elkaar en enkel de grootte en scope (en het uiteindelijke doel) verschillen hier nog.</p>
<p style="text-align: justify;">Miniservices implementeren geen volledige applicatie, en zullen normaal gezien ook slechts een stukje van een extern gerichte API invullen. Ze focussen zich op de functionaliteiten verband houdende met een bepaald subdomein in de applicatie. Wanneer we de principes van Domain Driven Design (DDD) volgen: een miniservice kan een volledig domein implementeren, maar eventueel ook een niet al te kleine &#8220;bounded context&#8221;, of alles wat ertussen ligt.</p>
<p style="text-align: justify;">Miniservices zijn onafhankelijk van elkaar te ontwikkelen en uit te rollen, waardoor er een flexibiliteit ontstaat: doordat men werkt met kleinere componenten die losjes gekoppeld zijn en die men daardoor apart kan ontwikkelen en laten evolueren, kan men iets sneller de functionaliteiten veranderen via een meer agile ontwikkelingsmethode, en men kan dus sneller op de bal spelen. Hierdoor kan men beter ten dienste staan van de business, die sneller zijn product kan laten aanpassen aan veranderende marktomstandigheden. Dit komt dus neer op een afgezwakte versie van de vereisten voor microservices.</p>
<p style="text-align: justify;">Wat data betreft, heeft men opties: in sommige gevallen kan men ervoor opteren om de database die onder een miniservice staat, nog bruikbaar te houden voor andere applicaties en diensten; soms is dit gewoon gemakkelijker en efficiënter dan de data via de API bloot te stellen, of op een moderne gedistribueerde manier te verspreiden zoals dit bij microservices gebeurt. Men moet hier echter mee oppassen en het beperken, want hierdoor creëert men quasi onherroepelijk afhankelijkheden. Beter is het om wat de data betreft toch eerder richting microservices architectuur te evolueren en de miniservice exclusieve toegang tot zijn data te geven.</p>
<p style="text-align: justify;">Volgens een schatting van <a href="https://www.gartner.com/doc/3615120/innovation-insight-miniservices">Gartner</a> zal tegen 2019 90% van de organisaties het microservices paradigma te disruptief vinden en eerder gebruik maken van miniservices.</p>
<p style="text-align: justify;">Er zijn, ten slotte, nog een aantal andere alternatieven voor een microservices aanpak, naast miniservices. Zo bestaan er <a href="/as-a-service-een-waaier-aan-mogelijkheden/">PaaS platformen</a> waarbij er sterk visueel kan worden ontwikkeld (met zogenaamde &#8220;zero coding&#8221;) en men op die manier de productiviteit kan laten stijgen. En voor het implementeren van business processen kan men nog gebruik maken van <a href="/case-management-oude-software-in-een-nieuwe-verpakking/">BPMS suites</a>, die ook hier vaak een sterke automatisatie toelaten op een meer grafische manier.</p>
<h1 style="text-align: justify;">Old School: de MacroService</h1>
<p style="text-align: justify;">Macroservices representeren de traditionele SOA aanpak, die nu sterk in vraag wordt gesteld door de IT industrie. Via een macroservice brengt men een volledige applicatie of dienst online, in één grote deployment; deze ondersteunt dan een typische request/response API. Het woord service kan dan in hoofdzaak worden aangewend doordat men de applicatie of dienst heeft ge-&#8220;service enabled&#8221;. Er wordt m.a.w. een SOAP of (beter!) een REST API aangeboden aan de buitenwereld om met de macroservice te interageren. Vaak is het ook zo dat deze applicatie bovenop een database gebouwd wordt, via dewelke nog wordt geïntegreerd met andere toepassingen.</p>
<p style="text-align: justify;">Momenteel is het sterk afgeraden om op deze manier een nieuwe applicatie op te bouwen, maar deze systemen hebben echter wel nog af en toe hun nut! Vele bedrijven hebben namelijk een bepaald arsenaal aan zogenaamde &#8220;legacy&#8221; toepassingen, die vaak nog belangrijke taken verrichten, en die te groot en te complex (en dus te duur) zijn geworden om ze volledig te vervangen door een moderne variant die dezelfde kernfunctionaliteit encapsuleert. Wat men dan op z&#8217;n minst kan doen om deze applicaties beter te kunnen integreren met de nieuwere generatie componenten, is ze te &#8220;service enablen&#8221;. Dit betekent dat men er een laag rond bouwt die een moderne (REST) API zal aanbieden waarmee andere toepassingen dan gemakkelijker verbinding kunnen maken. De laag zal ervoor zorgen dat de buitenwereld niets hoeft te merken van de soms rare zaken die met de legacy toepassing kunnen misgaan, of van de esoterische programmeertalen en protocols die erin worden gebruikt.</p>
<p style="text-align: justify;">Let wel dat er steeds moet worden afgewogen om zulke applicaties toch niet te re-engineeren. Wanneer het echt om de core business van een bedrijf gaat, en men wil kunnen inspelen op b.v. een veranderende markt (m.a.w. wanneer men wendbaarder, meer <em>agile</em>, wil zijn), kan het op langere termijn soms voordeliger zijn om ze te vervangen door een meer op microservices geïnspireerde architectuur. Het gebruik van MacroServices is eerder geschikt voor applicaties die minder vaak veranderingen dienen te ondergaan, maar die wel via een API moeten kunnen worden aangesproken. Soms kan het ook gaan om aangekochte software, die dus inherent niet onder de eigen controle zit en niet kan ge-reëngineered worden.</p>
<p><a href="/wp-content/uploads/2017/11/granulariteit.png"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-11195" src="/wp-content/uploads/2017/11/granulariteit.png" alt="" width="913" height="439" srcset="https://www.smalsresearch.be/wp-content/uploads/2017/11/granulariteit.png 913w, https://www.smalsresearch.be/wp-content/uploads/2017/11/granulariteit-300x144.png 300w, https://www.smalsresearch.be/wp-content/uploads/2017/11/granulariteit-768x369.png 768w" sizes="auto, (max-width: 913px) 100vw, 913px" /></a></p>
<h1 style="text-align: justify;">De Toekomst is hier: NanoServices</h1>
<p style="text-align: justify;">NanoServices kan twee zaken betekenen. Enerzijds is het een door sommige mensen aangewende term om op een anti-patroon bij het bouwen van microservices te duiden: namelijk een <a href="https://dzone.com/articles/soa-anti-pattern-nanoservices">te sterke beperking van de scope</a>, op een manier die zinloos is. Het komt er dus op neer dat men goed moet nadenken over de bounded context en het te verwachten aparte gebruik van de diensten die deel uitmaken van een applicatie.</p>
<p style="text-align: justify;">Anderzijds kan men de term ook officieus gebruiken als bijnaam voor de zogenaamde Serverless diensten, of nog <a href="https://en.wikipedia.org/wiki/Function_as_a_service">Function Platform as a Service</a> (FPaaS). Via deze platformen kan men hele kleine stukjes code uitrollen zonder zich iets te moeten aantrekken van onderliggende infrastructuur, en deze aan te bieden via een kleine API. De granulariteit van de manier van ontplooien zorgt er daarbij voor dat men vaak nog kleiner kan gaan dan bij microservices. Uiteraard moet men erover blijven waken dat het zin blijft hebben om de functionaliteit zodanig in stukjes te kappen, wil men niet in het gelijknamig benoemde anti-pattern terechtkomen.</p>
<p style="text-align: justify;"><a href="https://martinfowler.com/articles/serverless.html">Serverless Architecture</a> maakt momenteel grote furore in de public cloud en er zijn ook al enkele open source oplossingen om een dergelijk platform in het eigen datacenter op te zetten.</p>
<h1 style="text-align: justify;">Besluit: Wat moeten we nu Bouwen?</h1>
<p style="text-align: justify;"><strong><em>De microservices architectuur is een zeer goede blauwdruk voor software ontwikkeling</em></strong>. De voordelen van wendbaarheid en flexibiliteit zijn een must voor bedrijven die goed willen kunnen inspelen op de markt en de klant, en een robuuste portfolio aan herbruikbare services willen uitbouwen.</p>
<p style="text-align: justify;">De vereisten om aan échte microservices ontwikkeling te doen zijn echter erg hoog, en het is niet altijd noodzakelijk om zulke extreme flexibiliteit en schaalbaarheid te behalen. Vaak is het voldoende om de microservices architectuur eerder benaderend na te streven via het bouwen van zogenaamde <strong><em>miniservices. In de meeste gevallen is dit dan ook de aangewezen manier van werken</em></strong>.</p>
<p style="text-align: justify;">Wanneer legacy toepassingen moeten worden ontsloten en er geen grote nood is aan het wendbaarder maken van deze applicaties, maar wel een ontsluiting via een goede API, dan kan het voldoende zijn om een services laag rond deze applicaties te bouwen en er op die manier een zogenaamde macroservice van te maken, die vanaf dan vlot mee kan integreren met de rest van de portfolio. Denk echter goed na of toekomstige wendbaarheid en flexibiliteit echt wel van minder belang zijn, alvorens dergelijke technische schuld (technical debt) te betonneren.</p>
<p style="text-align: justify;">NanoServices, ten slotte, indien het niet om het anti-patroon gaat, zijn zeker iets waar men mee mag beginnen experimenteren. Het voordeel om zich niets meer van infrastructuur te hoeven aan te trekken en de beschikbaarheid en schaalbaarheid op een quasi magische manier cadeau te krijgen, is niet te onderschatten. In een toekomstige blog wordt er zeker nog teruggekomen op deze Serverless Architectures.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>De &#8216;Vortex&#8217; van Enablers</title>
		<link>https://www.smalsresearch.be/de-vortex-van-enablers/</link>
		
		<dc:creator><![CDATA[Koen Vanderkimpen]]></dc:creator>
		<pubDate>Tue, 21 Feb 2017 08:14:01 +0000</pubDate>
				<category><![CDATA[[NL]]]></category>
		<category><![CDATA[Blog post]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[cloud computing]]></category>
		<category><![CDATA[Container]]></category>
		<category><![CDATA[EDA]]></category>
		<category><![CDATA[egov]]></category>
		<category><![CDATA[Event]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[microservices]]></category>
		<category><![CDATA[PaaS]]></category>
		<category><![CDATA[Productivity]]></category>
		<category><![CDATA[rest]]></category>
		<category><![CDATA[SOA]]></category>
		<category><![CDATA[Software architectures]]></category>
		<category><![CDATA[software design]]></category>
		<category><![CDATA[software engineering]]></category>
		<category><![CDATA[vortex]]></category>
		<category><![CDATA[Web 2.0]]></category>
		<guid isPermaLink="false">/?p=10419</guid>

					<description><![CDATA[In de software engineering wereld zijn de voorbije jaren, en nu nog altijd, een aantal indrukwekkende evoluties aan de gang. Verschillende technologieën samen bieden nu nieuwe perspectieven en kunnen de business transformeren. In deze blog een korte opsomming van een aantal van deze ontwikkelingen. Later kunnen we inzoomen op de impact ervan op de business. [&#8230;]]]></description>
										<content:encoded><![CDATA[<p style="text-align: justify;">In de software engineering wereld zijn de voorbije jaren, en nu nog altijd, een aantal indrukwekkende evoluties aan de gang. Verschillende technologieën samen bieden nu nieuwe perspectieven en kunnen de business transformeren. In deze blog een korte opsomming van een aantal van deze ontwikkelingen. Later kunnen we inzoomen op de impact ervan op de business.</p>
<p style="text-align: justify;"><span id="more-10419"></span></p>
<h1 style="text-align: justify;">&#8220;Digitale Transformatie&#8221;</h1>
<p style="text-align: justify;">Wanneer men het tegenwoordig heeft over <a href="https://www.infoworld.com/article/3152507/it-strategy/the-5-myths-of-digital-transformation.html">bovenstaand buzzword</a>, zal men steevast een aantal technologische evoluties opsommen die een verregaande impact op onze wereld hebben, en bijgevolg ook op de business, (in het bijzonder de IT business). We denken dan <a href="/analytics-behind-the-scenes-humans-and-computers-versus-big-data/">Big Data + Analytics</a>, <a href="/ce-quun-reseau-social-peut-nous-apprendre/">Sociale Media</a>, <a href="/cloud-metaforen-elektriciteit-goud/">Cloud</a> en <a href="/van-chipkaart-naar-smartphone-naar-arm/">Mobile</a>; de zogenaamde &#8220;<a href="https://www.gartner.com/technology/research/nexus-of-forces/">Nexus of Forces</a>&#8220;.</p>
<p style="text-align: justify;">Het is wel waar dat deze <em>nexus</em> nogal wat furore maakt, maar die kan dat, doordat er, onderliggend, een aantal andere technologische evoluties spelen, die het de software engineering wereld mogelijk maken om al deze krachten voldoende te ondersteunen. Evoluties die, als het ware, ervoor zorgen dat de software die deze nexus draaiende houdt, kan worden gebouwd en ontplooid op een beheersbare manier, zonder dat ontwikkelaars ten onder gaan aan de groeiende complexiteit. Een aantal van die evoluties vatten we hier nu samen onder de noemer <em><strong>&#8220;Vortex of Enablers&#8221;</strong></em>. (Over vele van deze technologieën hadden we het reeds eerder &#8211; volg de links voor meer informatie.)</p>
<h1 style="text-align: justify;">Enablers 1 en 2: Verregaande Virtualisatie met Cloud &amp; Containers</h1>
<p style="text-align: justify;"><img loading="lazy" decoding="async" class="alignleft wp-image-10540" src="/wp-content/uploads/2017/02/containers-300x225.png" alt="" width="184" height="140" />De <a href="/de-stille-cloud-machtsgreep/">Cloud</a> is niet meer weg te denken, maar welke technologie gaat er precies achter schuil? Oorspronkelijk werden er enorme sprongen voorwaarts gemaakt door het virtualiseren van machines, en infrastructuur in het algemeen (<a href="/as-a-service-een-waaier-aan-mogelijkheden/">IaaS</a>). Maar nu zien we de platformen pas echt ook voor ontwikkelaars tot wasdom komen. <a href="/productiviteitsverhoging-met-paas/">PaaS</a> platformen zijn, dankzij de verschroeiend harde introductie van Container technologie, uitgegroeid tot de <a href="https://www.docker.com/"><img loading="lazy" decoding="async" class="alignright size-medium wp-image-10538" src="/wp-content/uploads/2017/01/moby-300x192.png" alt="" width="300" height="192" srcset="https://www.smalsresearch.be/wp-content/uploads/2017/01/moby-300x192.png 300w, https://www.smalsresearch.be/wp-content/uploads/2017/01/moby.png 525w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a>virtualisatiekeuze bij uitstek. Het worden nu zelfs vaker en vaker in de eerste plaats &#8220;<a href="/disruptie-in-de-cloud-stack-caas/">Container Platformen</a>&#8220;. Momenteel zijn Containers niet meer weg te denken uit Software Engineering, en ze zijn ook een belangrijke enabler voor <a href="https://en.wikipedia.org/wiki/DevOps">DevOps</a>. Maar het verhaal zal hier nog niet eindigen. Aan de horizon duikt reeds een nog hoger niveau van virtualisatie op: het zogenaamde <a href="https://en.wikipedia.org/wiki/Serverless_computing">Serverless Computing</a> (zie ook onze <a href="/radar/approaches-radar-2017/">research radar</a>).</p>
<h1 style="text-align: justify;">Enabler 3: MicroServices</h1>
<p style="text-align: justify;"><a href="/van-n-tier-naar-microservices/"><img loading="lazy" decoding="async" class="alignleft size-thumbnail wp-image-9733" src="/wp-content/uploads/2016/06/logomicro-150x150.png" alt="" width="150" height="150" />MicroServices</a> zijn de manier bij uitstek waarmee we complexe IT systemen kunnen opdelen in vele kleinere en makkelijker onderhoudbare componenten. Ze zorgen ervoor dat we een verzameling van toepassingen kunnen bouwen die allemaal potentieel klant zijn van elkaar en elk hun stukje van het geheel uitvoeren. Daarnaast zijn ze typisch klein en onafhankelijk, waardoor ze ideaal zijn om uitgerold te worden via een container platform.</p>
<h1 style="text-align: justify;">Enabler 4: Event Driven Software Engineering</h1>
<p style="text-align: justify;"><img loading="lazy" decoding="async" class="alignleft size-thumbnail wp-image-9123" src="/wp-content/uploads/2015/10/event-150x150.png" alt="" width="150" height="150" />Over Events hadden we het al uitgebreid in <a href="/het-event-als-leidend-voorwerp-in-software-engineering/">vorige blogs</a>. In het algemeen merken we dat dit mechanisme aan populariteit wint om een dynamisch en snel veranderende wereld, die continu nieuwe data genereert, te kunnen vatten in IT.</p>
<p style="text-align: justify;">Events lenen zich dan ook heel goed voor het capteren van data: alles wat in een computersysteem binnenkomt, kan namelijk worden gezien als een Event, en het gebruik hiervan als <a href="/geavanceerd-event-driven-engineering/">primaire databron</a> is soms handiger dan wanneer men de ervan afgeleide data zou gaan bewaren. In een overheidscontext zien we bijvoorbeeld de notie van <a href="https://gcn.com/articles/2016/05/24/civic-moments.aspx">civic moments</a> aan belang winnen, hetgeen eigenlijk niet minder dan business Events zijn voor overheidstoepassingen.</p>
<h1 style="text-align: justify;">Enabler 5: Steeds Betere Web Raamwerken</h1>
<p style="text-align: justify;"><img loading="lazy" decoding="async" class="alignleft wp-image-7833" src="/wp-content/uploads/2014/12/html5_javascript_js-300x175.png" alt="" width="220" height="132" />Het venster dat de klant krijgt op een IT-toepassing, is de client. Het is dan ook enorm belangrijk dat deze goed is gebouwd en vooral handig is in gebruik. De meeste client toepassingen zijn momenteel webgebaseerd of mobiel, en ook in deze laatste categorie wint webtechnologie gestaag aan belang. Het trio <a href="/html-5-een-rijke-ervaring-zonder-plugins/">Html, Css en Javascript</a> blijft dan ook de manier bij uitstek om een eindgebruikerstoepassing te bouwen, en elk jaar zien we wel een <a href="/de-frameworks-blob/">nieuw raamwerk populair worden</a> in deze wereld; raamwerken die het makkelijker maken om sneller grotere, complexere en mooiere toepassingen te bouwen. Daarnaast wordt deze technologie ook steeds beter ondersteund door de technologie die er aan server-zijde bij komt: we krijgen haast onbeperkte schaalbaarheid en robuustheid wanneer we toestandsloze webtoepassingen gaan hosten op container platformen, gebruik makende van microservices als backend, op hun beurt ontsloten door (vaak <a href="/data-centric-it-met-rest/">RESTful</a>) API&#8217;s (en, waarom niet, werkend via <a href="/javascript-altijd-en-overal/">node.js</a>).</p>
<h1 style="text-align: justify;">Enabler 6: API&#8217;s</h1>
<p style="text-align: justify;"><img loading="lazy" decoding="async" class="alignleft size-thumbnail wp-image-10541" src="/wp-content/uploads/2017/02/api-150x150.png" alt="" width="150" height="150" />Het aanbieden van een degelijke API is de ideale manier om de functionaliteiten van een IT systeem beschikbaar te stellen aan andere. API&#8217;s hebben reeds een hele evolutie achter de rug: eerst waren er vooral (taal-specifieke) programmatorische API&#8217;s, daarna werden componenten steeds beter interoperationeel dankzij eerst SOAP-, en daarna REST-gebaseerde API&#8217;s. Momenteel zijn er heuse API Management platformen, die, naast beheer van API&#8217;s, ook voor de interoperabiliteit van heel wat communicatieprotocollen kunnen zorgen.</p>
<p style="text-align: justify;">Via API&#8217;s kan men een sterk hergebruik van data bekomen: gegevens die reeds verwerkt zijn door één toepassing, worden op die manier beschikbaar voor een hele resem andere; vaak zijn dit dan microservices, maar ook frequent client-toepassingen op het web. De API&#8217;s worden bovendien vaak ook aangeboden aan derde partijen en daarbij soms ook gemonetariseerd. Uiteindelijk <a href="/data-centric-it-met-rest/">ontstaat er een hele &#8220;API Economy&#8221;</a>: meer en meer toepassingen ontstaan eenvoudigweg doordat de data die ze nodig hebben, reeds beschikbaar is, en makkelijk consumeerbaar via zo&#8217;n API.</p>
<h1 style="text-align: justify;">De Vortex</h1>
<p style="text-align: justify;">De relaties tussen de verschillende opgesomde technologische evoluties hier beschreven, zijn duidelijk waar te nemen: dit blijkt reeds uit de tekst. Op dit moment hebben we dan ook een unieke smeltkroes: de effecten van deze <em>enablers</em> op software engineering versterken elkaar, en vormen zo het fundament van de vele zaken die er bovenop worden gebouwd: de digitale economie.</p>
<p style="text-align: justify;"><a href="/wp-content/uploads/2017/02/vortex.png"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-10542" src="/wp-content/uploads/2017/02/vortex.png" alt="" width="762" height="608" srcset="https://www.smalsresearch.be/wp-content/uploads/2017/02/vortex.png 762w, https://www.smalsresearch.be/wp-content/uploads/2017/02/vortex-300x239.png 300w" sizes="auto, (max-width: 762px) 100vw, 762px" /></a></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Van N-tier naar MicroServices</title>
		<link>https://www.smalsresearch.be/van-n-tier-naar-microservices/</link>
					<comments>https://www.smalsresearch.be/van-n-tier-naar-microservices/#comments</comments>
		
		<dc:creator><![CDATA[Koen Vanderkimpen]]></dc:creator>
		<pubDate>Wed, 08 Jun 2016 07:00:37 +0000</pubDate>
				<category><![CDATA[Blog post]]></category>
		<category><![CDATA[cloud computing]]></category>
		<category><![CDATA[Container]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[methodology]]></category>
		<category><![CDATA[microservices]]></category>
		<category><![CDATA[N-tier]]></category>
		<category><![CDATA[Productivity]]></category>
		<category><![CDATA[rest]]></category>
		<category><![CDATA[SOA]]></category>
		<category><![CDATA[Software architectures]]></category>
		<category><![CDATA[software design]]></category>
		<category><![CDATA[software engineering]]></category>
		<guid isPermaLink="false">/?p=9702</guid>

					<description><![CDATA[Het opdelen van een applicatie in apart uitrolbare componenten is reeds lang een kwestie van relatief grote &#8220;tiers&#8221;. Van zuiver monolithische applicaties zijn we gedurende de voorbije decennia langzaamaan geëvolueerd, via 2-tier en 3-tier applicaties, naar N-tier. Tegenwoordig neemt deze evolutie extremere vormen aan: applicaties bestaan uit steeds meer en steeds kleinere componenten, die uiteindelijk [&#8230;]]]></description>
										<content:encoded><![CDATA[<p style="text-align: justify;"><a href="/wp-content/uploads/2016/06/logomicro.png" rel="attachment wp-att-9733"><img loading="lazy" decoding="async" class="alignleft size-thumbnail wp-image-9733" src="/wp-content/uploads/2016/06/logomicro-150x150.png" alt="logomicro" width="150" height="150" /></a>Het opdelen van een applicatie in apart uitrolbare componenten is reeds lang een kwestie van relatief grote &#8220;tiers&#8221;. Van zuiver monolithische applicaties zijn we gedurende de voorbije decennia langzaamaan geëvolueerd, via 2-tier en 3-tier applicaties, naar N-tier. Tegenwoordig neemt deze evolutie extremere vormen aan: applicaties bestaan uit steeds meer en steeds kleinere componenten, die uiteindelijk tot <em>microservices</em> evolueren.</p>
<p style="text-align: justify;"><span id="more-9702"></span>Op termijn kan <a href="https://searchsoa.techtarget.com/answer/Microservices-architecture-101-What-the-heck-is-it">deze architecturale stijl</a> de grenzen tussen verschillende applicaties gaan vervagen, om ze te transformeren tot een applicatie-ecosysteem bestaande uit vele herbruikbare, onafhankelijk uitrolbare en afzonderlijk schaalbare componenten.</p>
<h2 style="text-align: justify;">De Geschiedenis van &#8220;Tiers&#8221;</h2>
<p style="text-align: justify;">De meest traditionele applicaties zijn <a href="https://en.wikipedia.org/wiki/Monolithic_application">monolithisch</a>: één programma dat al zijn functies vervult zonder afhankelijk te zijn van externe hulpmiddelen. Lang geleden werden de meeste applicaties op deze manier gebouwd, en vandaag zijn heel wat desktop applicaties hier nog steeds voorbeelden van. Met de opkomst van netwerken en Database Management Systemen (DBMS), werd echter voor vele applicaties een meer component-gebaseerde uitrol nodig. Voor een gedistribueerde applicatie werd het b.v. nodig om een &#8220;client&#8221; en een &#8220;server&#8221; of &#8220;backend&#8221; te hebben, om op die manier een gebruiker toe te laten de applicatie op een andere plaats (op een andere machine) te gebruiken dan de plaats waar de kern van de applicaties zich bevindt (meestal ook met het doel om meerdere gebruikers gelijktijdig van de applicatie gebruik te kunnen laten maken). Dit wordt de &#8220;<a href="https://en.wikipedia.org/wiki/Client%E2%80%93server_model">client-server</a>&#8221; of &#8220;2-tier&#8221; architectuur genoemd. Voor applicaties, die aan geavanceerde I/O doen, werd het daarnaast ook noodzakelijk om de verantwoordelijkheid hiervoor bij een DBMS te leggen. Dit systeem wordt dan de &#8220;data tier&#8221; van de applicatie.</p>
<p style="text-align: justify;">Uiteraard leidden deze twee architecturen reeds snel tot de zogenaamde &#8220;<a href="https://en.wikipedia.org/wiki/Multitier_architecture">3-tier</a>&#8221; architectuur, met een client tier en een backend die werd gesplitst in een tier voor de business logic en een data tier. Tegenwoordig zijn er vaak nog meer opsplitsingen mogelijk. In de context van web-applicaties zal men b.v. de client tier nog in twee delen splitsen: de eigenlijke client in de browser, en een &#8220;web tier&#8221; om de client via het web te kunnen aanbieden. Men zou deze laatste zelfs nog kunnen opdelen in aparte servers voor het statische en dynamische gedeelte van de applicatie. Ook wordt het mogelijk dat een applicatie meerdere verschillende databronnen gebruikt, of dat haar business logica verdeeld geraakt over meerdere tiers (b.v. <a href="https://programmers.stackexchange.com/questions/140999/application-layer-vs-domain-layer">application logic vs domain logic</a>). Langzaamaan verdwijnt dan ook de notie van tiers (waarbij men een min of meer hiërarchische en lineaire relatie verwacht tussen de componenten), om plaats te maken voor een flexibeler systeem, waarbij de communicatie flexibeler vormen kan aannemen&#8230;</p>
<figure id="attachment_9723" aria-describedby="caption-attachment-9723" style="width: 896px" class="wp-caption aligncenter"><a href="/wp-content/uploads/2016/06/drietier.png" rel="attachment wp-att-9723"><img loading="lazy" decoding="async" class="size-full wp-image-9723" src="/wp-content/uploads/2016/06/drietier.png" alt="Van links naar rechts: een monolithische applicatie, een 2-tier, en een 3-tier applicatie." width="896" height="485" srcset="https://www.smalsresearch.be/wp-content/uploads/2016/06/drietier.png 896w, https://www.smalsresearch.be/wp-content/uploads/2016/06/drietier-300x162.png 300w, https://www.smalsresearch.be/wp-content/uploads/2016/06/drietier-768x416.png 768w" sizes="auto, (max-width: 896px) 100vw, 896px" /></a><figcaption id="caption-attachment-9723" class="wp-caption-text">Van links naar rechts: een monolithische applicatie, een 2-tier, en een 3-tier applicatie.</figcaption></figure>
<h2 style="text-align: justify;">Tiers of Lagen?</h2>
<p style="text-align: justify;">De opdeling in tiers klinkt allicht bekend in de oren voor wie reeds met software architectuur bezig is, en doet ook denken aan de opdeling van een applicatie in lagen (&#8220;layers&#8221;). De beide termen, <a href="https://blogs.msdn.microsoft.com/jmeier/2008/09/05/layers-and-tiers/">tiers en layers</a>, worden soms zelfs als <a href="https://stackoverflow.com/questions/6978991/what-is-the-difference-between-tier-vs-layer-application">synoniemen</a> beschouwd (zuiver taalkundig zijn ze dat ook, en in het Nederlands kunnen we ze beide vertalen als &#8220;<a href="https://stackoverflow.com/questions/120438/whats-the-difference-between-layers-and-tiers">lagen</a>&#8220;). Dit is logisch: er is een grote <a href="https://www.codeproject.com/Tips/277818/Difference-in-layer-and-tier-architecture">similariteit</a> tussen deze beide concepten, en bijgevolg is er dus enige verwarring aanwezig.</p>
<p style="text-align: justify;">Lagen voorzien in een logische scheiding binnen de architectuur van een applicatie, waarbij het zaak is om tussen deze lagen, die functioneel gezien zo coherent mogelijk moeten zijn, een zo groot mogelijke onderlinge onafhankelijkheid te creëren (het zogenaamde &#8220;<a href="https://en.wikipedia.org/wiki/Loose_coupling">loskoppelen</a>&#8220;). Ze hebben eerder als doel om functionele belangen (user interface (UI), applicatielogica, business logica, data access, etc.) gescheiden te houden en de applicatie aldus makkelijker onderhoudbaar te maken op lange termijn, doordat deze belangen apart benaderd kunnen worden. Tiers daarentegen, zijn fysiek gescheiden onderdelen van een applicatie, die apart van elkaar worden ontplooid, waardoor ze niet alleen het aparte onderhoud en de aparte ontwikkeling verder doortrekken, maar ook apart hergebruiken en schalen mogelijk maken.</p>
<p style="text-align: justify;">De verwarring tussen de beide concepten ontstaat allicht omdat de logische layers in de praktijk zeer vaak corresponderen met de fysieke tiers: de UI zit in de client tier, de business logica zit in de logic tier, en de database-laag komt overeen met de data tier. De scheiding in losgekoppelde lagen is daarnaast de ideale manier om ervoor te zorgen dat tiers los van elkaar kunnen worden gedeployed. Daarenboven wordt het onderscheid ook vervaagd in de context van de Cloud: Tiers zijn dan wel fysiek gescheiden, maar door het gebruik van Cloud-technologie (<a href="/kosten-besparen-in-de-cloud/">IaaS</a> of <a href="/productiviteitsverhoging-met-paas/">PaaS</a>) kunnen ze evenwel worden gehost op dezelfde fysieke of zelfs virtuele machine. Ze zouden eenvoudig in verschillende <a href="/disruptie-in-de-cloud-stack-caas/">Containers</a> kunnen worden geplaatst (zij het JEE, Docker of andere containers).</p>
<p style="text-align: justify;">Om te besluiten: layers vormen dus de bouwstenen van een applicatie op een logische manier, en beïnvloeden sterk de architectuur en het design ervan. Tiers, op hun beurt, definiëren de opdeling van een applicatie in onafhankelijk uitrolbare componenten. Ze hebben ook een sterke impact op de architectuur, maar eerder op het niveau van de interacties tussen de applicatie en andere systemen binnen een groter geheel, en op het niveau van de infrastructuur. Tiers kunnen moeilijk zonder layers: het loskoppelen van delen van de applicatie is nodig om ze apart te kunnen uitrollen. Beide zijn onontbeerlijk om de complexiteit van een applicatie in beheersbare blokken op te delen.</p>
<h2 style="text-align: justify;">Richting Microservices</h2>
<p style="text-align: justify;">Over de interessante evoluties binnen applicatie-architectuur en lagen, kunnen we in de toekomst nog een blog schrijven. Vandaag ligt de focus op tiers, en hoe het opsplitsen van een applicatie in componenten en diensten verregaande gevolgen kunnen hebben voor applicatie-ecosystemen.</p>
<hr />
<p style="padding-left: 60px; text-align: justify;">Ik heb het reeds in <a href="/data-centric-it-met-rest/">verscheidene</a> <a href="/html-5-een-rijke-ervaring-zonder-plugins/">blogs</a> over <strong>applicatie-ecosystemen</strong> gehad, maar nagelaten het concept eenduidig te definiëren. Bij deze dan een poging tot definitie:</p>
<blockquote>
<p style="padding-left: 60px; text-align: justify;">Een ecosysteem van applicaties is een groep applicaties (en gerelateerde IT entiteiten) die werken rond een gelijkaardig business domein, of die toebehoren aan eenzelfde organizatie (of beide). Soms betreft het zelfs groepen van applicaties die rond verschillende maar gerelateerde business domeinen werken. Typisch verwerken ze dezelfde of sterk gerelateerde gegevens, en vrij vaak interageren ze ook met elkaar, en/of worden ze gebruikt door dezelfde groep van eindgebruikers.</p>
</blockquote>
<p style="padding-left: 60px; text-align: justify;">Hieruit volgt dat binnen een applicatie-ecosysteem er een groot potentieel (!) bestaat voor hergebruik. Of dit potentieel effectief wordt gehaald, hangt sterk af van gemaakte keuzes betreffende <a href="https://searchsoa.techtarget.com/tip/Designing-a-modern-enterprise-architecture">enterprise</a>, <a href="https://martinfowler.com/articles/microservices.html">applicatie</a> en systeem-architectuur.</p>
<hr />
<p style="text-align: justify;">Een kritiek die is komen te ontstaan op de N-tier architectuur, is dat een applicatie nog steeds te geïsoleerd en self-contained is: alle business-logica zit vaak in één tier, alle persistentie-logica in een andere, etc. Men zou zelfs kunnen zeggen dat we de monolithische applicatie hebben vervangen door monolithische tiers! En dit terwijl applicaties steeds complexer worden en verregaandere behoeften hebben, zoals de integratie van business rules, taakbeheer en workflows; allemaal zaken die zo complex zijn, dat ze al een toepassing op zichzelf kunnen vormen.</p>
<p style="text-align: justify;"><a href="https://en.wikipedia.org/wiki/Service-oriented_architecture">Service Oriented Architecture</a> (SOA) is een stap in de goede richting, maar historisch gezien richt deze methodiek zich op interacties tussen verschillende applicaties, binnen het ruimere opzicht van enterprise architectuur. Microservices nemen de ideeën van N-tier en SOA samen, en drijven ze naar een nieuw summum: elke aparte applicatie wordt nu beschouwd als zijn eigen mini-ecosysteem van onafhankelijk uitrolbare diensten, zich elk focussend op een verschillende business capabiliteit, zo klein gemaakt als maar kan (vandaar &#8220;micro&#8221;), en met zo min mogelijk gecentraliseerde orchestratie. Meestal heeft elke microservice &#8211; indien deze nood heeft aan persistentie &#8211; ook zijn eigen database (of een ander soort persistentiesysteem), die enkel en alleen voor deze microservice wordt ingeschakeld.</p>
<p style="text-align: justify;">Deze stijl <a href="https://searchcloudapplications.techtarget.com/feature/How-microservices-bring-agility-to-SOA">verhoogt sterk de Agility van SOA</a>: de kleinere services kunnen meer cohesief op zichzelf staan, en intern zijn ze meestal ook eenvoudiger dan volledige applicaties typisch zijn. Daarnaast kunnen onderhoud en evolutie van alle microservices apart van elkaar worden beheerd. Dit alles maakt dat deze aparte microservices makkelijker te bouwen en onderhouden zijn dan de volledige applicatie (uiteraard kruipt er wel enig werk in het op een goede manier opdelen van de applicatie in verschillende microservices). Men kan zelfs zo ver gaan als volledige microservices te vervangen door nieuwere en betere: indien ze klein genoeg zijn, kan de kost gerechtvaardigd zijn om een dergelijk stuk software &#8211; huiver &#8211; weg te gooien.</p>
<p style="text-align: justify;">Daarnaast wordt het voor ontwikkelteams ook mogelijk om flexibeler te kiezen welke technologie, welke talen en welke raamwerken ze zullen gebruiken om hun specifieke microservice zo optimaal mogelijk te implementeren. Ze zouden Java, Node.js, of eender welke andere technologie kunnen kiezen, zo lang ze maar overeenkomen over een gestandaardiseerd communicatiekanaal. Dit kanaal, op zijn beurt, zien we meer en meer evolueren richting <a href="/data-centric-it-met-rest/">RESTful APIs</a>: een robuuste de facto standaard.</p>
<p style="text-align: justify;">Deze evolutie wordt verder nog <a href="https://www.slideshare.net/dberkholz/how-microservices-are-redefining-modern-application-architecture">versterkt door de opkomst van Container technologie</a>: deze zijn de infrastructuurplatformen van de toekomst (of zelfs al van vandaag), en zijn &#8220;lichter&#8221; en makkelijker inzetbaar dan virtuele machines, waardoor het kosten-effectief wordt om een groter aantal kleinere services te hosten i.p.v. een klein aantal zwaardere applicatie(s)(-tiers). De beide technologische evoluties werken op die manier hand in hand om de schaalbaarheid van applicaties te verbeteren op een fijnmazig niveau: elke microservice kan onafhankelijk van de andere worden geschaald, en via <a href="https://en.wikipedia.org/wiki/Operating-system-level_virtualization">containers </a>kan er voor worden gezorgd dat de eronder liggende infrastructuur, gebruikt door het geheel aan services, een betere match vormt met het evoluerend verbruikspatroon.</p>
<figure id="attachment_9977" aria-describedby="caption-attachment-9977" style="width: 380px" class="wp-caption alignright"><a href="/wp-content/uploads/2016/06/ntiercorrected.png" rel="attachment wp-att-9727"><img loading="lazy" decoding="async" class="wp-image-9977" src="/wp-content/uploads/2016/06/ntiercorrected.png" width="380" height="447" srcset="https://www.smalsresearch.be/wp-content/uploads/2016/06/ntiercorrected.png 597w, https://www.smalsresearch.be/wp-content/uploads/2016/06/ntiercorrected-255x300.png 255w" sizes="auto, (max-width: 380px) 100vw, 380px" /></a><figcaption id="caption-attachment-9977" class="wp-caption-text">Een N-tier applicatie die evolueert richting microservices: de applicatielogica zit in een aparte &#8220;tier&#8221;, of nog: de applicatielogica wordt aan de client aangeboden als een aparte service. Deze maakt op zijn beurt gebruik van een business logic tier, of nog: van business logic services. Onderaan staan dan de tiers of diensten die de entiteiten van de business (het domein) ondersteunen en persisteren.</figcaption></figure>
<p style="text-align: justify;">Microservices maken het <a href="https://bit.ly/1O7vbWA">mogelijk voor een organizatie om meer Agile te werken</a> en cross-functionele teams te bouwen, gefocust op business capabiliteiten, i.p.v. teams gefocusd op specifieke IT functies (UI specialisten, middleware specialisten, DBA&#8217;s, &#8230;). Wanneer een applicatie monolithisch wordt gebouwd, is er vaak veel heen-en-weer &#8220;gedoe'&#8221; tussen verschillende teams nodig om cross-functionele zaken te implementeren, met het gevaar dat business logica doorsijpelt op plaatsen waar deze niet hoort te zitten (b.v. in de UI of de data laag). Een meer expliciete scheiding van de applicatie in service componenten maakt de grenzen duidelijker, zowel tussen de microservices als tussen de teams die ze implementeren, waardoor er meer onafhankelijkheid in het implementatieproces kan worden gestopt. Een meer <a href="https://www.infoworld.com/article/3044726/application-development/succeeding-in-the-continuous-enterprise-with-microservices.html">servicegericht model van samenwerking</a> wordt op deze manier mogelijk: teams worden klant van elkaar omdat hun producten klant zijn van elkaar.</p>
<h2 style="text-align: justify;">Ecosystemen van Services</h2>
<p style="text-align: justify;">Binnen een applicatie-ecosysteem van enige omvang, is er <a href="https://www.ibm.com/developerworks/websphere/library/techarticles/1503_clark/1305_clark.html">altijd al op vele niveau&#8217;s de nood geweest aan integraties</a>. Met een beetje geluk waren deze integraties gekend wanneer een applicatie werd gebouwd, maar vaak is het echter zo dat de nood aan integratie achteraf ontstaat, wanneer een applicatie reeds enige tijd in productie is. Integraties komen ook voor op het UI niveau, waar ze leiden tot portaal technologie en integration-at-the-glass. Of ze komen voor op het niveau van de data, wat vaak tot gevolg heeft dat een database wordt gedeeld tussen verschillende applicaties. Er zijn reeds verdienstelijke pogingen gedaan om al deze integraties op te vangen via middleware, maar zelfs de alomtegenwoordige <a href="https://en.wikipedia.org/wiki/Enterprise_service_bus">Enterprise Service Bus</a> (ESB) is geen panacee.</p>
<p style="text-align: justify;">We kunnen nooit vrij zijn van de onverwachtheid van sommige integratie-behoeftes, maar microservices kunnen een aantal van de moeilijkheden helpen verminderen. Enerzijds komt dit door de standaardisatie van de communicatie tussen microservices. Anderzijds doordat business capabiliteiten dankzij deze architectuur worden opgedeeld in kleinere stukken, wordt het makkelijker om een component te gaan hergebruiken in een andere applicatie, en deze apart te schalen indien hij daardoor zwaarder belast wordt. Bovendien kunnen we applicaties op zo&#8217;n manier opsplitsen, dat hergebruik wordt aangemoedigd: er zullen enerzijds applicatiespecifieke microservices deel uitmaken van een applicatie, maar anderzijds zullen er ook microservices zijn die een bepaalde business problematiek of capabiliteit ondersteunen, die onafhankelijk is van applicatielogica; deze laatste zijn vaak in meerdere toepassingen nuttig. Verder kunnen we ook nog microservices hebben die verantwoordelijk zijn voor een bepaald deel van de persistentie-behoeften van de applicatie. Services zo klein dat ze data betreffen die ook door andere applicaties gebruikt wordt. Deze &#8220;data services&#8221; zullen de poortwachters zijn van de data: zij encapsuleren de databases (of maken deel uit van een algemenere <a href="https://en.wikipedia.org/wiki/Data_as_a_service">Data as a Service</a> aanpak) en hebben meerdere applicaties als klant.</p>
<p style="text-align: justify;">Uiteindelijk leidt deze opdeling in services tot een heel ander ecosysteem: niet één van monolithische of tiered applicaties, maar één van intergeconnecteerde microservices. En deze grote groep microservices kan dan &#8220;ten dienste&#8221; staan van specifieke &#8220;client&#8221;-componenten die een UI bevatten en dus de gebruikers toelaten dit ecosysteem te gebruiken op verschillende manieren. Dezelfde achterliggende dienst kan bijvoorbeeld een rol spelen binnen een web-toepassing, maar ook in een mobiele toepassing.</p>
<figure id="attachment_9728" aria-describedby="caption-attachment-9728" style="width: 1010px" class="wp-caption aligncenter"><a href="/wp-content/uploads/2016/06/microservices.png" rel="attachment wp-att-9728"><img loading="lazy" decoding="async" class="size-full wp-image-9728" src="/wp-content/uploads/2016/06/microservices.png" alt="captie" width="1010" height="746" srcset="https://www.smalsresearch.be/wp-content/uploads/2016/06/microservices.png 1010w, https://www.smalsresearch.be/wp-content/uploads/2016/06/microservices-300x222.png 300w, https://www.smalsresearch.be/wp-content/uploads/2016/06/microservices-768x567.png 768w" sizes="auto, (max-width: 1010px) 100vw, 1010px" /></a><figcaption id="caption-attachment-9728" class="wp-caption-text">Een fictief voorbeeld van een microservice applicatie-ecosysteem, conceptueel voorgesteld. Bovenaan zijn er meerdere eindgebruikers-componenten, die een UI bevatten (de clients). Deze maken gebruik van onderliggende microservices die bepaalde functionaliteiten (b.v. &#8220;plaats een product in een winkelmandje&#8221;) ondersteunen en zo samen de applicatielogica van een applicatie vormen. Op hun beurt maken deze diensten gebruik van allerlei services die de business capabiliteiten, onafhankelijk van applicaties, ondersteunen (b.v. &#8220;plaats een bestelling&#8221;). Deze laatste maken dan weer gebruik van business diensten van een lager niveau: diensten die het beheer op zich nemen van de specifieke business entiteiten (zoals &#8220;klant&#8221;, &#8220;bestelling&#8221;, &#8220;factuur&#8221;). Op het laagste niveau krijgen we een eerder technische dienstverlening (b.v. &#8220;database voor klantgegevens&#8221;). Het komt in deze tekening niet veel voor, maar het is niet verboden dat diensten in een bepaalde laag gebruik maken van diensten die zich niet in de laag er direct onder bevinden. Deze opdeling in lagen is in principe ook slechts een voorbeeld; er zijn mogelijk nog andere manieren om de microservices te klassificeren. (In de tekening is met gekleurde bolletjes aangeduid welke microservices uiteindelijk deel uitmaken van welke applicatie.)</figcaption></figure>
<p style="text-align: justify;">Eén probleem is dat deze sterke interconnectiviteit tussen een steeds groter wordende groep microservices kan gaan lijken op een onbeheersbaar kluwen (zogenaamde point-to-point integraties). Er zijn echter een paar zaken die dit effect tegengaan:</p>
<ul style="text-align: justify;">
<li>Enerzijds is de point-to-point integratie slechts een integratie op conceptueel niveau. Op technisch vlak zal dit worden opgevangen door middleware-technologie, zoals de ESB. Zolang een dienst een logisch en leesbaar adres heeft, kan deze op die manier worden aangesproken. De werkelijke localisering en verbinding is de verantwoordelijkheid van een onderliggend platform.</li>
<li>Daarnaast kan men ook twee reeds eerder besproken principes toepassen: die van <a href="/data-centric-it-met-rest/">Data-Centric IT</a>, en die van <a href="/het-event-als-leidend-voorwerp-in-software-engineering/">Event-Driven Architecture</a>. Deze zijn compatibel met elkaar en met Microservices, en zorgen samen voor een beheersbaar &#8220;inter-service&#8221; communicatiemodel: samen kunnen deze methodieken er namelijk voor zorgen dat een dienst enkel moet weten welke data en events er nodig zijn en hoe deze kunnen worden geadresseerd. Er zijn uiteraard nog externe zaken nodig die geen data of Event zijn, maar dit zijn dan meestal generieke en nuttige diensten, zoals het genereren van pdf&#8217;s of het aanroepen van eerder technische capabiliteiten, zoals authenticatie of logging.</li>
<li>Ten slotte komen er specifiek voor deze problematiek ook oplossingen te voorschijn onder de noemer van <a href="https://techcrunch.com/2012/11/11/5-rules-for-api-management/">API management</a>. De publieke interface van een microservice kan namelijk gezien worden als een API (<a href="https://en.wikipedia.org/wiki/Application_programming_interface">Application Programming Interface</a>). Naast het beheer van een veelvoud aan APIs, richten deze platformen zich ook vaak op het beheer van de levenscyclus van de erachterliggende diensten.</li>
</ul>
<h2 style="text-align: justify;">Besluit</h2>
<p style="text-align: justify;">Microservices zijn als deployment architectuur een perfecte match voor Agile software ontwikkeling, en verankeren de goede principes van Service Oriented Architecture. Ze maken het mogelijk software op een flexibeler manier te ontwikkelen, met vele kleine componenten, waardoor er sneller kan worden ingespeeld op veranderende behoeften. Ze laten herbruikbaarheid toe op een fijnmazige manier, en verhogen de efficiëntie in het gebruik van resources. Ook met de huidige ontwikkelingen op vlak van infrastructuur: Containers, gaan ze heel goed samen. Samen daarmee, en met EDA en REST, vormen ze een blauwdruk om een applicatie-ecosysteem future-proof op te bouwen.</p>
<p>&nbsp;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.smalsresearch.be/van-n-tier-naar-microservices/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>Data Centric IT met REST</title>
		<link>https://www.smalsresearch.be/data-centric-it-met-rest/</link>
		
		<dc:creator><![CDATA[Koen Vanderkimpen]]></dc:creator>
		<pubDate>Tue, 05 Apr 2016 08:25:38 +0000</pubDate>
				<category><![CDATA[Blog post]]></category>
		<category><![CDATA[analytics]]></category>
		<category><![CDATA[big data]]></category>
		<category><![CDATA[cloud computing]]></category>
		<category><![CDATA[data center]]></category>
		<category><![CDATA[Data Integration]]></category>
		<category><![CDATA[Information management]]></category>
		<category><![CDATA[Master Data Management]]></category>
		<category><![CDATA[methodology]]></category>
		<category><![CDATA[open data]]></category>
		<category><![CDATA[Productivity]]></category>
		<category><![CDATA[rest]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[SOA]]></category>
		<category><![CDATA[Software architectures]]></category>
		<category><![CDATA[software design]]></category>
		<category><![CDATA[software engineering]]></category>
		<category><![CDATA[standards]]></category>
		<guid isPermaLink="false">/?p=9535</guid>

					<description><![CDATA[Over REST hebben we het al vaak gehad op deze blog, maar zelden hebben we het gehad over het ware voordeel van dit acroniem: meer nog dan een technologie, is het een architecturaal principe voor het web en voor samenwerkende computersystemen: één dat de data centraal stelt. Data Centric IT De meeste informatici weten wel wat data is, [&#8230;]]]></description>
										<content:encoded><![CDATA[<p style="text-align: justify;"><a href="/wp-content/uploads/2016/03/rest-api.png" rel="attachment wp-att-9563"><img loading="lazy" decoding="async" class="alignleft size-thumbnail wp-image-9563" src="/wp-content/uploads/2016/03/rest-api-150x150.png" alt="rest-api" width="150" height="150" srcset="https://www.smalsresearch.be/wp-content/uploads/2016/03/rest-api-150x150.png 150w, https://www.smalsresearch.be/wp-content/uploads/2016/03/rest-api-300x300.png 300w, https://www.smalsresearch.be/wp-content/uploads/2016/03/rest-api-768x767.png 768w, https://www.smalsresearch.be/wp-content/uploads/2016/03/rest-api.png 780w" sizes="auto, (max-width: 150px) 100vw, 150px" /></a>Over REST hebben we het al <a href="/rest-iam-part-2-oauth/">vaak</a> <a href="/rest-iam-%e2%80%93-part-3-scim/">gehad</a> op deze blog, maar zelden hebben we het gehad over het ware voordeel van dit acroniem: meer nog dan een technologie, is het een architecturaal principe voor het web en voor samenwerkende computersystemen: één dat de data centraal stelt.</p>
<p><span id="more-9535"></span></p>
<h1>Data Centric IT</h1>
<p><a href="/wp-content/uploads/2016/03/data-centric.png" rel="attachment wp-att-9567"><img loading="lazy" decoding="async" class="alignright wp-image-9567 size-medium" src="/wp-content/uploads/2016/03/data-centric-300x225.png" alt="data-centric" width="300" height="225" srcset="https://www.smalsresearch.be/wp-content/uploads/2016/03/data-centric-300x225.png 300w, https://www.smalsresearch.be/wp-content/uploads/2016/03/data-centric-768x576.png 768w, https://www.smalsresearch.be/wp-content/uploads/2016/03/data-centric.png 960w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></p>
<p style="text-align: justify;">De meeste informatici weten wel wat <a href="https://en.wikipedia.org/wiki/Data_(computing)">data</a> is, en wat databases zijn, maar zijn toch vooral &#8216;opgevoed&#8217; met een focus op applicaties, algoritmes, enz. De applicatie is uiteraard erg belangrijk: ze verricht het nuttige werk van een computersysteem. Toch moeten we dit nuanceren. Een <a href="https://blogs.informatica.com/2015/12/14/two-tips-data-centric-architecture/#fbid=_csrNPgnhtT">applicatie is eigenlijk enkel een hulpmiddel</a> voor het manipuleren van de data. Als we er eens bij stil staan, dan komen we tot de vaststelling dat nagenoeg elke applicatie die we kennen, dient om data uit te lezen, in te voeren, mooi/anders weer te geven of te bewerken. Dit geldt zowel voor eindgebruikersapplicaties als voor applicaties die enkel I/O doen (b.v. de zogenaamde &#8216;batch&#8217; applicaties). <strong>Dus eigenlijk is de data de <a href="https://www.drdobbs.com/architecture-and-design/data-centric-architecture-a-model-for-th/229301018">centrale asset</a> van een IT-systeem!</strong></p>
<p style="text-align: justify;">Dan kunnen we ons de vraag stellen of we hier bij het ontwikkelen van de architectuur van computersystemen niet meer rekening mee zouden moeten houden? We kunnen de data voorop stellen als centrale entiteit bij de communicatie tussen verschillende applicaties en gebruikers, en ook binnen verschillende subsystemen binnen applicaties. Doen we dit consequent, dan evolueren we stilaan naar een <em>Data-Centric aanpak van IT</em>.</p>
<h1>REST</h1>
<p style="text-align: justify;"><a href="https://en.wikipedia.org/wiki/Representational_state_transfer">REST</a> staat als acroniem voor &#8216;Representational State Transfer&#8217;. Deze wijze van data-overdracht heeft een aantal verschillende eigenschappen, waaronder dat men heel eenvoudig via http(s!) en via gebruik van eenvoudige principes als CRUD (Create &#8211; Read &#8211; Update &#8211; Delete) verschillende systemen kan laten communiceren. Voor de <em>rest</em> ga ik hier niet meer verder over uitweiden in deze blog, behalve één belangrijke eigenschap: een goedgemaakte REST API biedt een zelf-descriptief overzicht op data (zogenaamde resources), en niet op methodes. (Voor een mooie en praktische uitleg over REST, kan ik verwijzen naar <a href="https://stackoverflow.com/questions/671118/what-exactly-is-restful-programming">stackoverflow</a> en ook naar <a href="https://www.looah.com/source/view/2284">deze leuke</a>.)</p>
<p style="text-align: justify;">Men kan <a href="https://www.thoughtworks.com/insights/blog/rest-api-design-resource-modeling">dit principe</a> nog anders uitleggen: de namen die men aan de functies geeft die men in een REST API (Application Programming Interface) kan oproepen om een resultaat te bekomen, zullen geen werkwoorden zijn, maar naamwoorden. Een voorbeeld maakt dit een stuk duidelijker:</p>
<p style="text-align: justify;">Nemen we een applicatie die als één van haar functionaliteiten een lijst van personen/gebruikers beheert. Het is de bedoeling dat andere applicaties personen kunnen zoeken, opvragen, toevoegen, veranderen en verwijderen. In plaats van op de traditionele manier een programmatorische  API of een <a href="https://en.wikipedia.org/wiki/SOAP">SOAP</a> (Simple Object Access Protocol) webservice aan te bieden, openen we via een RESTful webservice een raam op de door de applicatie beheerde gegevens. Dit ziet er dan b.v. als volgt uit:</p>
<ul>
<li>&#8220;GET www.app.be/rest/user&#8221;: geeft alle beheerde personen (meestal geeft men daarbij slechts een beperkt aantal gegevens per persoon)</li>
<li>&#8220;POST /user&#8221; (we laten het eerste deel van de url vanaf nu achterwege, dit is altijd hetzelfde): laat toe om de gegevens voor een nieuwe persoon door te sturen.</li>
<li>&#8220;GET /user/100023&#8221;: geeft detailgegevens over persoon met volgnummer 100023</li>
</ul>
<figure id="attachment_9569" aria-describedby="caption-attachment-9569" style="width: 732px" class="wp-caption aligncenter"><a href="/wp-content/uploads/2016/03/output-examples.png" rel="attachment wp-att-9569"><img loading="lazy" decoding="async" class="size-full wp-image-9569" src="/wp-content/uploads/2016/03/output-examples.png" alt="Voorbeeld van de output van een REST service, wanneer een lijst van users wordt opgevraagd, in drie mogelijke formaten: xml, json en html" width="732" height="349" srcset="https://www.smalsresearch.be/wp-content/uploads/2016/03/output-examples.png 732w, https://www.smalsresearch.be/wp-content/uploads/2016/03/output-examples-300x143.png 300w" sizes="auto, (max-width: 732px) 100vw, 732px" /></a><figcaption id="caption-attachment-9569" class="wp-caption-text">Voorbeeld van de output van een REST service, wanneer een lijst van users wordt opgevraagd, in drie mogelijke output formaten: xml, json en html</figcaption></figure>
<p style="text-align: justify;">Het is dus eigenlijk alsof je rechtstreeks in een hiërarchische structuur van je gegevens alle nodige bewerkingen kan uitvoeren. Uiteraard zal de achterliggende applicatie niet zomaar alles toelaten: ze zal nog steeds verantwoordelijk zijn voor controle op input, en voor authenticatie en autorisatie van de systemen die van de RESTful service gebruik maken. De beveiliging in een dergelijke aanpak gebeurt best volgens de principes van <a href="https://en.wikipedia.org/wiki/Data-centric_security">Data-Centric Security</a>, daar deze als van nature in een dergelijke Data-Centric Architecture thuishoren.<br />
<a href="/wp-content/uploads/2016/03/rest-centric.png" rel="attachment wp-att-9581"><img loading="lazy" decoding="async" class="alignleft wp-image-9581" src="/wp-content/uploads/2016/03/rest-centric.png" alt="rest-centric" width="450" height="338" srcset="https://www.smalsresearch.be/wp-content/uploads/2016/03/rest-centric.png 960w, https://www.smalsresearch.be/wp-content/uploads/2016/03/rest-centric-300x225.png 300w, https://www.smalsresearch.be/wp-content/uploads/2016/03/rest-centric-768x576.png 768w" sizes="auto, (max-width: 450px) 100vw, 450px" /></a>Uiteindelijk kan veelvuldig toepassen van RESTful principes om applicaties aan te sturen, leiden tot een mooi <strong>Data-Centric Ecosysteem</strong>, waar de principes van deze architectuur doorgetrokken zijn over een groot aantal verschillende applicaties: In plaats van elke applicatie nog een aparte url te geven, zal men eerder een algemene url opzetten voor de data binnen de gehele groep samenwerkende applicaties (e.g. &#8216;data.socialsecurity.be&#8217; zou dit kunnen zijn voor alle applicaties binnen de sociale zekerheid). Vele applicaties samen, elk verantwoordelijk voor hun stukje van de hiërarchie, zullen instaan voor deze ene grote RESTful data API, en alle applicaties zullen er op hun beurt weer gebruik van kunnen maken, zonder dat ze zich iets hoeven aan te trekken van waar de data vandaan komt of naartoe gaat (of door welke applicatie ze wordt beheerd). De applicaties hoeven elkaar op deze manier niet meer te kennen of te adresseren; ze hebben enkel het adres nodig van de data. In een enterprise omgeving zal men typisch gebruik maken van een &#8216;<a href="https://searchcloudapplications.techtarget.com/definition/API-management">API management suite</a>&#8216; om zo&#8217;n RESTful API, of groep ervan, te beheren.</p>
<p style="text-align: justify;">Men kan het toepassen van dit principe ook zien als een vorm van <a href="https://en.wikipedia.org/wiki/Data_virtualization">Data Virtualization</a>, aangezien men services aanbiedt om de data, die normaal gezien in onderliggende databases zit, virtueel te ontsluiten. Indien men deze architectuur via Cloud-technologie implementeert, kan men het ook zien als een vorm van <a href="https://en.wikipedia.org/wiki/Data_as_a_service">Data-as-a-Service</a> (DaaS). Wanneer men de data ook aanbiedt aan externe partijen, kan het eventueel gaan om <a href="https://en.wikipedia.org/wiki/Open_data">Open Data</a>.</p>
<p style="text-align: justify;">Het doortrekken van deze architectuur over de gehele organisatie, of zelfs over meerdere samenwerkende organisaties, kan sterke <strong>synergieën</strong> teweeg brengen, doordat de data voor alle applicaties éénvormig beschikbaar wordt, en doordat het gemakkelijker wordt om reeds door RESTful services ontsloten data te gaan hergebruiken vanuit meerdere applicaties. Dit leidt uiteindelijk tot wat men noemt, een bloeiende &#8216;<a href="https://searchsoa.techtarget.com/definition/API-economy-application-programming-interface-economy">API economy</a>&#8216;. Uiteraard is een goede governance over de data, een <a href="https://community.sparxsystems.com/white-papers/632-the-value-of-an-enterprise-information-model">Enterprise Information Model</a>, en een sterk <a href="/de-la-production-industrielle-a-la-production-dinformation-analogies-paradoxes-et-enseignements-operationnels/">Master Data Management</a> van belang om hiermee echt succesvol te zijn.</p>
<h1>Communiceren via REST of via EDA&nbsp;?</h1>
<p style="text-align: justify;">Via RESTful services kan je dus in principe alle applicaties die dit vereisen, met elkaar laten communiceren. Dezelfde mogelijkheden heb ik echter eerder al voorgesteld in de context van Event Driven Architecture (EDA) in twee eerdere blogs (<a href="/het-event-als-leidend-voorwerp-in-software-engineering/">basis</a> en <a href="/geavanceerd-event-driven-engineering/">geavanceerd</a>). Je kan je afvragen of dit niet redundant is, of welke van de twee nu de beste oplossing is?</p>
<p style="text-align: justify;">Het antwoord is &#8211; je had het allicht zien aankomen &#8211; dat beide oplossingen hun plaats hebben in een gedistribueerd ecosysteem. Events werken namelijk typisch <strong><a href="https://stackoverflow.com/questions/748175/asynchronous-vs-synchronous-execution-what-does-it-really-mean">asynchroon</a></strong>, terwijl REST <strong><a href="https://stackoverflow.com/questions/748175/asynchronous-vs-synchronous-execution-what-does-it-really-mean">synchroon</a></strong> kan worden gebruikt. Dit betekent dat een applicatie onmiddellijk op de hoogte kan worden gebracht, indien er een voor haar interessant Event beschikbaar is. Indien de applicatie echter meer data nodig heeft, die zich niet in een beschikbaar huidig Event bevindt, dan kan het deze gaan opvragen d.m.v. het gebruik van een RESTful service. Het besluit is dus dat we Events kunnen gebruiken om nieuwe gegevens zo snel mogelijk over het netwerk te verspreiden, naar alle belanghebbenden, en dat we RESTful services kunnen gebruiken om reeds gekende informatie universeel ter beschikking te stellen op het netwerk, waar alle geïnteresseerden ze kunnen gaan raadplegen. Een mooi complementair geheel dus &#8211; en het goede nieuws is dat de beide benaderingen meestal ondersteund kunnen worden door één en dezelfde onderliggende middleware technologie (typisch, de &#8216;<a href="https://en.wikipedia.org/wiki/Enterprise_service_bus">Enterprise Service Bus</a>&#8216; (ESB) ).</p>
<p><a href="/wp-content/uploads/2016/03/eda-rest.png" rel="attachment wp-att-9582"><img loading="lazy" decoding="async" class="aligncenter wp-image-9582 size-full" src="/wp-content/uploads/2016/03/eda-rest-e1458906104781.png" alt="eda-rest" width="960" height="518" srcset="https://www.smalsresearch.be/wp-content/uploads/2016/03/eda-rest-e1458906104781.png 960w, https://www.smalsresearch.be/wp-content/uploads/2016/03/eda-rest-e1458906104781-300x162.png 300w, https://www.smalsresearch.be/wp-content/uploads/2016/03/eda-rest-e1458906104781-768x414.png 768w" sizes="auto, (max-width: 960px) 100vw, 960px" /></a></p>
<h1>Besluit</h1>
<p style="text-align: justify;">Net zoals REST, passen Events heel goed in een Data-Centric Architectuur: Events, zeker business <strong>Events</strong>, zijn namelijk ook data, en een belangrijke informatiebron voor <a href="/big-data-analytics-whats-in-a-name/">Analytics</a>. Samen met <strong>REST</strong> hebben we dus de <strong>twee stukken van de communicatiepuzzel binnen Data-Centric IT</strong> volledig in handen.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Talend neemt Sopera over: open source datamanagement + applicatie-integratie</title>
		<link>https://www.smalsresearch.be/talend-neemt-sopera-over-open-source-datamanagement-applicatie-integratie/</link>
		
		<dc:creator><![CDATA[Dries Van Dromme]]></dc:creator>
		<pubDate>Thu, 18 Nov 2010 09:57:36 +0000</pubDate>
				<category><![CDATA[Blog post]]></category>
		<category><![CDATA[application integration]]></category>
		<category><![CDATA[Data Integration]]></category>
		<category><![CDATA[data quality]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[SOA]]></category>
		<guid isPermaLink="false">http://blogs.smals-mvm.be/research/?p=1408</guid>

					<description><![CDATA[De overname van Sopera (open source SOA en middleware) door Talend (open source data integratie en data management) creëert een heel sterke pure play open source middleware vendor, die kan profiteren van de synergie tussen data management en applicatie-integratie. Dit is m.i. goed gezien, want vaak zijn de redenen voor het falen van SOA-projecten e.d. [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>De overname van Sopera (open source SOA en middleware) door Talend (open source data integratie en data management) creëert een heel sterke pure play open source middleware vendor, die kan profiteren van de synergie tussen data management en applicatie-integratie.</p>
<p>Dit is m.i. goed gezien, want vaak zijn de redenen voor het falen van SOA-projecten e.d. (verwachtingen niet ingelost, vertragingen, budget overscheden, &#8230;) te vinden in de onderliggende datakwaliteitsproblemen of moeilijkheden op het vlak van data-integratie &#8211; naast de beter bekende redenen zoals gebrekkig requirements management en slechte software-kwaliteitscontrole (SQA). Dit zou dus wel eens een vruchtbaar huwelijk kunnen blijken.</p>
<p>U kan er <a href="https://www.talend.com/campaign/campaign.php?id=144&amp;src=HomePageSpecial"> hier meer</a> over lezen.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
