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

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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



<p>

_________________________</p>



<p><em>Dit is een ingezonden bijdrage van Koen Vanderkimpen, IT consultant bij Smals Research. &nbsp;Dit artikel werd geschreven in eigen naam en neemt geen standpunt in namens Smals.</em></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>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 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>
<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></p>
<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>
<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>
<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>
<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>
<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>Disruptie in de Cloud Stack: CaaS</title>
		<link>https://www.smalsresearch.be/disruptie-in-de-cloud-stack-caas/</link>
		
		<dc:creator><![CDATA[Koen Vanderkimpen]]></dc:creator>
		<pubDate>Wed, 16 Sep 2015 07:41:22 +0000</pubDate>
				<category><![CDATA[Blog post]]></category>
		<category><![CDATA[CaaS]]></category>
		<category><![CDATA[cloud computing]]></category>
		<category><![CDATA[Container]]></category>
		<category><![CDATA[CoreOS]]></category>
		<category><![CDATA[cost cutting]]></category>
		<category><![CDATA[data center]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[Docker]]></category>
		<category><![CDATA[Kubernetes]]></category>
		<category><![CDATA[Managing IT costs]]></category>
		<category><![CDATA[PaaS]]></category>
		<category><![CDATA[Productivity]]></category>
		<category><![CDATA[software design]]></category>
		<category><![CDATA[software engineering]]></category>
		<guid isPermaLink="false">/?p=8754</guid>

					<description><![CDATA[De Cloud hype: we zijn er nog maar pas van aan het bekomen, of daar is alweer iets nieuws dat de hele IT industrie op zijn kop tracht te zetten: Containers! De &#8220;powers that be&#8221; (Google, Microsoft, etc.) zijn er allemaal direct opgesprongen &#8211; en gelukkig maar, want zo worden ze netjes opgeslokt in &#8220;the [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><a href="/wp-content/uploads/2015/07/containers.jpg"><img loading="lazy" decoding="async" class=" size-thumbnail wp-image-8902 alignleft" src="/wp-content/uploads/2015/07/containers-150x150.jpg" alt="containers" width="150" height="150" /></a>De Cloud hype: we zijn er nog maar pas van aan het bekomen, of daar is alweer iets nieuws dat de hele IT industrie op zijn kop tracht te zetten: <strong>Containers!</strong> De &#8220;powers that be&#8221; (Google, Microsoft, etc.) zijn er allemaal direct opgesprongen &#8211; en gelukkig maar, want zo worden ze netjes opgeslokt in &#8220;the bigger picture&#8221;, of toch niet?</p>
<p><span id="more-8754"></span></p>
<h2>Containers, the name you know&nbsp;!</h2>
<p>Het woord &#8220;Container&#8221; klinkt vele mensen, niet alleen in de bouw en scheepvaart, maar ook in de IT, reeds bekend in de oren. Het is dan ook, net zoals &#8220;<a href="https://c2.com/ppr/ams.html">Component</a>&#8220;, een erg brede term, die binnen ons vakgebied wijd uiteenlopende implementaties kent. In ruime zin wil het uiteraard precies zeggen wat het woord betekent: <em>&#8220;Een ding waar andere dingen in kunnen&#8221;</em>.</p>
<p>Een paar voorbeelden:</p>
<ul>
<li>Containers als <a href="https://en.wikipedia.org/wiki/Container_(abstract_data_type)">Abstract Data Type</a>: binnen programmeertalen kunnen ze worden gebruikt om verzamelingen van andere waarden of objecten te bevatten en beheren (e.g. een Lijst of een Set).</li>
<li>Containers zijn ook een andere naam voor <a href="https://en.wikipedia.org/wiki/Application_server">Applicatieservers</a>, of een specifiek deel ervan om servlets te hosten (de &#8220;<a href="https://en.wikipedia.org/wiki/Web_container">Web Container</a>&#8220;).</li>
<li>Waar het in deze blog over gaat: Containers als Virtualizatie-middel op niveau van besturingssystemen (&#8220;<em><a href="https://en.wikipedia.org/wiki/Operating-system-level_virtualization">Operating-system-level Virtualization</a></em>&#8220;).</li>
</ul>
<h2>Containers are the new VM&#8217;s&nbsp;!</h2>
<p>Wat is dat dan precies, die nieuwe Containers waar iedereen het over heeft? Zoals gezegd is het dus een soort van virtualizatietechniek op niveau van, t.t.z. <em>binnen</em> een besturingssysteem. <img loading="lazy" decoding="async" class=" wp-image-8884 size-full aligncenter" src="/wp-content/uploads/2015/07/Container-VM.png" alt="Container-VM" width="514" height="285" srcset="https://www.smalsresearch.be/wp-content/uploads/2015/07/Container-VM.png 514w, https://www.smalsresearch.be/wp-content/uploads/2015/07/Container-VM-300x166.png 300w" sizes="auto, (max-width: 514px) 100vw, 514px" />En hier zit natuurlijk het verschil met <a href="https://en.wikipedia.org/wiki/Virtual_machine">Virtuele Machines</a>, waarbij we virtualizatie hebben <em>over</em> besturingssystemen heen. Desondanks zorgt de technologie ervoor dat Containers en de erin aanwezige processen netjes van elkaar geïsoleerd blijven. Zoals op de figuur te zien is, hebben Containers het grote voordeel tegenover VM&#8217;s dat ze veel lichter zijn. Binnen een VM zal er altijd nood zijn aan een gast-besturingssysteem (&#8220;guest os&#8221;), dat, hoe klein ook, een deel van de bruikbare middelen van het systeem zal opslorpen. Containers dragen deze last niet. Voorlopig blijven VM&#8217;s koning van het datacenter, maar Containers <a href="https://virtualizationreview.com/articles/2014/10/29/containers-virtual-machines-and-docker.aspx">zouden wel eens een coup kunnen plegen</a>.</p>
<p>Containers zijn mogelijk dankzij de manier waarop de Linux kernel werkt (Microsoft kondigde echter al support aan voor Containers binnen <a href="https://techcrunch.com/2014/10/15/microsoft-partners-with-docker-to-bring-container-support-to-windows-server/">Windows Server</a>). Het isoleren van processen en het beperken van hun resource-gebruik is reeds heel lang mogelijk binnen Linux; er was echter een bedrijf als <a href="https://www.docker.com/whatisdocker">Docker</a> nodig om een ecosysteem aan ondersteunende tools te creëren, om zo deze technologie van onder de grond te halen en recht naar de Cloud te katapulteren. Ondertussen is er trouwens al wat <a href="https://cloudtweaks.com/2015/03/docker-vs-rocket-container-technology/">concurrentie</a> in de Containermarkt.</p>
<h2>Containers: build once; ship and run anywhere&nbsp;!</h2>
<p>De technologie die de laatste tijd rond Containers is uitgebouwd en vooral door Docker en <a href="https://coreos.com/">CoreOS</a> is gepopulariseerd, laat toe om om een applicatie met alle nodige bibliotheken, bestanden en configuratie, in een pakketje te stoppen, en dit pakketje naar een Container ondersteunend platform te sturen om de applicatie te laten werken. Het is perfect mogelijk om in je eigen datacenter, of zelfs op één machine op je zolder, Containers te ondersteunen, net zoals in de public cloud. Het mooie is dat het<img loading="lazy" decoding="async" class=" size-full wp-image-8891 alignright" src="/wp-content/uploads/2015/07/docker_image.png" alt="docker_image" width="244" height="238" /> niet uitmaakt waar de server zich bevindt: indien Containers ondersteund zijn, kan je je pakketje erop zwieren. Bovendien bestaan er al van heel veel applicaties standaard pakketjes (b.v. te vinden in de <a href="https://registry.hub.docker.com/">Docker Hub</a>), en hoef je dus al vaak zelf niet meer veel werk te doen om iets te kunnen lanceren.</p>
<p>Containerpakketjes zijn ook heel flexibel uitbreidbaar: ze kunnen gelaagd worden opgebouwd, een beetje als een <a href="https://jeffreypalermo.com/blog/the-onion-architecture-part-1/">ajuin</a>. Indien bijvoorbeeld iemand al een Node.js image heeft voorzien, kan je jouw node.js applicatie daarbovenop bouwen. Je hoeft dus niet telkens van nul te beginnen.</p>
<p>Ten slotte is het ook mogelijk je applicatie in meerdere pakketjes te stoppen: b.v. het applicatieve deel en de database apart. Je kan zo&#8217;n pakketje zelfs schalen, door het meermaals uit te rollen. Je kan b.v. het webgedeelte van je applicatie in één Docker Image stoppen, en tien maal uitrollen om alle front-end gebruikers aan te kunnen, terwijl je daarnaast b.v. maar één Docker Image uitrolt voor de database (handig als niet alle gebruikers steeds de database nodig hebben). Zo komt de droom van ultieme Modulariseerbaarheid (remember <a href="https://en.wikipedia.org/wiki/Component-based_software_engineering">Components</a>?) weer een stapje dichterbij.</p>
<h2>CaaS, CPaaS, ContaaS&nbsp;?</h2>
<p>Via Docker en Containertechnologie kan men dus zeer snel applicaties of hun onderdelen uitrollen. Uiteraard wordt het al snel onoverzichtelijk wanneer men dit zomaar ad hoc gaat doen. Gelukkig zijn er reeds systemen ontwikkeld die het beheer van een Container-ondersteunend datacenter en de erop uitgerolde Containers goed ondersteunen. Google <a href="https://kubernetes.io/">Kubernetes</a> is er zo eentje, maar ook CoreOS is al jaren op deze markt actief. De <a href="https://cloud.google.com/container-engine/">Google Container Engine</a> is een voorbeeld van Containers as a Service in de public cloud.</p>
<p><img loading="lazy" decoding="async" class=" wp-image-8905 alignleft" src="/wp-content/uploads/2015/07/iaascaaspaas2-300x136.png" alt="iaascaaspaas2" width="299" height="142" />Momenteel worden zulke &#8220;CaaS&#8221; platformen meer naar voren gebracht als <a href="https://venturebeat.com/2015/05/09/goodbye-saas-hello-containers-as-a-service/">alternatief voor IaaS en PaaS</a>. Ze vullen dan ook een unieke niche tussen de twee: IaaS werkt met VM&#8217;s en vergt veel meer configuratie en administratie, en PaaS is voor sommige gebruikers misschien te beperkend of gewoon een stap te ver qua niveau van ondersteuning. Dan biedt CaaS een gulden middenweg. De <a href="https://blog.openshift.com/openshift-v3-platform-combines-docker-kubernetes-atomic-and-more/">betere PaaS platformen maken ondertussen zelfs al gebruik van Containers</a>!</p>
<p>Spijtig genoeg is CaaS vooralsnog geen officiële afkorting &#8211; althans niet voor <em>Containers</em> as a Service. De meest gebruikte betekenis van CaaS is <a href="https://whatis.techtarget.com/definition/Communications-as-a-Service-CaaS">Communication as a Service</a>, maar Compiler, Commerce, Content, Crimeware en ja, zelfs <a href="https://www.sap.com/pc/tech/cloud/software/managed-cloud-as-a-service/index.html">Cloud as a Service</a> (partner managed cloud) zijn <a href="https://en.wikipedia.org/wiki/CAAS">kandidaten</a>.  ContaaS bestaat allicht nog niet, maar klinkt wat ongelukkig. Ook Container <em>Platform</em> as a Service kunnen we niet afkorten als cPaaS, dit betekent reeds <a href="https://www.nojitter.com/post/240169944/cisco-to-cpaas-providers-game-on">collaboration </a>Platform-as-a-Service. Gezien echter het stijgende gebruik binnen het IT nieuws, zullen ook wij toch de terminologie <strong>CaaS</strong> hanteren.</p>
<h2>Containers, Conclusie&nbsp;!</h2>
<p>Containers zijn een bijzonder handige manier om applicaties uit te rollen en te modulariseren. Ze zijn momenteel sterk gehyped en, ondersteund door CaaS, zouden ze wel eens grote invloed kunnen hebben op de cloud, en op ons vak!</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
