<?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>CAP &#8211; Smals Research</title>
	<atom:link href="https://www.smalsresearch.be/tag/cap/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.smalsresearch.be</link>
	<description></description>
	<lastBuildDate>Thu, 26 Mar 2026 14:16:17 +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>CAP &#8211; Smals Research</title>
	<link>https://www.smalsresearch.be</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Eventual Consistency &#8211; Een nog te weinig ontgonnen Principe</title>
		<link>https://www.smalsresearch.be/eventual-consistency-1/</link>
		
		<dc:creator><![CDATA[Koen Vanderkimpen]]></dc:creator>
		<pubDate>Mon, 12 Apr 2021 09:47:10 +0000</pubDate>
				<category><![CDATA[[NL]]]></category>
		<category><![CDATA[Blog post]]></category>
		<category><![CDATA[CAP]]></category>
		<category><![CDATA[cloud computing]]></category>
		<category><![CDATA[Eventual Consistency]]></category>
		<category><![CDATA[High Availability]]></category>
		<category><![CDATA[methodology]]></category>
		<category><![CDATA[Resilience]]></category>
		<category><![CDATA[Software architectures]]></category>
		<category><![CDATA[software engineering]]></category>
		<guid isPermaLink="false">/?p=15544</guid>

					<description><![CDATA[Eventual Consistency is dé truc waarmee vele NOSql databases hun beschikbaarheid gevoelig kunnen verbeteren. Maar kunnen we dit principe ook doortrekken naar de rest van de architectuur, en misschien zelfs laten meespelen op business niveau? Of is het sop de kool niet waard, en moeten we kiezen voor de eenvoudig bruikbare garanties die Strong Consistency [&#8230;]]]></description>
										<content:encoded><![CDATA[
<div class="wp-block-image is-style-default"><figure class="alignleft size-large is-resized"><a href="/wp-content/uploads/2021/04/Availability1.png"><img decoding="async" src="/wp-content/uploads/2021/04/Availability1.png" alt="" class="wp-image-15833" width="158" height="158" srcset="https://www.smalsresearch.be/wp-content/uploads/2021/04/Availability1.png 536w, https://www.smalsresearch.be/wp-content/uploads/2021/04/Availability1-150x150.png 150w, https://www.smalsresearch.be/wp-content/uploads/2021/04/Availability1-300x300.png 300w" sizes="(max-width: 158px) 100vw, 158px" /></a></figure></div>



<p class="justify-text">Eventual Consistency is dé truc waarmee vele NOSql databases hun beschikbaarheid gevoelig kunnen verbeteren. Maar kunnen we dit principe ook doortrekken naar de rest van de architectuur, en misschien zelfs laten meespelen op business niveau? Of is het sop de kool niet waard, en moeten we kiezen voor de eenvoudig bruikbare garanties die Strong Consistency ons biedt?</p>



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



<p class="justify-text">In dit blogartikel gaan we het concept <a href="https://en.wikipedia.org/wiki/Eventual_consistency">Eventual Consistency</a> (EC) verder uitdiepen. Wat betekent het precies? Wat zijn goede voorbeelden? En &#8211; uiteraard &#8211; wat hebben we er precies aan? Wanneer wordt dit principe nuttig?</p>



<h2 class="wp-block-heading">Wat is Eventual Consistency?</h2>



<p class="justify-text">Het principe / model van Eventual Consistency bestaat reeds lang, maar werd vooral bekend door het gebruik ervan in <a href="/nosql-databases-simpel-performant-schaalbaar/" data-type="post" data-id="1105">NOSql databases</a>. Deze databases waren een broodnodige revolutie toen populaire webtoepassingen een zodanig grote schaal kregen dat traditionele databases ontoereikend bleken.</p>



<p class="justify-text">Het grote voordeel van deze databases is namelijk dat ze enorm schaalbaar zijn en, zelfs bij het voorkomen van netwerkfalen, blijven werken. Het is precies het EC model dat hiervoor zorgt. Maar wat doet dit principe nu juist?</p>



<p class="justify-text">Het Eventual Consistency model is van toepassing op gedistribueerde systemen; m.a.w. systemen met meerdere nodes, verbonden door een netwerk. Een systeem dat als consistentiemodel EC heeft, zal ervoor zorgen dat een update aan een gegeven na verloop van tijd op alle nodes zal geraken. Tot die tijd kan het zijn dat we op bepaalde nodes nog de vorige waarde van het gegeven uitlezen.</p>



<p class="justify-text">Dit is natuurlijk een erg zwakke garantie, maar <strong>ze laat toe dat de nodes afzonderlijk kunnen blijven werken, zelfs indien het netwerk ertussen faalt, of indien een aantal nodes een tijdlang uitgeschakeld worden</strong>. Wanneer alles terug in orde geraakt, zal het systeem ervoor zorgen dat alles overal terug up-to-date is.</p>



<p class="justify-text">Eventual Consistency wordt ook wel <em>Optimistische Replicatie</em> genoemd. Wanneer een EC systeem de nodige updates heeft verwerkt en terug consistent is, zeggen we dat het systeem is <em>geconvergeerd</em>. De tijd die verstrijkt tussen een update en het convergeren, noemen we de <em>inconsistency window</em>. Deze willen we natuurlijk liefst zo kort mogelijk houden. In de huidige state of the art zal dit in de meeste gevallen, indien er geen falende nodes of netwerkpartities zijn, slechts milliseconden tot seconden duren.</p>



<figure class="wp-block-image size-full is-resized justify-text"><a href="/wp-content/uploads/2021/04/Availability2.png"><img fetchpriority="high" decoding="async" src="/wp-content/uploads/2021/04/Availability2.png" alt="" class="wp-image-15808" width="578" height="372" title="" srcset="https://www.smalsresearch.be/wp-content/uploads/2021/04/Availability2.png 474w, https://www.smalsresearch.be/wp-content/uploads/2021/04/Availability2-300x193.png 300w" sizes="(max-width: 578px) 100vw, 578px" /></a><figcaption>Figuur 1: Het principe van Eventual Consistency geïllustreerd. Nodes 1 en 2 vormen samen ons gedistribueerd systeem. Op tijd t1 doet client 1 een update. Enige tijd later, op tijd t2, vraagt client 2 hetzelfde gegeven op; dit zal echter nog de oude versie zijn, vermits de update van node 1 de andere node slechts op tijd t3 bereikt. Wanneer het gegeven nogmaals wordt opgevraagd, op tijd t4, is het up-to-date. De tijd tussen t1 en t3 noemen we de &#8220;inconsistency window&#8221;, aangegeven door de accolade.</figcaption></figure>



<p class="justify-text">Natuurlijk maakt het Eventual Consistency model het ook wel moeilijker om te redeneren en om te gaan met de data. Zo zijn er een aantal problemen waar developers een antwoord op zullen moeten hebben, indien ze EC willen gebruiken. Wat doe je bijvoorbeeld met clients die een node consulteren die nog niet de laatste nieuwe gegevens heeft? En &#8211; erger nog &#8211; wat als twee nodes een update binnenkrijgen voor hetzelfde gegeven, vóór ze elkaar op de hoogte hebben gebracht?</p>



<p class="justify-text">De meeste developers zijn gewend aan de luxe van &#8220;Strong Consistency&#8221; bij de systemen waarop ze verder bouwen. Deze tegenhanger van EC garandeert dat indien er een update is gebeurd, élke leesopdracht die daarna nog volgt deze update zal zien. Daarenboven is het in zo&#8217;n systeem niet mogelijk om conflicterende updates te doen aan éénzelfde gegeven.</p>



<p class="justify-text">Je kan natuurlijk al aanvoelen dat Strong Consistency zijn eigen problemen heeft: wanneer de schaal groter en groter wordt, kan het steeds vaker voorkomen dat clients moeten wachten, omdat het systeem bezig is ervoor te zorgen dat alle nodes consistent zijn. Het systeem wordt daardoor dus minder beschikbaar. Of nog: <a href="/newsql-getest-en-goedgekeurd/" data-type="post" data-id="13705">onvoldoende nodes kunnen met elkaar communiceren om consistentie te garanderen</a>, en het volledige systeem wordt onbeschikbaar. Dit is natuurlijk precies de te maken keuze die wordt geïllustreerd door het <a href="/newsql-een-upgrade-voor-je-oude-database/" data-type="post" data-id="13610">CAP</a> / <a href="/newsql-getest-en-goedgekeurd/" data-type="post" data-id="13705">PACELC</a> theorema, waarover we reeds eerder hebben <a href="/high-availability-wc-papier/">geblogd</a>. Een gedistribueerd systeem moet altijd Partitietolerant zijn (P), dus daarna blijft nog de keuze over om te focussen op Consistentie (C) of Availability (A), maar alle drie samen gaat niet (zelfs de laatste evolutie in databases, de <a href="/newsql-een-upgrade-voor-je-oude-database/" data-type="post" data-id="13610">NewSql databases</a>, maken hierin de keuze voor consistentie, al voorzien ze heel wat verbeteringen om toch nog zo beschikbaar mogelijk te zijn).</p>



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



<p class="justify-text">Buiten het typische voorbeeld van NOSql Databases die EC storage kunnen leveren aan applicaties, kunnen we ook een aantal voorbeelden geven waarbij de EC op een hoger niveau van abstractie zijn werk doet binnen een applicatie, en zelfs op business niveau zijn impact heeft.</p>



<h3 class="wp-block-heading">1. Domain Name System (DNS)</h3>



<p class="justify-text"><a href="https://en.wikipedia.org/wiki/Domain_Name_System">DNS</a>, een zeer bekend systeem in de informatica, koppelt internet domeinnamen aan IP-adressen. Het is een hiërarchisch systeem, doch grotendeels gedecentraliseerd. Noodzakelijkerwijs moet de data sterk verspreid en gerepliceerd worden, want het volledige internet maakt gebruik van dit systeem, en geen enkele individuele machine of zelfs cluster zou deze schaal aankunnen.</p>



<p class="justify-text">Wanneer er een update gebeurt binnen dit systeem, zal dit eerst op één server gebeuren. Deze server (de &#8220;authoritatieve server&#8221; voor een bepaald domein) heeft dan het correcte IP-adres dat bij een domeinnaam hoort, maar andere servers nog niet. Na verloop van tijd zal de informatie zich echter verspreiden doorheen het hele DNS systeem. Uiteindelijk zullen alle servers die de desbetreffende domeinnaam stockeren, hun cache laten verlopen, en de meest recente versie opvragen, en op deze manier is DNS dus eventually consistent.</p>



<p class="justify-text" id="justify-text">Zonder verdere maatregelen, zullen clients die toevallig naar een bepaalde site willen surfen, terwijl de cache van hun DNS server nog naar oude data verwijst, niet naar het nieuwe IP adres kunnen gaan. Met een goed beheer van je DNS data kan je dit echter voorkomen (b.v. op het oude IP adres nog een tijdlang een redirect server plaatsen).</p>



<h3 class="wp-block-heading">2. Webwinkel</h3>



<p class="justify-text">Voor een webwinkel kan elke minuut dat mensen geen bestellingen kunnen doen, een groot verlies betekenen. Beschikbaarheid (van het winkelgedeelte op zijn minst) is dus cruciaal.</p>



<p class="justify-text">Om hiervoor te zorgen, kan er worden gebruik gemaakt van Eventual Consistency in verschillende gradaties. Men zou bijvoorbeeld kunnen stellen dat men veranderingen in het inventorysysteem (b.v. hoeveel van dit artikel is nog in stock?) slechts met enige vertraging laat doorsijpelen tot het frontend systeem, dat de clients bedient, die bezig zijn met winkelen. Je zou dus iets in je winkelkarretje kunnen leggen dat niet meer in stock is. Op het moment echter van de eigenlijke bestelling, zou men wel via een transactie kunnen werken, waarbij men effectief de huidige inventaris gaat nakijken alvorens de bestelling te laten doorgaan. Indien het artikel er niet meer is, krijgt de klant op dat moment een foutboodschap met verontschuldigingen en b.v. de optie om bericht te krijgen wanneer de stock is bijgevuld.</p>



<p class="justify-text">Op deze manier voorziet men reeds een loskoppeling tussen het winkelsysteem zelf, en de inventory backend, waardoor de eerste beschikbaar blijft, zelfs wanneer de laatste niet goed werkt.</p>



<p class="justify-text">Men kan hier de Eventual Consistency zelfs nog verder doortrekken: we laten de bestelling doorgaan zonder de inventory op te nemen in de transactie, en we brengen deze pas later (eventually) up-to-date. Zo kan een klant een item zelfs bestellen indien het niet meer in stock is. Uiteraard zal er echter wel iets moeten gebeuren in zo een geval. We kunnen dan op zoek  gaan naar mitigerende processen op business niveau. Er kan bijvoorbeeld een email gestuurd worden met verontschuldigingen: &#8220;spijtig genoeg moeten we dit artikel nabestellen en zal het dus iets later zijn; u krijgt de verzendingskosten terug of mag de bestelling alsnog annuleren&#8221;. Of nog: &#8220;We kunnen dit helaas nu niet leveren; we annuleerden uw bestelling en u krijgt een waardebon&#8221;. Hier zijn tal van mogelijkheden, de ene al klantvriendelijker dan de andere, waaruit de business kan kiezen als strategie.</p>



<h3 class="wp-block-heading">3. Het bancair systeem</h3>



<p class="justify-text">Het lijkt misschien contra-intuïtief, maar een aantal aspecten van het bancair systeem, bijvoorbeeld bij het &#8220;settlen&#8221; van rekeningen, zijn via EC geregeld, en dit was noodzakelijkerwijs zelfs al zo voordat er sprake was van computers!</p>



<p class="justify-text">Wanneer in de IT een voorbeeld van de bankwereld wordt gebruikt, zal men typisch de atomaire transactie uitleggen die moet gebeuren bij een overschrijving: indien één rekening gedebiteerd wordt, moét de andere gecrediteerd worden, of vice versa. Dit is natuurlijk een voorbeeld van Strong Consistency.</p>



<p class="justify-text">Maar er zijn tal van manieren waarop de stand van een rekening niet overeenkomt met wat de waarde ervan zou moeten zijn, rekening houdend met alle transacties die al hebben plaatsgevonden of nog moeten plaatsvinden. Zo kan ik b.v. allerlei online zaken bestellen op zondag, terwijl ik zaterdag al ben gaan winkelen. De bancontact transactie van de winkel is nog niet doorgekomen, en het saldo op mijn rekening is dus een pak hoger, waardoor ik meer geld kan uitgeven dan ik heb. Op maandag wordt alles dan vereffend en komt mijn rekening onder nul. Gelukkig werd op vrijdag mijn loon gestort en komt dit óók maandag tot uiting op mijn rekening. Net op tijd om de cheque aan te kunnen die geïnd zal worden op dinsdag, maar die ik reeds een week geleden aan iemand heb gegeven voor een grote aankoop, met de vraag of die even wou wachten met het innen.</p>



<p class="justify-text" id="justify-text">Er kunnen dus allerlei zaken gebeuren die het saldo van een rekening beïnvloeden en die soms zelfs het saldo van de rekening nakijken, zonder dat het saldo al met al deze zaken rekening houdt. De rekeningstand is dus &#8220;eventually consistent&#8221;: uiteindelijk komen alle transacties erop terecht, maar dit kan even duren.</p>



<p class="justify-text">De bankwereld heeft geen probleem met het bestaan van dit soort inconsistenties in hun systeem, die zelfs op business niveau zichtbaar zijn. Misbruik ervan wordt dan ook vrijwel geheel vermeden door allerlei provisies (eveneens op business niveau): b.v. wetten die fraude strafbaar maken.</p>



<h3 class="wp-block-heading">4. Onze sector?</h3>



<p class="justify-text">We kunnen niet direct voorbeelden geven van zaken die binnen onze sector via eventual consistency zijn geïmplementeerd, maar we kunnen wel eens verkennen waar er eventueel mogelijkheden bestaan om dit in de toekomst te gaan doen.</p>



<p class="justify-text">Als we de typische workflows binnen de overheid in beschouwing nemen, zien we dat er geregeld processen zijn waarbij iets wordt aangevraagd, of een dossier wordt ingediend, dat dan later wordt nagekeken en wordt verwerkt met menselijke tussenkomst. Dit is een heel goede indicator dat we misschien wel EC kunnen gebruiken, gezien er reeds een natuurlijke vorm van uitstel in het proces zit. Hetzelfde zien we bij die processen waarin gegevens verplicht moeten worden ingediend, maar niet noodzakelijkerwijs onmiddellijk worden behandeld door de desbetreffende overheidsdienst.</p>



<p class="justify-text">Kijken we anderzijds naar de gezondheidssector (eHealth). Hier is het uiteraard cruciaal dat de toegang tot patiëntendossiers een zo hoog mogelijke beschikbaarheid biedt. Maar is het absoluut noodzakelijk dat de informatie tot op de seconde up-to-date is? Persoonlijk zou ik denken van niet. Indien mijn huisarts mijn dossier een half uurtje geleden heeft geüpdated, is het allicht niet erg dat ze dit in het ziekenhuis nog niet kunnen zien. De volgende dag, als ik naar het ziekenhuis ga, wil ik dit uiteraard wel, maar tegen dan heeft men tijd genoeg gehad om alle nodes van het systeem voldoende met elkaar te laten communiceren.</p>



<p class="justify-text">En wat met apothekers die de <a href="https://www.riziv.fgov.be/nl/themas/kost-terugbetaling/verzekerbaarheid/Paginas/default.aspx">verzekerbaarheid</a> van iemand moeten nagaan? Het is cruciaal dat deze informatie beschikbaar is wanneer iemand een medicijn komt kopen. Maar de kans dat dit gegeven is veranderd gedurende het voorbije half uur is enorm klein; ook hier kan men dus overweg met gegevens die niet tot op de seconde up-to-date zijn. Voeg daarbij eventueel een mitigerende regel op business niveau toe, voor de minieme hoeveelheid uitzonderingen waarbij men toch een medicijn zonder korting zou verschaffen terwijl de klant hier wel recht op had (b.v. een terugbetaling achteraf, wanneer dit wordt vastgesteld dankzij de zich convergerende gegevens).</p>



<h2 class="wp-block-heading">Evaluatie en Besluit</h2>



<p class="justify-text">De voorbeelden maakten het reeds duidelijk: Eventual Consistency kan ervoor zorgen dat een systeem gewoon blijft doorwerken, zelfs wanneer er zaken mislopen. Op die manier kan de resiliëntie gevoelig worden verhoogd. Er moet in zo&#8217;n geval echter wel met een aantal inconsistenties in de data worden rekening gehouden, op IT vlak óf op business vlak, en dit maakt het complexer om over deze systemen te redeneren en om deze te bouwen. En uiteraard heeft een complex systeem ook een verhoogde kans op falen, net door de verhoogde kans op fouten die deze complexiteit met zich meebrengt.</p>



<p class="justify-text">We zullen dan ook een afweging moeten maken, <em>samen met de business</em>, om te zien waar de prioriteiten liggen. Hoe belangrijk is het dat dit systeem een beschikbaarheid heeft van vele negens (99,9% beschikbaarheid, &#8220;triple nine availability&#8221;, is b.v. nog haalbaar zonder EC voor een niet al te groot systeem)? Hoeveel data zal het systeem op termijn gaan bevatten / behandelen? In welke mate zal het moeten schalen voor gebruik door vele gelijktijdige clients?</p>



<p class="justify-text">We kunnen stellen dat Eventual Consistency enorm vruchten begint af te werpen, wanneer men met systemen te maken krijgt van een redelijk grote schaal. Voor dit soort systemen wordt het sowieso complex om ze draaiende te houden en zal de bijkomende complexiteit die EC met zich meebrengt, relatief een minder groot verschil maken. Het voordeel van de verhoogde resiliëntie zal in dat geval meer doorwegen. Sommige experts stellen zelfs dat sterke consistentie een sprookje wordt vanaf een bepaalde (erg grote) schaal, en dat men dus op een bepaald moment altijd naar eventual consistency zal moeten grijpen bij een sterk groeiend systeem.</p>



<p class="justify-text">Indien men echter met een klein systeem zit, b.v. bedoeld voor intern gebruik en met beperkte volumes aan data, dan zal het sop de kool meestal niet waard zijn en kan men, voor het gemak, best gebruik maken van Strong Consistency, wat het veel eenvoudiger maakt voor de ontwikkelaars van het systeem om het te bouwen en onderhouden.</p>



<p class="justify-text">Ten slotte kan men best bij elk project van enige omvang eens <em><strong>kritisch kijken naar de business processen</strong></em> die worden gedigitaliseerd. Vergen alle te implementeren functionaliteiten daadwerkelijk sterke consistentie doorheen het volledige proces? Moet alle data binnen de paar seconden gegarandeerd overal up-to-date zijn? Of zijn er misschien van nature stappen aanwezig waar menselijke tussenkomst is vereist, en men dus sowieso met wachttijden zit? Bestaan er eventueel op business niveau reeds mitigerende processen om om te gaan met een inconcistentie?</p>



<p class="justify-text">Vaak zal men dan zien dat sterke consistentie toch niet nodig is, en zeker niet overheen het volledige systeem, en ontstaan er dus mogelijkheden om de resiliëntie te verbeteren via Eventual Consistency.</p>



<p></p>


]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>NewSQL, een Upgrade voor je oude Database&#160;?</title>
		<link>https://www.smalsresearch.be/newsql-een-upgrade-voor-je-oude-database/</link>
		
		<dc:creator><![CDATA[Koen Vanderkimpen]]></dc:creator>
		<pubDate>Thu, 10 Oct 2019 07:39:20 +0000</pubDate>
				<category><![CDATA[[NL]]]></category>
		<category><![CDATA[Blog post]]></category>
		<category><![CDATA[big data]]></category>
		<category><![CDATA[CAP]]></category>
		<category><![CDATA[cloud computing]]></category>
		<category><![CDATA[data center]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[DBMS]]></category>
		<category><![CDATA[High Availability]]></category>
		<category><![CDATA[NewSQL]]></category>
		<category><![CDATA[NOSQL]]></category>
		<category><![CDATA[RDBMS]]></category>
		<category><![CDATA[software engineering]]></category>
		<category><![CDATA[SQL]]></category>
		<guid isPermaLink="false">/?p=13610</guid>

					<description><![CDATA[De nieuwe Databases als kruising van NOSQL en SQL&#8230; NewSQL (uitspraak: “new sequel”) is een recente, moderne klasse van DataBase Management Systemen (DBMS), of, kortweg, databases. Deze klasse positioneert zich tegenover de reeds bestaande klasses van Relationele DBMS (RDBMS) en de zogenaamde NOSQL (“no sequel”) databases, waarbij NOSQL staat voor “Not Only SQL”, maar echter [&#8230;]]]></description>
										<content:encoded><![CDATA[
<div class="wp-block-image"><figure class="alignleft is-resized"><img decoding="async" src="/wp-content/uploads/2019/10/logo2-newsql-transp.png" alt="logo-newsql" class="wp-image-13721" width="141" height="141" srcset="https://www.smalsresearch.be/wp-content/uploads/2019/10/logo2-newsql-transp.png 461w, https://www.smalsresearch.be/wp-content/uploads/2019/10/logo2-newsql-transp-150x150.png 150w, https://www.smalsresearch.be/wp-content/uploads/2019/10/logo2-newsql-transp-300x300.png 300w" sizes="(max-width: 141px) 100vw, 141px" /></figure></div>



<p style="text-align:center"><em>De nieuwe Databases als kruising van NOSQL en SQL&#8230;</em></p>



<p class="justify-text">NewSQL (uitspraak: “new sequel”) is een recente, moderne klasse van DataBase Management Systemen (DBMS), of, kortweg, databases. Deze klasse positioneert zich tegenover de reeds bestaande klasses van Relationele DBMS (RDBMS) en de zogenaamde NOSQL (“no sequel”) databases, waarbij NOSQL staat voor “Not Only SQL”, maar echter nog vaak als “No SQL” wordt begrepen. </p>



<div style="width: 400px; display: block; align: right; vertical-align: top; float: right; border: 1px solid #ddd; margin: 3px 0 5px 10px; padding: 5px 5px 0px 5px; background-color: #eee; font-size: 0.8em; font-family: verdana;">
<p style="margin-bottom: 0.625em;"><strong><em>Definitie: BASE</em></strong></p>
<p style="text-align: justify; margin-bottom: 0.625em;"> BASE staat voor <i><b>B</b>asically <b>A</b>vailable, <b>S</b>oft state, <b>E</b>ventual consistency</i>. Het principe betekent dat men de voorkeur geeft aan het beschikbaar houden van de dienst (<i>Basically Available</i>), zelfs als verschillende nodes van de dienst elkaar niet meer kunnen bereiken (typisch door netwerk falen). De nodes zullen hierdoor ongesynchroniseerd worden met elkaar (vermits ze onafhankelijk blijven werken), maar wanneer ze terug verbonden geraken, zullen ze de consistentie herstellen (<i>Eventual Consistency</i>). Magie bestaat echter niet en het kan zijn dat dit een onvoldoende goed resultaat geeft. Daarom moeten applicatiebouwers extra aandacht schenken aan het omgaan met de consistentie wanneer ze van een dergelijke database gebruik maken (<i>Soft state</i>). Meer uitleg vind je
<a href="https://www.lifewire.com/abandoning-acid-in-favor-of-base-1019674">hier</a></p>  
</div>



<p class="justify-text">Deze laatste categorie maakte een decennium geleden furore als alternatief voor de traditionele RDBMS, en had als doel om zaken als performantie, schaalbaarheid, beschik-baarheid en distribueerbaarheid te verhogen, ten koste van de consistentie. Bij NOSQL databases sprak men vaak van “eventual consistency”, wat betekent dat men niet via transacties werkt, maar er eerder op rekent dat het systeem na verloop van tijd altijd opnieuw in een consistente toestand zal geraken. Dit maakt onderdeel uit van de &#8220;BASE principes&#8221; (zie kader). <a href="/nosql-databases-simpel-performant-schaalbaar/">NOSQL databases</a> bekeken we bij onderzoek reeds 9 jaar geleden, en recent gingen we dieper in op de subcategorie <a href="/bases-de-donnees-relationnelles-adequates-pour-des-relations/">graph databases</a>.</p>



<div style="width: 300px; display: block; align: left; vertical-align: top; float: left; border: 1px solid #ddd; margin: 3px 10px 5px 0px; padding: 5px 5px 0px 5px; background-color: #eee; font-size: 0.8em; font-family: verdana;">
<p style="margin-bottom: 0.625em;"><strong><em>Definitie: ACID</em></strong></p>
<p style="text-align: justify; margin-bottom: 0.625em;">De ACID principes zijn <i><b>A</b>tomicity, <b>C</b>onsistency, <b>I</b>solation, <b>D</b>urability</i>.</p>
<p style="text-align: justify; margin-bottom: 0.625em;"> Deze set van eigenschappen werd in het leven geroepen om de validiteit van transacties te kunnen garanderen, zelfs wanneer er fouten zouden optreden in het systeem. Typisch aan ACID is het gebruik van transacties: een sequentie van database operaties die aan de ACID principes voldoet en nooit onvolledig kan worden uitgevoerd, waardoor het systeem in een inconsistente toestand zou achterblijven. Zulk een transactie wordt dus altijd ofwel niet uitgevoerd, ofwel in haar geheel uitgevoerd (ze is atomair), laat het systeem in een consistente toestand achter, is geïsoleerd van andere transacties, en het resultaat ervan heeft een blijvend effect op het database systeem, zelfs indien het ná het uitvoeren van de transactie snel zou falen (durabiliteit). Meer uitleg vind je <a href="https://en.wikipedia.org/wiki/ACID">hier</a></p> 
</div>



<p class="justify-text">Voor vele toepassingen gebruikt men echter nog graag de traditionele RDBMS, nu smalend &#8220;Old SQL databases&#8221; genoemd. De reden is dat deze databases de verantwoordelijkheid om de data consistent te houden voor een groot stuk naar zich toetrekken, door het aanbieden van transactielogica. Deze logica zit vervat in de zogenaamde ACID principes (zie kader), die door deze databases worden ondersteund. Daarnaast kunnen applicatiebouwers ook moeilijk afscheid nemen van het gemak van SQL ondersteuning. Deze taal neemt heel wat werk uit handen van de developers (vaak wordt SQL ook gegenereerd door een library).</p>



<p class="justify-text">Met de NewSQL databases probeert men nu de voordelen van zowel NOSQL als RDBMS te verenigen. Dit type databases wordt beschreven als de oplossing om, zoals bij NOSQL mogelijk is, een <a href="/productiviteitsverhoging-met-paas/">horizontaal schaalbare</a> en gedistribueerde database op te zetten. Men streeft er dus naar om de performantie van NOSQL databases, die typisch hoger is dan die van RDBMS, te evenaren. Tegelijk probeert men dit te doen zonder aan de traditionele ACID principes te raken, die door RDBMS naar voren worden geschoven. </p>



<p class="justify-text">Hoe de NewSQL databases erin slagen deze eigenschappen te combineren, verschilt van geval tot geval. Een paar zaken hebben ze echter gemeen: ze ondersteunen, in tegenstelling tot de meeste NOSQL databases, het relationele model en ze gebruiken de taal SQL als de belangrijkste manier om met de database te interageren. Dit zijn typisch ook de belangrijkste kenmerken voor een RDBMS.</p>



<p class="justify-text">De vraag kan dus gesteld worden hoe gemakkelijk het is om een RDBMS te vervangen door een NewSQL database, gezien de manier om ermee om te gaan zo gelijkaardig is. Het is dus mogelijk dat NewSQL databases de resiliëntie van applicaties kunnen verhogen, doordat de resiliëntie van de onderliggende database verhoogt, en dit mogelijks met een beperkte migratie-effort, vanwege de compatibiliteit met de huidige gebruikte RDBMS. Verschillende NewSQL databases claimen compatibiliteit met een bestaande RDBMS (b.v. <a href="https://www.postgresql.org/">PostgreSQL</a>) en slagen hier dus redelijk in. Er zijn echter soms toch enige beperkingen op hoeveel men precies ondersteunt van SQL in vergelijking met de RDBMS. Dit komt doordat men niet ontsnapt aan het fundamentele CAP theorema.</p>



<p class="justify-text">Het <strong>CAP theorema</strong> voor gedistribueerde systemen kwam reeds lang geleden aan bod op deze blog. Kort uitgelegd komt het erop neer dat je hoogstens twee van de volgende 3 zaken tegelijk kan hebben: <strong>Availability</strong> (je krijgt altijd een antwoord van het systeem), <strong>Consistency</strong> (je ziet ten allen tijde de meest recent geschreven data), <strong>Partition tolerance</strong> (het systeem blijft werken, ook al functioneert het netwerk tussen de nodes van het systeem niet meer). Ook het <a href="/99-9-availability-fundamenteel-anders/">CAP theorema</a> werd bij onderzoek reeds uitvoerig belicht.</p>



<div class="wp-block-image justify-text"><figure class="aligncenter is-resized"><img loading="lazy" decoding="async" src="/wp-content/uploads/2019/10/cap-theorem-transp.png" alt="Cap Theorema" class="wp-image-13707" width="578" height="441" srcset="https://www.smalsresearch.be/wp-content/uploads/2019/10/cap-theorem-transp.png 915w, https://www.smalsresearch.be/wp-content/uploads/2019/10/cap-theorem-transp-300x229.png 300w, https://www.smalsresearch.be/wp-content/uploads/2019/10/cap-theorem-transp-768x586.png 768w" sizes="auto, (max-width: 578px) 100vw, 578px" /><figcaption>Fig. 1: Het CAP theorema zegt dat de doorsnede van Availability, Consistency en Partition Tolerance leeg blijft. Enkel in de doorsnede van telkens slechts 2 van de 3 zaken kan men oplossingen hebben. De verschillende types databases kan men hier goed in plaatsen.</figcaption></figure></div>



<div style="width: 400px; display: block; align: right; vertical-align: top; float: right; border: 1px solid #ddd; margin: 3px 0 5px 10px; padding: 5px 5px 0px 5px; background-color: #fffd24; font-size: 0.8em; font-family: verdana;">
<p style="margin-bottom: 0.625em;"><strong><em>Over Availability en de SLA</em></strong></p>
<p style="text-align: justify; margin-bottom: 0.625em;"> Bij het bespreken van het CAP theorema wordt gesproken over <em>volledige Availability</em>. Wil dit dan zeggen dat &#8220;A&#8221; systemen, zoals de &#8220;AP&#8221; NOSQL databases, een <b>up-time hebben van 100%</b>&nbsp;? Spijtig genoeg niet. Het gaat hier nog steeds over een theoretische bovengrens. De availability waarvan sprake in het CAP theorema is een beetje kunstmatig: ze gaat ervan uit dat een enkele node niet zal falen (men beschouwt enkel netwerkfalen). In de praktijk is dat natuurlijk niet het geval, vandaar dat de SLA van een &#8220;A&#8221; systeem ook geen 100% zal zijn. Traditionele single-node databases, die geen rekening moeten houden met netwerk partities, zijn dus uiteraard ook niet 100% beschikbaar.<br>
Bij gedistribueerde systemen tracht men dit echter wel te benaderen, doordat de kans dat verschillende nodes tegelijk falen, veel lager ligt dan de kans dat één node faalt, waardoor men dus voor een stuk beschikbaarheid behoudt, zelfs bij falen. Het feit dat één node op zich makkelijker kan falen, is dan ook net één van de redenen om over te stappen op een gedistribueerd systeem (naast verhoogde schaal en performantie). Bij NewSQL databases bekomt men dan uiteindelijk op die manier óók een verhoogde beschikbaarheid, ook al zijn het systemen die de &#8220;A&#8221; uit het CAP theorema niet mee opnemen: zolang een meerderheid van de nodes actief blijft (en kan communiceren), blijft dit deel van het totale systeem beschikbaar, en aldus bekomt men <b>ook voor NewSQL systemen een hogere SLA.</b></p>  
</div>



<p class="justify-text">Sowieso zal je in een gedistribueerd systeem altijd te maken krijgen met netwerk falen, dus je moet &#8220;iets&#8221; doen daarmee en dus de &#8220;P&#8221; ondersteunen. Dan rest dus nog de keuze of je voor &#8220;A&#8221; of &#8220;C&#8221; gaat. NOSQL databases kiezen voor &#8220;A&#8221;: alle nodes blijven werken, ook al zijn ze niet meer verbonden. Bijgevolg verliezen ze &#8220;C&#8221;: de data in de losgekoppelde nodes kan verschillen. Dit noemt men een &#8220;AP&#8221; systeem. NewSQL databases kiezen voor de andere aanpak: een aantal van de nodes die niet meer bereikbaar zijn, zullen een foutmelding geven en dus niet beschikbaar zijn. Zolang er een bepaalde meerderheid van nodes met elkaar kan communiceren, zullen deze beschikbaar blijven, maar het systeem is dus niet &#8220;100% beschikbaar&#8221;, enkel de nodes die de meerderheid vormen zijn dat. Dit wordt dan een &#8220;CP&#8221; systeem genoemd, want de nodes die nog werken zijn wel consistent.  In Fig. 1 zie je het CAP theorema grafisch uitgebeeld; wanneer er geen rekening wordt gehouden met Partition Tolerance (de bovenste van de drie doorsnedes), zit je met het type database &#8220;SQL&#8221;, t.t.z. de traditionele RDBMS die niet gedistribueerd werken.</p>



<h2 class="wp-block-heading">Wordt Vervolgd&#8230;</h2>



<p class="justify-text">NewSQL databases lijken erg veelbelovend. Ze bieden een consistente gegevensopslag aan, bovenop een performant en resiliënt gedistribueerd systeem. Ondanks het feit dat ze de Availability uit het CAP theorema laten vallen, bieden ze een hogere SLA aan dan niet-gedistribueerde databases. Daarnaast vertonen ze een vrij grote compatibiliteit met de traditionele RDBMS databases.</p>



<p class="justify-text">Momenteel loopt er bij Smals Onderzoek een studie naar deze soort databases, waarbij we deze claims verder zullen toetsen aan de hand van een paar testen, en waarin we ook enkele concrete producten zullen uitproberen. Meer hierover in een latere blog.</p>


]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
