<?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>NewSQL &#8211; Smals Research</title>
	<atom:link href="https://www.smalsresearch.be/tag/newsql/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.smalsresearch.be</link>
	<description></description>
	<lastBuildDate>Thu, 09 Apr 2026 12:23:30 +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>NewSQL &#8211; Smals Research</title>
	<link>https://www.smalsresearch.be</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Ecosysteem Architectuur</title>
		<link>https://www.smalsresearch.be/ecosysteem-architectuur/</link>
		
		<dc:creator><![CDATA[Koen Vanderkimpen]]></dc:creator>
		<pubDate>Mon, 28 Feb 2022 16:22:49 +0000</pubDate>
				<category><![CDATA[[NL]]]></category>
		<category><![CDATA[Blog post]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[architecture]]></category>
		<category><![CDATA[cloud computing]]></category>
		<category><![CDATA[CQRS]]></category>
		<category><![CDATA[EDA]]></category>
		<category><![CDATA[Event]]></category>
		<category><![CDATA[Eventual Consistency]]></category>
		<category><![CDATA[mesh]]></category>
		<category><![CDATA[methodology]]></category>
		<category><![CDATA[microservices]]></category>
		<category><![CDATA[NewSQL]]></category>
		<category><![CDATA[rest]]></category>
		<category><![CDATA[Software architectures]]></category>
		<category><![CDATA[software design]]></category>
		<category><![CDATA[software engineering]]></category>
		<guid isPermaLink="false">/?p=16980</guid>

					<description><![CDATA[Bij het software bouwen, maken we meestal geen op zichzelf staande programma&#8217;s meer. We bouwen vandaag eerder Applicatie Ecosystemen. Wanneer we dus een stuk software schrijven, mogen we niet zomaar de ontwikkeling lokaal optimaliseren, maar moeten we ook continu rekening houden met het grotere geheel. In deze blog maken we een verkenning van een aantal [&#8230;]]]></description>
										<content:encoded><![CDATA[
<div class="wp-block-image"><figure class="alignleft size-full is-resized"><a href="/wp-content/uploads/2016/06/logomicro.png"><img decoding="async" src="/wp-content/uploads/2016/06/logomicro.png" alt="" class="wp-image-9733" width="163" height="147" srcset="https://www.smalsresearch.be/wp-content/uploads/2016/06/logomicro.png 679w, https://www.smalsresearch.be/wp-content/uploads/2016/06/logomicro-300x272.png 300w" sizes="(max-width: 163px) 100vw, 163px" /></a></figure></div>



<p class="justify-text">Bij het software bouwen, maken we meestal geen op zichzelf staande programma&#8217;s meer. We bouwen vandaag eerder Applicatie Ecosystemen. Wanneer we dus een stuk software schrijven, mogen we niet zomaar de ontwikkeling lokaal optimaliseren, maar moeten we ook continu rekening houden met het grotere geheel. In deze blog maken we een verkenning van een aantal zaken waar we rekening mee moeten houden bij het bouwen van een ecosysteem, en van concrete principes die we kunnen toepassen bij het uitbouwen van een erbij passende modulaire architectuur.</p>



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



<h2 class="wp-block-heading" id="de-paradox-van-de-afhankelijkheid">De Paradox van de Afhankelijkheid</h2>



<p class="justify-text">Er heerst grote waarde in zaken met elkaar verbinden, en in reeds bestaande zaken te <a href="/hergebruik-de-dos-en-donts/" data-type="post" data-id="13002">hergebruiken</a> bij het bouwen van nieuwe dingen. Gegevens, en ook de manier waarop ze worden verwerkt, ja, soms zelfs hele stukken van een applicatie, van één instelling, kunnen ook van pas komen bij een andere. En uiteraard geldt hetzelfde ook al binnen één en dezelfde instelling. Er is dus een meerwaarde te vinden door zaken met elkaar te verbinden en door zaken van elkaar te gaan hergebruiken. Dit is ook het hele opzet achter het <a href="https://www.ict-reuse.be/nl">ReUse verhaal binnen onze sector</a>. Connecties en communicaties tussen systemen creëren hergebruik, efficiëntie en business waarde.</p>



<p class="justify-text">Maar wanneer we zaken verbinden, maken we ze van elkaar afhankelijk. Die afhankelijkheid heeft op technisch vlak vooral nadelen. Denk maar aan het onbeschikbaar zijn van een dienst waarvan andere diensten rechtstreeks afhangen; vaak worden deze laatste dan eveneens <a href="/99-9-availability-fundamenteel-anders/" data-type="post" data-id="1244">onbeschikbaar</a>. Maar ook semantisch maakt het de zaken moeilijker. We mogen niet zomaar puur lokaal nadenken over alle concepten die we in onze computerprogramma&#8217;s verwerken; nee, we moeten er rekening mee houden dat ze geïntegreerd of hergebruikt kunnen worden. We moeten ervoor proberen te zorgen dat de betekenis ervan voorbijgaat aan wat puur noodzakelijk is voor ons specifieke geval. Dat soort zaken maakt het ontwikkelen van software een stuk moeilijker. Dit niet doen is echter nog erger: de &#8220;technical debt&#8221; die ontstaat door teveel kortetermijn- en lokaal denken, zal dan op termijn alleen maar onbeheersbaarder worden.</p>



<p class="justify-text">En dat is dus de paradox: de afhankelijkheid tussen de systemen binnen een applicatie ecosysteem creëert enorme business waarde, maar maakt de IT een stuk lastiger (en duurder).</p>



<h2 class="wp-block-heading" id="de-mesh-van-microservices">De &#8220;Mesh&#8221; Architectuur</h2>



<p class="justify-text">Een goede architectuur kan echter soelaas brengen in dit verhaal, en consequent rekening houden met hergebruik kan uiteindelijk zelfs geld gaan besparen. Het gebruik van een <a href="/services-in-alle-maten-van-macro-naar-nano/" data-type="post" data-id="11111">Service Oriented Architecture (SOA)</a> is daarbij één van onze belangrijkste wapens om de afhankelijkheden in ons ecosysteem de baas te kunnen, met de <a href="/van-n-tier-naar-microservices/" data-type="post" data-id="9702">Microservices Architectuur</a> als ultieme voorbeeld. Dit zijn echter slechts voorbeeld technische implementaties van het belangrijke concept <em>Modulariteit </em>(dat men in principe zelfs binnenin een monolithisch systeem kan implementeren). Wat proberen we hiermee te bereiken?</p>



<ul class="justify-text wp-block-list"><li>Modules zijn zo onafhankelijk van elkaar als maar kan (maar maken toch van elkaar gebruik vanwege de waarde die dit heeft): ze zijn liefst &#8220;loosely coupled&#8221;: veranderingen in de werking of het ontwerp van één module hebben zo weinig mogelijk impact op de werking of het ontwerp van een andere. Dit laat toe om ze apart van elkaar te laten werken en ze te laten onderhouden door aparte teams, zonder dat er continu overleg of downtime moet zijn (in het geval van een monoliet verliest men wel dit downtime voordeel).</li><li>Modules zijn voldoende klein. Men volgt hier de <a href="https://en.wikipedia.org/wiki/Unix_philosophy">Unix filosofie &#8220;do one thing and do it well&#8221;</a>. In de praktijk wil dit zeggen dat modules gericht zijn op het aanbieden van één bepaalde business capabiliteit, die in principe apart kan worden gedeployed. Hoe men precies de context van een service afbakent, is één van de belangrijkste onderdelen van de <a href="https://en.wikipedia.org/wiki/Domain-driven_design">Domain Driven Design (DDD)</a> ontwikkelingsmethode.</li></ul>



<p class="justify-text">Het tweede punt is niet te onderschatten en één van de moeilijkste zaken, reeds bij de business en functionele analyse en ook verderop in het ontwerp van software. In deze blog richten we ons echter op de aspecten van een groter ecosysteem, en daarom zullen we ons hier beperken tot de eerste vraag: </p>



<blockquote class="wp-block-quote has-text-align-center is-layout-flow wp-block-quote-is-layout-flow"><p>Hoe houden we onze modules zo goed mogelijk onafhankelijk, terwijl we ze toch laten communiceren?</p></blockquote>



<h2 class="wp-block-heading" id="een-aantal-helpende-principes">Een aantal helpende Principes</h2>



<p class="justify-text">We gaan er vanaf hier van uit dat we onze modules verpakken in aparte services, en we zullen nu een aantal ontwerpprincipes overlopen die ons gaan helpen bij het uitbouwen van een ecosysteem architectuur waarin we een grote onafhankelijkheid, maar ook herbruikbaarheid, van onze services nastreven.</p>



<div class="wp-block-image justify-text"><figure class="alignright size-full is-resized"><a href="/wp-content/uploads/2022/02/usingAPI.png"><img fetchpriority="high" decoding="async" src="/wp-content/uploads/2022/02/usingAPI.png" alt="" class="wp-image-17010" width="309" height="172" srcset="https://www.smalsresearch.be/wp-content/uploads/2022/02/usingAPI.png 497w, https://www.smalsresearch.be/wp-content/uploads/2022/02/usingAPI-300x167.png 300w" sizes="(max-width: 309px) 100vw, 309px" /></a><figcaption>Figuur 1: Twee APIs, telkens geïmplementeerd door een onderliggende service. De ene service gebruikt de API van de andere, en is dus enkel daarvan afhankelijk en niet van de onderliggende service. De pijl duidt hier de richting van de afhankelijkheid aan, maar de communicatie is steeds bidirectioneel (vraag-antwoord) en synchroon (men wacht op het antwoord).</figcaption></figure></div>



<p class="justify-text"><strong>1.  Het gebruik van APIs</strong>. Dit principe is reeds goed gekend en vormt een basissteen van SOA: Een <a href="/data-centric-it-met-rest/" data-type="post" data-id="9535">service stelt zich open naar de buitenwereld toe via zijn API</a>, en deze API is dan ook het enige waarvan andere services afhankelijk kunnen zijn. Op die manier beperkt men dus de afhankelijkheid die andere zaken m.b.t. een service zullen hebben, tot wat strikt noodzakelijk is. Men is hier echter wel nog semantisch en syntactisch afhankelijk van de APIs van andere services die men wenst te gebruiken, en ook technisch afhankelijk van het online zijn van die andere services.</p>



<p class="justify-text"><strong>2.  Het gebruik van Events</strong>. <a href="/event-driven-apis/" data-type="post" data-id="16655">Event Driven Architecture</a> is ook al oud, maar maakt meer recent furore dankzij de Reactive beweging. In plaats van (of naast) communicatie via een API, kan men de communicatie tussen services ook via het versturen van <a href="/het-event-als-leidend-voorwerp-in-software-engineering/" data-type="post" data-id="8942">events</a> laten gebeuren. Daar hoort bij dat een service die een event verstuurt, niet op voorhand weet welke andere services dit event zullen ontvangen. Services hebben hier enkel controle over de events die ze zelf versturen en dewelke ze zelf wensen te ontvangen. Het is duidelijk dat hier de onafhankelijkheid nog sterker is dan in het geval van APIs: men is niet langer rechtstreeks afhankelijk van de interface, noch van het online zijn, van een andere service. Men is enkel nog technisch afhankelijk van het online zijn van de <a href="/geavanceerd-event-driven-engineering/">Event Bus</a> (een middleware systeem dat men met grote redundantie kan opzetten), en semantisch afhankelijk van de definitie van de betrokken events (een niet te vermijden afhankelijkheid die wordt opgelegd door de business vereiste van het gebruik van de betreffende business capabiliteit die door het event mede wordt ondersteund).</p>



<div class="wp-block-image justify-text"><figure class="alignleft size-full is-resized"><a href="/wp-content/uploads/2022/02/usingCQRS-Events.png"><img decoding="async" src="/wp-content/uploads/2022/02/usingCQRS-Events.png" alt="" class="wp-image-17035" width="302" height="285" srcset="https://www.smalsresearch.be/wp-content/uploads/2022/02/usingCQRS-Events.png 467w, https://www.smalsresearch.be/wp-content/uploads/2022/02/usingCQRS-Events-300x283.png 300w" sizes="(max-width: 302px) 100vw, 302px" /></a><figcaption>Figuur 2: Twee services die gebruik maken van events om met elkaar te communiceren. De eerste biedt een command API aan, dewelke door een client wordt gebruikt om data in te dienen. Daarna stuurt deze een event naar de Event Bus, dat iets later ontvangen wordt door de tweede service. Deze zal het event gebruiken om zijn opvraagbare data te updaten, zodat deze daarna door een client kan worden opgevraagd. De pijlen van de events duiden effectief op éénrichtingscommunicatie, waarbij men niet wacht op antwoord (asynchroon).</figcaption></figure></div>



<p class="justify-text"><strong>3.  CQRS</strong>. Wanneer we microservices bouwen die zo klein en onafhankelijk mogelijk zijn, betekent dit eigenlijk dat we een onderscheid moeten beginnen maken tussen services die data binnenkrijgen en/of (deels) verwerken, en services die daarop verder bouwen om informatie te verschaffen en vragen te kunnen beantwoorden. Typisch zullen dit verschillende business capabilities zijn, en dus een aparte service vereisen. Bovendien maken we de microservices liefst zo klein, dat er vaak data van meerdere microservices afkomstig, nodig zal zijn om bepaalde queries te beantwoorden, waardoor het sowieso minder vanzelfsprekend wordt om de queries te implementeren als onderdeel van één van die microservices; ook daardoor wordt het dus logischer om ze in een aparte dienst te deployen. Dit principe noemen we <a href="https://martinfowler.com/bliki/CQRS.html">Command Query Responsability Segregation (CQRS)</a>: we scheiden de ver-antwoordelijkheid voor het behandelen van commando&#8217;s (opnemen en verwerken van data) en die voor het beantwoorden van queries (teruggeven van, meestal verwerkte, data) in aparte services.</p>



<p class="justify-text"><strong>4.  Sagas</strong>. Soms is het nodig dat in een applicatie zaken gebeuren die ofwel gezamenlijk slagen, ofwel gezamenlijk falen. Dit noemt men een transactie. Zoals reeds in een <a href="/eventual-consistency-1/" data-type="post" data-id="15544">eerdere blog</a> vermeld, is het nuttig om transacties binnen onze systemen te minimaliseren en goed na te denken op business niveau of ze echt wel nodig zijn. Desalniettemin zullen we ze toch niet geheel kunnen vermijden. Binnen één microservice is de implementatie hiervan doorgaans geen probleem: de onderliggende database zal dit ondersteunen volgens het tweefasig &#8220;commit&#8221; protocol (2 Phase Commit, 2PC). Wat we echter absoluut moeten vermijden, is om dit protocol toe te passen op meerdere services tegelijk <a href="/high-availability-wc-papier/" data-type="post" data-id="1368">in een gedistribueerde omgeving</a>. Om dan toch tegemoet te komen aan de nood aan gedistribueerde transacties, kunnen we sagas gebruiken. Een saga bestaat uit een reeks lokale transacties (binnen één service), waarbij elke service een event zal publiceren om de volgende transactie binnen de saga te triggeren in de volgende service die eraan meedoet. Indien één van de lokale transacties faalt, dan zal het verstuurde event verschillen van wat het normaal is, en dan volgen compenserende transacties in de services die reeds aan beurt kwamen, om de eerdere veranderingen terug ongedaan te maken. Men kan sagas op 2 manieren implementeren: de eerste is een <em>choreografie</em>, waarbij de services zelf weten wat ze wanneer moeten doen (op basis van de events die ze binnenkrijgen). De tweede optie is de <em>orchestratie</em>, waarbij één service zal optreden als de organisator van het gebeuren en de transactie stap voor stap opvolgt. De communicatie met participerende services kan hier ook met events plaatsvinden, maar eventueel ook via rechtstreekse API calls om de opeenvolgende opdrachten te geven (de antwoorden komen dan wel best via events terug binnen in de orchestrator, anders zondigt men tegen CQRS). Een voorbeeld van een saga (met choreografie) is het verhaal van de webshop in de <a href="/event-driven-apis/" data-type="post" data-id="16655">vorige blog over Event-Driven APIs</a>.</p>



<p class="justify-text">Naast deze 4 principes zijn er nog een aantal secundaire ondersteunende zaken die we mogelijk kunnen doen binnen ons ecosysteem. Denk bijvoorbeeld aan het gebruik van <a href="/geavanceerd-event-driven-engineering/" data-type="post" data-id="9041">Event Sourcing</a>, of het inzetten van <a href="/newsql-getest-en-goedgekeurd/" data-type="post" data-id="13705">NewSQL databases</a> om een microservice met toestand goed te kunnen schalen. Deze zaken bespraken we reeds voldoende in vorige blogposts.</p>



<h2 class="wp-block-heading" id="besluit-even-wennen">Besluit: even Wennen</h2>



<p class="justify-text">Een moderne architectuur voor een complex Applicatie Ecosysteem bestaat uit meer dan alleen maar APIs, en kan best stevig gebruik maken van de toegevoegde waarde die EDA en CQRS bieden. Wanneer men eerder traditionele architecturen gewend is, is de verhoogde complexiteit natuurlijk even wennen. De voordelen overwegen volgens ons echter op de nadelen van deze leercurve. Eens men deze zaken in de vingers heeft en een aantal keer heeft toegepast, zal men zowel op technisch vlak als op business vlak de pluspunten beginnen ondervinden.</p>



<p class="justify-text">Om het allemaal een beetje behapbaarder te maken, zullen we in een volgende blog trachten deze principes verder te illustreren aan de hand van een voorbeeld applicatie ecosysteem.</p>





<p></p>



<p></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>NewSQL: Getest en Goedgekeurd</title>
		<link>https://www.smalsresearch.be/newsql-getest-en-goedgekeurd/</link>
		
		<dc:creator><![CDATA[Koen Vanderkimpen]]></dc:creator>
		<pubDate>Tue, 15 Sep 2020 08:22:50 +0000</pubDate>
				<category><![CDATA[[NL]]]></category>
		<category><![CDATA[Blog post]]></category>
		<category><![CDATA[cloud computing]]></category>
		<category><![CDATA[data center]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[NewSQL]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Software architectures]]></category>
		<category><![CDATA[software engineering]]></category>
		<guid isPermaLink="false">/?p=13705</guid>

					<description><![CDATA[Vorige herfst schreven we onze eerste blog over de veelbelovende technologie NewSQL. Na een pauze en een periode met enkele testen, kunnen we nu bevestigen dat deze nieuwe databases effectief een positieve evolutie zijn. Evolutie, geen Revolutie Wat het database gebruik in de IT sector betreft, zien we nog steeds een ruime meerderheid voor traditionele [&#8230;]]]></description>
										<content:encoded><![CDATA[
<div class="wp-block-image"><figure class="alignleft size-large is-resized"><img loading="lazy" decoding="async" src="/wp-content/uploads/2020/04/logo2-approved-transp.png" alt="" class="wp-image-14484" width="127" height="127"/></figure></div>



<p class="justify-text">Vorige herfst schreven we onze <a href="/newsql-een-upgrade-voor-je-oude-database/" data-type="post" data-id="13610">eerste blog</a> over de veelbelovende technologie NewSQL. Na een pauze en een periode met enkele testen, kunnen we nu bevestigen dat deze nieuwe databases effectief een positieve evolutie zijn.</p>



<h2 class="wp-block-heading">Evolutie, geen Revolutie</h2>



<p class="justify-text">Wat het <a href="https://scalegrid.io/blog/2019-database-trends-sql-vs-nosql-top-databases-single-vs-multiple-database-use/">database gebruik</a> in de IT sector betreft, zien we nog steeds een ruime meerderheid voor traditionele databases. Leidende spelers zijn daarbij <a href="https://www.mysql.com/" data-type="URL" data-id="https://www.mysql.com/">MySQL</a> en <a href="https://www.postgresql.org/" data-type="URL" data-id="https://www.postgresql.org/">PostgreSQL</a>. Daarnaast weet ook de NoSQL database <a href="https://www.mongodb.com/" data-type="URL" data-id="https://www.mongodb.com/">MongoDB</a> aardig wat marktaandeel te veroveren. Van een revolutionaire opmars van NewSQL databases kan dus nog geen sprake zijn.</p>



<p class="justify-text">De reeds bestaande databases, zowel OldSQL als NoSQL, staan dan ook niet stil in hun evolutie, en groeien op verschillende vlakken naar elkaar toe. Enkele NoSQL producten bieden b.v. een beperkte ondersteuning voor SQL of SQL-achtige talen aan, en soms ook transacties. De traditionele relationele databases, op hun beurt, bieden allerlei manieren aan om horizontaal te gaan schalen en dus een <a href="https://www.howtoforge.com/tutorial/how-to-set-up-master-slave-replication-for-postgresql-96-on-ubuntu-1604/" data-type="URL" data-id="https://www.howtoforge.com/tutorial/how-to-set-up-master-slave-replication-for-postgresql-96-on-ubuntu-1604/">gedistribueerd systeem</a> op te zetten met een verhoogde beschikbaarheid. Men kan dus stellen dat de verschillende categorieën van databases dichter naar elkaar toegroeien.</p>



<p class="justify-text">Ook NewSQL kan men, zoals we reeds aanhaalden in de vorige blog, eigenlijk beschouwen als een soort naar elkaar toegroeien van beide andere categorieën. Zit er dan nog een effectieve vernieuwing in?</p>



<p class="justify-text">Het antwoord op die vraag situeert zich in een aantal producten die van nul af zijn opgebouwd met de problematiek van dit spanningsveld tussen consistentie en <a href="/high-availability-wc-papier/" data-type="post" data-id="1368">beschikbaarheid</a> in gedachten, en die met een <a href="https://en.wikipedia.org/wiki/Cloud_native_computing" data-type="URL" data-id="https://en.wikipedia.org/wiki/Cloud_native_computing">cloud native</a> aanpak zijn ontworpen. Dit wil o.a. zeggen dat dit vanaf het begin een gedistribueerd ontwerp betreft. De basis architectuur en de opzet zijn aldus voldoende verschillend van de andere producten om er effectief het label &#8220;NewSQL&#8221; aan te hangen. Het resultaat zijn systemen die de gewenste eigenschappen combineren, zonder dat de installatie en het onderhoud nodeloos complex worden.</p>



<p class="justify-text">Om te zien hoe dit spanningsveld precies wordt aangepakt bij NewSQL, moeten we nog eens terugkomen op het befaamde CAP-theorema&#8230;</p>



<h2 class="wp-block-heading">Van CAP naar PACELC</h2>



<p class="justify-text">Het <a href="https://en.wikipedia.org/wiki/CAP_theorem" data-type="URL" data-id="https://en.wikipedia.org/wiki/CAP_theorem">Cap theorema</a> gaat vooral in op wat theoretisch niét kan (C, A én P tegelijk hebben). Het vertelt ons echter iets te weinig over wat men dan wel kan doen binnen de grenzen van wat theoretisch mogelijk is.</p>



<p class="justify-text">Wanneer alles redelijk normaal verloopt voor een gedistribueerd systeem, treden er geen netwerkpartities op. Op dat ogenblik kan men dus, in principe, volgens het CAP theorema, zorgen voor beschikbaarheid en consistentie tegelijkertijd. In de praktijk zal dit, indien alles naar wens verloopt en er geen al te zware load op het platform inwerkt, ook zo zijn. Zelfs de &#8220;eventual&#8221; consistency van NoSQL systemen zal dan slechts seconden zijn i.p.v. de langere tijd die men van &#8220;eventual&#8221; zou verwachten.</p>



<p class="justify-text">Nochtans moet men in dit geval ook nog keuzes maken&#8230; Het PACELC theorema, een uitbreiding op het CAP theorema, stelt namelijk dat men in afwezigheid van netwerkpartities, moet kiezen tussen <em>latency</em> en <em>consistentie</em>. NoSQL trekt hier duidelijk de kaart van latency: men aanvaardt onmiddellijk een request van een client, en rekent op de eventual consistency om alle nodes van het systeem op een redelijke tijd in orde te krijgen. NewSQL systemen daarentegen, kiezen consistentie: vooraleer de request wordt aanvaard, zorgt men ervoor dat <a href="https://en.wikipedia.org/wiki/Quorum_(distributed_computing)" data-type="URL" data-id="https://en.wikipedia.org/wiki/Quorum_(distributed_computing)">voldoende nodes akkoord zijn</a> en wanneer de request aanvaard is, zal dit ook zo zijn op de meeste nodes, zodat de consistentie gegarandeerd is over het gehele systeem. Deze fase van &#8220;akkoord bereiken&#8221; tussen de nodes zal de werking natuurlijk enigszins vertragen.</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: #fffd24; font-size: 0.8em; font-family: verdana;">
<p style="margin-bottom: 0.625em;"><strong><em>Consistency in CAP vs ACID</em></strong></p>
<p style="text-align: justify; margin-bottom: 0.625em;">
</p><p style="text-align: justify; margin-bottom: 0.625em;">In de vorige blog kon je een iets langere uitleg lezen over <a href="https://www.dataversity.net/acid-vs-base-the-shifting-ph-of-database-transaction-processing">Base, Acid en het CAP theorema</a>. De &#8220;C&#8221; in zowel ACID als CAP staat voor Consistentie. Maar eigenlijk is dit een beetje verwarrend, want het is niet <a href="https://www.voltdb.com/blog/2015/10/22/disambiguating-acid-cap">dezelfde consistentie die daarbij wordt bedoelt</a>.</p>

<p style="text-align: justify; margin-bottom: 0.625em;">De ACID regels stammen reeds uit de jaren 1970, een tijd toen er nog nauwelijks sprake was van gedistribueerde systemen; het ging erom transacties te definiëren in een database wereld waar het gelijktijdig gebruik van een database door meerdere gebruikers nog in zijn kinderschoenen stond.</p>

<p style="text-align: justify; margin-bottom: 0.625em;">Consistentie in ACID stelt specifiek dat transacties de regels en restricties van de database moeten volgen (b.v. bepaalde constraints op data, maar eveneens zaken als triggers) en dat alle data die naar de database geschreven wordt, de database in een geldige toestand moet achterlaten. Dit geldt voor de gehele transactie. Geen enkele gebruiker mag de database in een toestand kunnen zien die ongeldig zou zijn, ook niet tijdens het uitvoeren van een transactie van een andere gebruiker.</p>

<p style="text-align: justify; margin-bottom: 0.625em;">Het CAP theorema werd pas geformuleerd in 2000 en geldt voor alle gedistribueerde systemen (niet enkel databases). Het doel was hier om scherp te stellen dat men keuzes zal moeten maken wanneer er een netwerkpartitie optreedt in een dergelijk systeem. Consistentie in CAP betekent dat alle replica&#8217;s van hetzelfde gegeven ook dezelfde waarde zullen hebben overheen het hele systeem (en dus in alle nodes).</p>

<p style="text-align: justify; margin-bottom: 0.625em;">Het wordt extra interessant wanneer een systeem zowel de consistentie in ACID als die van CAP wil hebben. De ACID principes moeten dan over alle nodes heen tegelijk geldig zijn. Het spreekt voor zich dat dit niet eenvoudig is en, zeker in het geval van een netwerkpartitie, voor een specifieke aanpak zal zorgen.</p>  
</div>



<p class="justify-text">De afkorting <a href="https://en.wikipedia.org/wiki/PACELC_theorem" data-type="URL" data-id="https://en.wikipedia.org/wiki/PACELC_theorem">PACELC</a> kan men dan via het volgende zinnetje opbouwen: Bij netwerkpartitie (P), moet men kiezen tussen beschikbaarheid (Availability) en Consistentie (C), en anders (Else), tussen latency (L) en consistentie (C).</p>



<p class="justify-text">Wanneer men over voldoende performantie beschikt, het systeem niet overbelast is, en er geen fouten optreden, zal men in de praktijk weinig merken van dit verschil tussen latentie en consistentie. Maar de specifieke garanties die worden geboden zijn echter wel heel belangrijk om weten wanneer men deze databases gaat gebruiken, vermits er altijd wel iets zal misgaan en er altijd wel een situatie kan optreden die het systeem te zwaar belast. Wil men ten allen tijde kunnen rekenen op consistentie, of op een zo hoog mogelijke beschikbaarheid en het zo weinig mogelijk missen en zo snel mogelijk afhandelen van requests? Een banktoepassing zal typisch het eerste willen, een webshop misschien eerder het tweede (en als er iets misgaat door inconsistentie in de data, maakt men dit achteraf wel goed met de klant).</p>



<p class="justify-text">In de praktijk is PACELC eigenlijk nuttiger dan CAP: indien men een systeem met hoge beschikbaarheid wil voorzien, moet men de facto aan duplicatie gaan doen, ook van data. Vanaf het moment dat data gedupliceerd wordt en verspreid over meerdere plaatsen, zal men een afweging moeten maken tussen hoe consistent men deze wil houden, en hoe snel men er mee wil kunnen werken.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="555" src="/wp-content/uploads/2020/04/pacelc-transparant-1024x555.png" alt="" class="wp-image-14454" srcset="https://www.smalsresearch.be/wp-content/uploads/2020/04/pacelc-transparant-1024x555.png 1024w, https://www.smalsresearch.be/wp-content/uploads/2020/04/pacelc-transparant-300x163.png 300w, https://www.smalsresearch.be/wp-content/uploads/2020/04/pacelc-transparant-768x416.png 768w, https://www.smalsresearch.be/wp-content/uploads/2020/04/pacelc-transparant.png 1048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption>Figuur 1: Het PACELC theorema</figcaption></figure>



<h2 class="wp-block-heading">NewSQL in de Praktijk: Testresultaten</h2>



<p class="justify-text">We testten 3 verschillende NewSQL producten tijdens deze studie: <a href="https://www.cockroachlabs.com/" data-type="URL" data-id="https://www.cockroachlabs.com/">CockroachDB</a>, <a href="https://pingcap.com/products/tidb/" data-type="URL" data-id="https://pingcap.com/products/tidb/">TiDB</a> en <a href="https://nuodb.com/" data-type="URL" data-id="https://nuodb.com/">NuoDB</a>. Het voornaamste doel van de test was om het gedrag bij het uitvallen van nodes te testen. De theorie stelt dat deze databases netjes blijven werken zolang een meerderheid van de nodes draait en deze elkaar kunnen zien. Op die manier kan er altijd een concensus worden bereikt betreffende transacties.</p>



<p class="justify-text">De test ging als volgt: eerst bouwen we een cluster van 3 nodes voor elk van deze producten; daar wordt eventueel nog een <a href="https://en.wikipedia.org/wiki/Load_balancing_(computing)" data-type="URL" data-id="https://en.wikipedia.org/wiki/Load_balancing_(computing)">load balancer</a> aan toegevoegd en ook voorzien we een machine die als client zal optreden. Daarna volgen er twee testen waarbij we de cluster vanaf de client machine bestoken met requests. We gebruiken hierbij de TPCC, dit is een gestandaardiseerde test voor OnLine Transaction Processing (OLTP) Databases, het soort databases die we typisch gebruiken als backend voor online toepassingen (de <a href="https://nl.wikipedia.org/wiki/Online_analytical_processing" data-type="URL" data-id="https://nl.wikipedia.org/wiki/Online_analytical_processing">typische tegenhangers</a> zijn databases die zich focussen op analytics). De <a href="https://www.tpc.org/tpcc/" type="URL" id="http://www.tpc.org/tpcc/">TPCC is &#8220;test C&#8221;</a> van de TPC (transaction processing performance council), en wordt vandaag beschouwd als de meest typische maatstaf.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="327" src="/wp-content/uploads/2020/08/threelogos-1024x327.png" alt="" class="wp-image-14703" srcset="https://www.smalsresearch.be/wp-content/uploads/2020/08/threelogos-1024x327.png 1024w, https://www.smalsresearch.be/wp-content/uploads/2020/08/threelogos-768x246.png 768w, https://www.smalsresearch.be/wp-content/uploads/2020/08/threelogos-2048x655.png 2048w, https://www.smalsresearch.be/wp-content/uploads/2020/08/threelogos-300x96.png 300w, https://www.smalsresearch.be/wp-content/uploads/2020/08/threelogos-1536x491.png 1536w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption>Figuur 2: De logo&#8217;s van CockroachDB, NuoDB en TiDB, de drie geteste producten</figcaption></figure>



<p class="justify-text">De twee testen verschillen in het volgende: de eerste keer gaat er niets mis: alle drie de nodes blijven netjes werken. Bij de tweede test-run zullen we echter na een tijdje één van de nodes geforceerd uitschakelen, alsof deze een stroompanne ondervindt. Deze node zal dan de helft van de testperiode uitgeschakeld blijven, om dan, nog tijdens de test, terug op te worden gestart.</p>



<p class="justify-text">De TPCC is in principe ook een performantietest, dus we kunnen eigenlijk ook zien hoeveel verkeer deze databases aankunnen. Dit was echter niet het hoofdopzet van de test en de resultaten kunnen hierdoor wat meer uit elkaar liggen. Ook spelen er bepaalde aspecten aan sommige NewSQL databases, die een impact hebben op de performantie, niet mee in onze test, vanwege de setup (verschillende nodes op virtuele machines, echter allen op dezelfde fysieke machine). Zo is de fysieke afstand tussen nodes belangrijk, en vaak is het ook van belang of de systeemklokken op de verschillende nodes niet teveel van elkaar afwijken (Voor <a href="https://cloud.google.com/spanner?hl=nl" data-type="URL" data-id="https://cloud.google.com/spanner?hl=nl">Google Spanner</a> rolt men hiertoe atoomklokken uit in de verschillende datacenters; er bestaan echter ook aanvaardbare goedkopere oplossingen).</p>



<p class="justify-text">Voor de drie geteste databases bekwamen we gelijkaardige resultaten. Alle drie bleven ze functioneel bij het falen van één van de drie nodes. Bij de laatste, NuoDB, vroeg dit echter extra configuratiewerk. Voor CockroachDB en TiDB was dit out-of-the-box ondersteund. Daarnaast werd de performantie weinig beïnvloed door het node-falen; er waren nauwelijks minder transacties in de testperiode (enkel voor NuoDB was het verschil iets groter). Wat wel opviel, was dat enkele transacties een stuk langer duurden. We vermoeden dat deze transacties werden gedaan op het moment van het node-falen, waardoor ze werden benadeeld. Al bij al voldeden de drie geteste producten echter wel goed aan onze verwachtingen van beschikbaarheid. Hieronder een voorbeeld van de cijfers van de test van CockroachDB.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1015" height="442" src="/wp-content/uploads/2020/04/cockroachDB-testresult.png" alt="" class="wp-image-14473" srcset="https://www.smalsresearch.be/wp-content/uploads/2020/04/cockroachDB-testresult.png 1015w, https://www.smalsresearch.be/wp-content/uploads/2020/04/cockroachDB-testresult-300x131.png 300w, https://www.smalsresearch.be/wp-content/uploads/2020/04/cockroachDB-testresult-768x334.png 768w" sizes="auto, (max-width: 1015px) 100vw, 1015px" /><figcaption>Figuur 3: Vergelijking van de testresultaten zonder en met node-falen voor CockroachDB. In groen is het totaal aantal transacties aangeduid. In rood de sterke vertraging van de traagste transactie bij node-falen.</figcaption></figure>



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



<p class="justify-text">NewSQL databases beginnen vrij matuur te zijn. Ze zijn een prima keuze wanneer we voor een toepassing de voorkeur geven aan het gemak van data die consistent blijft en ondersteuning voor SQL, maar tegelijk toch een zeer goede beschikbaarheid willen. Het gedistribueerd karakter is ingebouwd in de technologie (ze zijn dus &#8216;cloud native&#8217;), waardoor ze zich veel gemakkelijker dan de traditionele relationele databases laten uitrollen in clusters van meerdere evenwaardige nodes (&#8216;<a href="https://en.wikipedia.org/wiki/Multi-master_replication" data-type="URL" data-id="https://en.wikipedia.org/wiki/Multi-master_replication">multi-master</a>&#8216;, i.t.t. de zgn. &#8216;master-slave&#8217; setup), waarvan slechts een meerderheid operationeel moet blijven om het systeem beschikbaar te houden.</p>



<p class="justify-text">We kunnen echter ook enkele aandachtspunten aanduiden. Om een effectief systeem met hoge beschikbaarheid te hebben, moet men deze databases in principe uitrollen op verschillende locaties (eventueel zelfs in verschillende datacenters). Dit om ervoor te zorgen dat de kans zo klein mogelijk is dat verschillende nodes tegelijk falen. Tegelijk is het van belang dat deze nodes vlot met elkaar kunnen communiceren (en dat dit verkeer niet wordt onderschept) en op systemen draaien met een zo gelijk mogelijke systeemklok (voor sommige architecturen), anders wordt de performantie aangetast.</p>



<p class="justify-text">Deze aandachtspunten in beschouwing genomen, kunnen we echter besluiten dat NewSQL databases een goede keuze vormen wanneer men een cluster van redundante databases wil uitrollen voor verhoogde beschikbaarheid.</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 loading="lazy" 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="auto, (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>
