<?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>Distributed systems &#8211; Smals Research</title>
	<atom:link href="https://www.smalsresearch.be/tag/distributed-systems/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>Distributed systems &#8211; Smals Research</title>
	<link>https://www.smalsresearch.be</link>
	<width>32</width>
	<height>32</height>
</image> 
	<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 fetchpriority="high" 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="(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 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="(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 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="(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>
