<?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>High Availability &#8211; Smals Research</title>
	<atom:link href="https://www.smalsresearch.be/tag/high-availability/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.smalsresearch.be</link>
	<description></description>
	<lastBuildDate>Thu, 09 Apr 2026 12:05:06 +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>High Availability &#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>
		<item>
		<title>Een man kijkt naar de wolken</title>
		<link>https://www.smalsresearch.be/een-man-kijkt-naar-de-wolken/</link>
		
		<dc:creator><![CDATA[Johan Loeckx]]></dc:creator>
		<pubDate>Wed, 21 Dec 2011 09:01:34 +0000</pubDate>
				<category><![CDATA[Blog post]]></category>
		<category><![CDATA[ethics]]></category>
		<category><![CDATA[High Availability]]></category>
		<category><![CDATA[NFRs]]></category>
		<category><![CDATA[software design]]></category>
		<category><![CDATA[software engineering]]></category>
		<category><![CDATA[testing]]></category>
		<guid isPermaLink="false">/?p=3608</guid>

					<description><![CDATA[Meten is weten, zo wordt er verteld.  Doet software wel wat je belooft wat ze doet? In enterprise applicaties is functionaliteit een belangrijk, maar vaak ook het gemakkelijkere deel van software ontwerp.  Zolang iedereen maar weet wat ie wilt: dat heeft meer  te maken met visie, duidelijke communicatie, verantwoordelijkheden en overleg, ethiek, eerlijkheid, psychologisch en [&#8230;]]]></description>
										<content:encoded><![CDATA[<p style="text-align: justify;">Meten is weten, zo wordt er verteld.  <strong>Doet software wel wat je belooft wat ze doet?</strong></p>
<p style="text-align: justify;">In enterprise applicaties is functionaliteit een belangrijk, maar vaak ook het gemakkelijkere deel van software ontwerp.  Zolang iedereen maar weet wat ie wilt: dat heeft meer  te maken met visie, duidelijke communicatie, verantwoordelijkheden en overleg, ethiek, eerlijkheid, psychologisch en sociologisch inzicht, dan met informatica.</p>
<h3 style="text-align: justify;">Niet-functionele requirements (NFRs) zijn de uitdaging</h3>
<p style="text-align: justify;">De niet-functionele requirements maken software ontwerp echter moeilijk op een andere manier omdat ze niet dicteren wàt de software moet doen, maar hoé ze haar werk moet doen.  Behalve dat het verband tussen niet-functionele requirements en een ontwerp <strong>minder expliciet</strong> zijn (hoe druk je robuustheid van software formeel uit in functie van de geschreven code?), <strong>verhogen ze ook aanzienlijk de dimensionaliteit</strong> van het op te lossen vraagstuk. Het is niet moeilijk om snelle code te schrijven, het wordt moeilijk als ze ook functioneel correct moet zijn, hoogbeschikbaar, schaalbaar, elegant, uitbreidbaar, goedkoop in onderhoud en ga zo maar voort.</p>
<p style="text-align: justify;">De vraag is: <strong>hoe kun je software leveren die een bepaalde beschikbaarheid belooft</strong> (bv. max. 8u downtime per jaar voor 99.9%) <strong>als je de beschikbaarheid nog nooit gemeten hebt?</strong> Of maar gedurende 3 maand in Acceptatie? Misschien had je geluk (goede statistische corner)? Is deze meting wel onder een realistische load gebeurd? Dezelfde redenering gaat op voor schaalbaarheid, fail-over, aanpasbaarheid, robuustheid, continuous operations, &#8230;</p>
<h3>Meet de test de applicatie of omgekeerd?</h3>
<p style="text-align: justify;">Uit ethisch standpunt zou dus elke applicatie die in productie gezet wordt, rigoureus getest moeten worden op alle NFRs.  Hiervoor moet uiteraard test-software geschreven worden.  Essentieel hierbij is dat de test-software zeer goed geschreven en beheersd wordt, zodat we bij het verkijgen van een resultaat zeker weten dat deze beïnvloed werd door de applicatie en niet door de test.  Dit is de reden waarom test-apparatuur in elektronica zo duur is, bijvoorbeeld.</p>
<h3 style="text-align: justify;">De arrogantie van de onwetendheid</h3>
<p style="text-align: justify;">Als een mens naar de wolken kijkt en zegt welke figuur zij/hij ziet, zegt dit meer over die persoon dan over de wolken. Niemand heeft de arrogantie om anders te beweren &#8211; waarom kunnen we dan niet hetzelfde bij software ontwerp?</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>High Availability &#038; WC papier</title>
		<link>https://www.smalsresearch.be/high-availability-wc-papier/</link>
					<comments>https://www.smalsresearch.be/high-availability-wc-papier/#comments</comments>
		
		<dc:creator><![CDATA[Johan Loeckx]]></dc:creator>
		<pubDate>Wed, 10 Nov 2010 13:49:05 +0000</pubDate>
				<category><![CDATA[Blog post]]></category>
		<category><![CDATA[architecture]]></category>
		<category><![CDATA[data center]]></category>
		<category><![CDATA[eHealth]]></category>
		<category><![CDATA[High Availability]]></category>
		<category><![CDATA[software engineering]]></category>
		<guid isPermaLink="false">http://blogs.smals-mvm.be/research/?p=1368</guid>

					<description><![CDATA[Centraal in het debat rond High Availability staat het zogenaamde “CAP theorema” dat (grofweg) stelt dat niet alle systemen op elk ogenblik de meest up-to-date informatie kunnen bezitten als hoge beschikbaarheid vereist is. Hoewel dit op het eerste gezicht dramatisch lijkt, is dit in de praktijk niet het geval omdat &#8220;tijd&#8221; een verschillende betekenis heeft [&#8230;]]]></description>
										<content:encoded><![CDATA[<p style="text-align: justify;">Centraal in het debat rond High Availability staat het zogenaamde <a href="https://nl.wikipedia.org/wiki/CAP_theorema">“CAP theorema”</a> dat (grofweg) stelt dat <strong>niet alle systemen op elk ogenblik de meest up-to-date informatie kunnen bezitten als hoge beschikbaarheid vereist is.</strong></p>
<p style="text-align: justify;">Hoewel dit op het eerste gezicht dramatisch lijkt, is dit in de praktijk niet het geval omdat <strong>&#8220;tijd&#8221; een verschillende betekenis heeft in business context dan in IT context. </strong>Bekijken we het voorbeeld van een patiënt die een elektronisch voorschrift krijgt bij de dokter, en dan naar de apotheker gaat om zijn &#8220;bestelling&#8221; op te halen:</p>
<p style="text-align: justify;"><a href="/wp-content/uploads/2010/11/tijdslijnpatient-dokter-apotheker1.png"><img decoding="async" class="aligncenter size-medium wp-image-1377" title="tijdslijnpatient-dokter-apotheker" src="/wp-content/uploads/2010/11/tijdslijnpatient-dokter-apotheker1.png" alt="" width="95%" srcset="https://www.smalsresearch.be/wp-content/uploads/2010/11/tijdslijnpatient-dokter-apotheker1.png 1186w, https://www.smalsresearch.be/wp-content/uploads/2010/11/tijdslijnpatient-dokter-apotheker1-300x137.png 300w, https://www.smalsresearch.be/wp-content/uploads/2010/11/tijdslijnpatient-dokter-apotheker1-1024x467.png 1024w, https://www.smalsresearch.be/wp-content/uploads/2010/11/tijdslijnpatient-dokter-apotheker1-768x351.png 768w" sizes="(max-width: 1186px) 100vw, 1186px" /></a></p>
<p style="text-align: justify;">Hoewel 10 seconden in computertermen een eeuwigheid is, is dat in business context niet.  <strong> </strong>De kans dat een patiënt binnen 40 seconden na het voorschrijven, de dokter kan betalen en bij de apotheker geraakt is quasi-onbestaande.</p>
<p style="text-align: justify;">Het CAP theorema stelt bij dit voorbeeld dan ook geen problemen.  <strong>Deze deadlock situatie kan alleen opgelost worden door de business mee te betrekken. Om deze reden is het essentieel om High Availability reeds vanaf de requirements analyse in rekening te brengen. </strong></p>
<h2 style="text-align: justify;"><strong><span id="more-1368"></span></strong>De noodzakelijke evolutie naar &#8220;distributed systems&#8221;</h2>
<p style="text-align: justify;">Het CAP theorema zou omzeild kunnen worden (in theorie althans) door te evolueren naar één monolithisch systeem. Dit is echter geen oplossing omdat men dan het probleem verschuift naar binnen de grenzen van dit systeem.  In de moderne wereld waarbij online toepassingen door steeds meer mensen gebruikt worden, kan de nodige performantie immers vaak niet eens door één systeem geleverd worden.  <strong>Het lijkt er dus op dat we dus noodzakelijkerwijs evolueren naar gedistribueerde systemen</strong>. Redundantie is in dat geval een erg efficiënte manier om de beschikbaarheid te verhogen.</p>
<h2 style="text-align: justify;">Availability tijdens de requirements analyse</h2>
<p style="text-align: justify;">Het CAP theorema zal het ons dus moeilijk maken! Zoals reeds gezegd, kan men in de praktijk echter veel verbeteren door <strong>High Availability reeds vanaf de requirements analyse </strong>in rekening te brengen door:</p>
<ul>
<li>de <strong>levensduur en vluchtigheid van de gegevens in kaart te brengen</strong> (de 40s in bovenstaand voorbeeld) en</li>
<li>de eisen op vlak van <strong>beschikbaarheid te specificeren voor elke use-case</strong> in plaats van voor het volledige systeem.</li>
</ul>
<p style="text-align: justify;">Tijdens de architectuurfase kan men dan specifiek optimiseren naar deze niet-functionele beschikbaarheidsbehoeftes.</p>
<p style="text-align: justify;">
<h2>Beter vele kleintjes dan een paar grote</h2>
<p style="text-align: justify;">Het punt dat ik wil maken in deze post, is dat bij een redundante architectuur, de strategie van <em>vele kleintjes </em>vaak beter is dan een <em>paar grote</em>.  Bij een traditioneel actief-passief failover systeem behandelt één systeem alle aanvragen tenzij dit systeem uitvalt, waarbij het passief systeem actief wordt en haar taken overneemt.  In dit geval bevat elk apart deelsysteem de mogelijkheid om het volledige probleem &#8220;op te lossen&#8221; en <strong>het falen van een systeem is intrinsiek een incident</strong>.</p>
<p style="text-align: justify;">Stel daarentegen een gedistribueerd systeem voor waarbij 10 kleine, goedkope servers elk een deel van de taak op zich nemen en hierover voortdurend met elkaar communiceren.  Als er eentje uitvalt, zijn er nog 9 beschikbaar om de taken te herverdelen (de performantie zal wel wat afnemen).  <strong>Door de architectuur hierop ingesteld is, integreert een nieuw opgestart deelsysteem zich automatisch in het geheel.  Het </strong><strong>vervangen van zo&#8217;n deel-systeem wordt een standaard, dagdagelijkse onderhoudstaak</strong>, juist zoals het nemen van een backup.</p>
<h2>WC papier?</h2>
<p>De vergelijking die ik graag wil maken is het onderhoud van WC papier.  Laten we twee situaties vergelijken:</p>
<ul>
<li>er is één rol van 400 vellen geïnstalleerd</li>
<li>er zijn vier rollen van elk 100 vellen geïnstalleerd</li>
</ul>
<p style="text-align: justify;">Elke dag nagekeken wordt of de rol op is.  Indien nodig wordt de rol vervangen.  Bekijken we de grafiek van de hoeveelheid beschikbare wc papier in functie van de tijd:</p>
<p><a href="/wp-content/uploads/2010/11/HighAvailabilityWCs.png"><img decoding="async" class="aligncenter size-full wp-image-1389" title="HighAvailabilityWCs" src="/wp-content/uploads/2010/11/HighAvailabilityWCs.png" alt="" width="95%" srcset="https://www.smalsresearch.be/wp-content/uploads/2010/11/HighAvailabilityWCs.png 552w, https://www.smalsresearch.be/wp-content/uploads/2010/11/HighAvailabilityWCs-189x300.png 189w" sizes="(max-width: 552px) 100vw, 552px" /></a></p>
<p style="text-align: justify;">Zoals duidelijk op te maken valt uit dit simpele conceptuele voorbeeld, is er steeds WC papier beschikbaar indien men kiest voor kleinere deelsystemen. In de situatie waarbij men één rol van 400 vellen heeft, moet men ofwel kiezen voor &#8220;waste&#8221; (weggooien van wc papier) of voor &#8220;downtime&#8221; (de afwezigheid van wc-papier).  Deze conclusies kunnen formeel geabstraheerd worden naar andere systemen.</p>
<p style="text-align: justify;">Maar nu moet ik nog even mijn handen wassen&#8230;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.smalsresearch.be/high-availability-wc-papier/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>99.9% Availability: fundamenteel anders?</title>
		<link>https://www.smalsresearch.be/99-9-availability-fundamenteel-anders/</link>
					<comments>https://www.smalsresearch.be/99-9-availability-fundamenteel-anders/#comments</comments>
		
		<dc:creator><![CDATA[Johan Loeckx]]></dc:creator>
		<pubDate>Thu, 17 Jun 2010 15:03:40 +0000</pubDate>
				<category><![CDATA[Blog post]]></category>
		<category><![CDATA[cloud computing]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[Distributed systems]]></category>
		<category><![CDATA[governance]]></category>
		<category><![CDATA[High Availability]]></category>
		<category><![CDATA[Software architectures]]></category>
		<category><![CDATA[software engineering]]></category>
		<guid isPermaLink="false">http://blogs.smals-mvm.be/research/?p=1244</guid>

					<description><![CDATA[Het streven van 99% naar 99.9% availability is een veel grotere stap dan de stap van 95% naar 99%.  De traditionele manier van werken schiet ruimschoots tekort (ad-hoc processen, de software-architectuur en ontwerp, een deterministische failover, &#8230;). Door alles &#8220;juist iets beter doen&#8221;, zullen we er niet komen.  De specifieke elementen van High Availability systemen [&#8230;]]]></description>
										<content:encoded><![CDATA[<p style="text-align: justify;">
<p style="text-align: justify;">Het streven van 99% naar 99.9% availability is een veel grotere stap dan de stap van 95% naar 99%.  De <strong>traditionele manier van werken</strong> <strong>schiet ruimschoots tekort </strong>(ad-hoc processen, de software-architectuur en ontwerp, een deterministische failover, &#8230;)<strong>. </strong>Door alles &#8220;juist iets beter doen&#8221;, zullen we er niet komen.  De specifieke elementen van High Availability systemen worden in dit artikel kort besproken.</p>
<h1>10 misvattingen bij gedistribueerde systemen</h1>
<p style="text-align: justify;">Bij het ontwerpen van systemen in een gedistribueerde context (bv. verschillende webservers moeten toegang krijgen tot dezelfde databank), wordt nog te vaak uitgegaan van veronderstellingen die in praktijk helemaal niet gelden, waardoor systemen falen:</p>
<ol>
<li>Het <a title="Computer network" href="https://en.wikipedia.org/wiki/Computer_network">netwerk</a> is betrouwbaar;</li>
<li>De <a title="Latency (engineering)" href="https://en.wikipedia.org/wiki/Latency_%28engineering%29">latency</a> is nul;</li>
<li>De <a title="Throughput" href="https://en.wikipedia.org/wiki/Throughput">bandbreedte</a> is oneindig;</li>
<li>Het netwerk is <a title="Computer security" href="https://en.wikipedia.org/wiki/Computer_security">veilig</a>;</li>
<li>De <a title="Network topology" href="https://en.wikipedia.org/wiki/Network_topology">topology</a> verandert niet;</li>
<li>Er is slechts één <a title="Network administrator" href="https://en.wikipedia.org/wiki/Network_administrator">administrator</a>.</li>
<li>Transport is gratis;</li>
<li>Het netwerk is homogeen.</li>
</ol>
<p><span id="more-1244"></span></p>
<p style="text-align: justify;">Bij het ontwerpen van gedistribueerde systemen moet er <strong>vanuit worden gegaan </strong><strong>dat deze elementen zullen falen</strong>. <strong>Tijdens testing</strong> moeten deze situaties dan ook expliciet gevalideerd worden!</p>
<h1>Hoge beschikbare systemen</h1>
<p>Voor het bouwen van systemen met een hoge beschikbaarheid, zijn volgende punten essentieel:</p>
<h2>Governance</h2>
<p style="text-align: justify;">Het robuust maken van een systeem vereist dat men het systeem goed beheerst en dat er bijgevolg <strong>een hoge voorspelbaarheid heerst.</strong> <strong>ITIL processen moeten geïnstalleerd worden en zich in een mature fase bevinden. </strong> Denken we bijvoorbeeld aan IT Asset Management (welke hardware, welke software, welke applicaties, business processen, netwerkconnecties, &#8230; hebben we?), Release Management, Configuration Management (welke configuraties bevinden zich waar &amp; waarom?), &#8230;</p>
<h2>Duidelijke processen</h2>
<p style="text-align: justify;">De hoeveelheid menselijke interventie moet geminimiseerd worden (de meeste fouten gebeuren door mensen) en bijgevolg moeten zoveel mogelijk processen geautomatiseerd worden (hier is goede governance voor nodig uiteraard).  Er moet een duidelijk inzicht zijn van de processen, wie waarvoor verantwoordelijk is, een duidelijke documentatie aanwezig zijn en de complexiteit moet verlaagd proberen te worden.</p>
<h2>Vanaf het ontwerp</h2>
<p>Het ontwerp van systemen met een hoge beschikbaarheid steunt op</p>
<ol>
<li><strong>Transparantie: </strong>Lange termijn betrouwbaarheid is steeds gebaseerd op <em>een transparante en begrijpelijke documentatie.<br />
</em></li>
<li><strong>Lage complexiteit</strong>: Complexe systemen moeten opgedeeld worden in subsystemen met lagere complexiteit.</li>
<li><strong>Redundantie:</strong> Redundante systemen voorzien een extra instantie voor in het geval een kritische component uitvalt; deze neemt automatisch over in geval van falen (failover) en zet een proces in gang dat de oorspronkelijke component laat heropstarten of vervangen.</li>
<li><strong>Diversiteit: </strong>Diversiteit kan de kans op gezamenlijk falende componenten verminderen. Men kiest componenten &amp; architecturen die fundamenteel andere faalmechanismes vertonen</li>
</ol>
<p style="text-align: justify;">
<h1 style="text-align: justify;">Het CAP theorema</h1>
<h2>Theorema</h2>
<p><strong><a href="../wp-content/uploads/2010/06/cap-venn.png"></a><a href="/wp-content/uploads/2010/06/cap-venn1.png"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1267" title="cap-venn" src="/wp-content/uploads/2010/06/cap-venn1.png" alt="" width="457" height="373" srcset="https://www.smalsresearch.be/wp-content/uploads/2010/06/cap-venn1.png 482w, https://www.smalsresearch.be/wp-content/uploads/2010/06/cap-venn1-300x244.png 300w" sizes="auto, (max-width: 457px) 100vw, 457px" /></a><br />
</strong></p>
<p style="text-align: justify;">Er bestaat een fundamenteel theorema, bewezen door de MIT, dat stelt dat bij gedistribueerde systemen, <strong>van de volgende drie <a href="https://en.wikipedia.org/wiki/Non-Functional_Requirements" target="_blank">niet-functionele requirements (NFR’s):</a></strong></p>
<ul>
<li><strong>Consistency</strong> (elk deelsysteem geeft hetzelfde antwoord)</li>
<li><strong>Availability</strong> (we krijgen steeds antwoord)</li>
<li><strong>Partition tolerance</strong> (verlies van willekeurig aantal netwerkpakketten is toegelaten)</li>
</ul>
<p><strong>er slechts twéé tegelijk voldaan kunnen zijn. </strong></p>
<p><strong><br />
</strong></p>
<h2>Grafisch bewijs</h2>
<p>Zonder in detail te treden (Er bestaat een bewijs van de MIT), zullen we het theorema grafisch intuïtief illustreren.</p>
<h3>Geval 1: Alles verloopt naar wens</h3>
<p style="padding-left: 30px;"><a href="/wp-content/uploads/2010/06/cap-bewijs-ok.png"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1262" title="cap-bewijs-ok" src="/wp-content/uploads/2010/06/cap-bewijs-ok.png" alt="" width="388" height="155" srcset="https://www.smalsresearch.be/wp-content/uploads/2010/06/cap-bewijs-ok.png 531w, https://www.smalsresearch.be/wp-content/uploads/2010/06/cap-bewijs-ok-300x119.png 300w" sizes="auto, (max-width: 388px) 100vw, 388px" /></a></p>
<ol>
<li>Proces A schrijft een nieuwe      waarde V1 weg naar de databank in node N1</li>
<li>Een message M gaat over het      netwerk naar N2</li>
<li>De nieuwe waarde V1 is      beschikbaar in de databank in node N2</li>
<li>Proces B beschikt over de nieuwe      waarde</li>
</ol>
<h3>Geval 2: Het netwerk is onbeschikbaar</h3>
<p style="text-align: justify;">In dit geval komt de boodschap M met de change niet toe bij N2.  De eerste stappen blijven hetzelfde:</p>
<p style="text-align: justify; padding-left: 30px;"><a href="/wp-content/uploads/2010/06/cap-bewijs-nok.png"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1263" title="cap-bewijs-nok" src="/wp-content/uploads/2010/06/cap-bewijs-nok.png" alt="" width="394" height="155" srcset="https://www.smalsresearch.be/wp-content/uploads/2010/06/cap-bewijs-nok.png 554w, https://www.smalsresearch.be/wp-content/uploads/2010/06/cap-bewijs-nok-300x118.png 300w" sizes="auto, (max-width: 394px) 100vw, 394px" /></a></p>
<ol>
<li>Proces A in systeem N1 schrijft      V1 weg naar V0</li>
<li>Node N1 stuurt een boodschap M      naar node N2</li>
</ol>
<p style="text-align: justify;">Op dit moment kan systeem N1 niet weten of het systeem N2 dan wel het netwerk down is (het systeem is partition-tolerant). Volgens het CAP theorema zijn nu twee keuzes:</p>
<p style="padding-left: 30px;"><strong><span style="text-decoration: underline;">A. Kiezen voor consistency</span></strong><span style="text-decoration: underline;"><br />
</span>Omdat proces N1 geen ontvangstbevestiging gekregen heeft van N2, wordt het proces A afgebroken (atomicity) daar de consistency tussen de twee databanken in N1 en N2 niet gegarandeerd kan worden.  <strong>Het systeem is unavailable.</strong></p>
<p style="padding-left: 30px;"><strong><span style="text-decoration: underline;">B. Kiezen voor availability</span></strong><br />
Hoewel systeem N1 geen ontvangstbevestiging gekregen heeft van N2, wordt de transactie toch afgehandeld (het systeem is dus available).  Op dit moment bezitten N1 en N2 verschillende versies van de gegevens.  <strong>Het systeem is inconsistent.</strong></p>
<h3>Geval 3: Kiezen voor partition intolerance</h3>
<p style="text-align: justify;">Het geval dat men kiest om <strong>partition <em>in</em>tolerant </strong>te zijn, gaat men er in feite van uit dat het netwerk nooit faalt. Het systeem is dus gevoelig aan het verlies van netwerkpakketten. De deelsystemen gaan er immers vanuit dat elk verzonden pakket ook toekomt.  In bovenstaand geval kan het zijn dat node N2 “down” is.  In dit geval kan node N1 dit detecteren (<strong>niet kunnen communiceren is dan immers equivalent aan “de node is down”</strong> omdat we gevoelig zijn aan partities) en hier rekening mee houden. <strong>De databank is consistent en available, maar niet partition tolerant. </strong></p>
<p><strong><br />
</strong></p>
<h1>Conclusies</h1>
<p style="text-align: justify;">Het in productiestellen en onderhouden van hoog-beschikbare systemen, vereist een goede controle evenals een goed inzicht.  Daarom is het belangrijk</p>
<ol>
<li> Een goede <strong>governance </strong>te hebben (ITIL, &#8230;)</li>
<li><strong>Menselijke interactie </strong>te minimiseren in alle processen</li>
<li>Rekening te houden met High Availability vanaf het begin van het ontwikkelproject</li>
</ol>
<p>De belangrijkste basistechnieken gebruikt in High Availability architecturen zijn:</p>
<ol>
<li><strong>Transparantie </strong>(goede documentatie!)</li>
<li>Verlagen van de <strong>complexiteit</strong></li>
<li><strong>Redundantie</strong></li>
<li><strong>Diversiteit<br />
</strong></li>
</ol>
<p style="text-align: justify;">Essentieel is echter te beseffen dat Consistentie, Availability en Partition Tolerance niet op hetzelfde moment gegarandeerd kunnen worden maar afgewogen moeten worden!! In praktijk zal men kiezen voor <em>Eventually Consistent</em> systemen die tijdelijke consistentie problemen tgv. de unavailability van een deelsysteem later zullen opvangen en oplossen op business niveau.  Hier moet vanaf het begin van het ontwerp rekening mee gehouden worden!</p>
<p style="text-align: justify;">
]]></content:encoded>
					
					<wfw:commentRss>https://www.smalsresearch.be/99-9-availability-fundamenteel-anders/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
	</channel>
</rss>
