<?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>Resilience &#8211; Smals Research</title>
	<atom:link href="https://www.smalsresearch.be/tag/resilience/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.smalsresearch.be</link>
	<description></description>
	<lastBuildDate>Thu, 09 Apr 2026 12:23:58 +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>Resilience &#8211; Smals Research</title>
	<link>https://www.smalsresearch.be</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Souveraineté numérique</title>
		<link>https://www.smalsresearch.be/souverainete-numerique/</link>
					<comments>https://www.smalsresearch.be/souverainete-numerique/#comments</comments>
		
		<dc:creator><![CDATA[Joachim Ganseman]]></dc:creator>
		<pubDate>Fri, 18 Apr 2025 12:00:27 +0000</pubDate>
				<category><![CDATA[[FR]]]></category>
		<category><![CDATA[Blog post]]></category>
		<category><![CDATA[audit]]></category>
		<category><![CDATA[cloud computing]]></category>
		<category><![CDATA[confidentiality]]></category>
		<category><![CDATA[data center]]></category>
		<category><![CDATA[egov]]></category>
		<category><![CDATA[G-Cloud]]></category>
		<category><![CDATA[government]]></category>
		<category><![CDATA[interoperability]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[open standards]]></category>
		<category><![CDATA[Privacy]]></category>
		<category><![CDATA[Resilience]]></category>
		<category><![CDATA[Risk Management]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Society]]></category>
		<guid isPermaLink="false">/?p=22369</guid>

					<description><![CDATA[Nous assistons une fois de plus à l’émergence de questions fondamentales d’indépendance, de sécurité et d’autonomie stratégique : la souveraineté numérique est tendance.]]></description>
										<content:encoded><![CDATA[
<p><em><em>Dit artikel is ook beschikbaar in het</em> <a href="/digitale-soevereiniteit/">Nederlands</a>.</em></p>



<p>Les services numériques doivent non seulement être rentables, mais également robustes&nbsp;: ils doivent continuer à fonctionner si certains fournisseurs ou éléments de base font défaut pour une raison quelconque. Il ne s’agit pas uniquement d’une question purement technique, d’un enfermement propriétaire (<a href="https://fr.wikipedia.org/wiki/Enfermement_propri%C3%A9taire">vendor lock-in</a>) ou d’<a href="https://www.ibm.com/think/topics/multicloud">architecture multicloud</a>. Nous assistons une fois de plus à <a href="https://foreignpolicy.com/2025/03/31/europe-digital-sovereignty-colony-trump-asml-ai-eurostack/">l’émergence de questions fondamentales </a>d’indépendance, de sécurité et d’autonomie stratégique&nbsp;: la <em>souveraineté numérique</em> est tendance.</p>



<p>On comprend aisément pourquoi&nbsp;: avec un revirement politique d’une ampleur sans précédent, la réputation des États-Unis en tant que partenaire commercial fiable s’est volatilisée en un temps record. Du jour au lendemain, un <a href="https://www.reuters.com/world/us-aerospace-firm-maxar-disables-satellite-photos-ukraine-2025-03-07/">service peut être interrompu</a> ou des <a href="https://www.reuters.com/world/us/trump-tariffs-updates-world-braces-us-announce-duties-2025-04-01/">droits de douane peuvent être introduits</a> sans raison valable. Quiconque développe ou gère des infrastructures IT critiques en tremble rien qu’à l’idée. Et l’autonomie vaut soudain à nouveau son pesant d’or.</p>



<h2 class="wp-block-heading">Piliers stratégiques</h2>



<p>Le cœur de la souveraineté numérique réside dans la capacité à choisir, déployer et gérer des solutions technologiques sans dépendances externes étendues. Ces dépendances sont souvent plus profondes que nous ne le pensons, comme l’a démontré une expérience intéressante du<a href="https://www.youtube.com/watch?v=Rxuf1598bjc"> journaliste de Gizmodo, Kashmir Hill</a>, il y a quelques années. La dépendance technologique représente toujours un risque. Afin de le minimiser, nous pouvons entre autres&nbsp;:</p>



<ul class="wp-block-list">
<li>Investir dans le développement local et <em>open source</em> des technologies</li>



<li>Construire nous-même des infrastructures robustes et décentralisées</li>



<li>Développer nos propres compétences et capacités technologiques</li>



<li>Inclure des conditions d’interopérabilité, de migration de données, de flexibilité, d’interruption, etc. dans des clauses contractuelles et les marchés publics.</li>



<li>&#8230;</li>
</ul>



<p>En matière de développement logiciel pratique également, les choix qui favorisent l’agilité technologique présentent un avantage&nbsp;:</p>



<ul class="wp-block-list">
<li>Choisir des normes ouvertes et des API robustes et standardisées</li>



<li>Développer des solutions non seulement modulaires et évolutives, mais également agnostiques vis-à-vis du cloud</li>



<li>Implémenter des middleware capables de relier différentes technologies</li>



<li>Prêter attention à la portabilité, à la compatibilité multiplateforme et à la compatibilité entre navigateurs</li>



<li>…</li>
</ul>



<p><a href="https://publications.jrc.ec.europa.eu/repository/handle/JRC138657">La souveraineté sur les données</a> est également très importante. Une souveraineté numérique exige de conserver un contrôle maximal sur la collecte, le stockage, le traitement et la protection des données. Cela peut se faire en organisant le stockage et le traitement des données localement, de préférence en appliquant des mécanismes solides de <a href="https://fr.wikipedia.org/wiki/Gouvernance_des_donn%C3%A9es">gouvernance des données</a>, ou en les confiant à un tiers qui offre les garanties nécessaires et opère dans le cadre d’une <a href="https://commission.europa.eu/law/law-topic/data-protection/international-dimension-data-protection/adequacy-decisions_en">législation compatible</a>.</p>



<p>La Belgique se débrouille plutôt bien en matière d’autonomie infrastructurelle, avec le <a href="https://gcloud.belgium.be">cloud gouvernemental G-Cloud</a> et le réseau <a href="https://www.belnet.be/">Belnet</a>, entre autres.</p>



<h2 class="wp-block-heading">Le rôle de l’<em>open source</em></h2>



<p>Les technologies <em>open source</em>, en tant que <em>vecteurs</em> d’indépendance technologique, sont des éléments fondamentaux de la souveraineté numérique. Elles offrent une totale transparence du code, permettent la modification ou le propre développement, et diminuent la dépendance vis-à-vis des géants technologiques étrangers.</p>



<p>Cependant, cela a également un coût. L’utilisation de logiciels <em>open source</em> et de normes ouvertes implique de fournir soi-même l’ensemble du support, de la formation, des mises-à-jour, de la compatibilité, du débogage, etc. En échange de l’autonomie, il faut inclure un éventail de tâches connexes. Cela implique notamment un investissement dans la gestion active, ainsi que la maintenance et le développement des connaissances. Les acteurs commerciaux proposant des solutions propriétaires s’en chargent généralement.</p>



<p>Devenir totalement autonome est donc généralement impossible. Il existe un cas d’étude bien connu, celui de la ville de Munich, qui a ambitieusement <a href="https://interoperable-europe.ec.europa.eu/collection/open-source-observatory-osor/document/munichs-long-history-open-source-public-administration">basculé en 2006 vers un environnement Linux développé en interne</a>, mais qui, en raison de problèmes persistants de compatibilité et de l’augmentation des coûts de gestion qui en découle, a mis fin au programme en 2017 pour revenir à un environnement Microsoft standardisé.</p>



<h2 class="wp-block-heading">Chez nos voisins</h2>



<p>L’Allemagne est une fervente partisane de la souveraineté numérique depuis longtemps. L’<em><a href="https://osb-alliance.de/ueber-uns/was-ist-die-osb-alliance">Open Source Business Alliance</a></em> allemande utilise même le terme dans son slogan. L’expérience munichoise a donné naissance à l’actuel <em><a href="https://opensource.muenchen.de/">Open Source Programme Office</a></em> de la ville. Le niveau fédéral allemand encourage également l’indépendance technique, notamment&nbsp;:</p>



<ul class="wp-block-list">
<li>Des projets propres tels que <em><a href="https://scs.community/">Sovereign Cloud Stack</a></em> (actuellement <a href="https://www.sovereigncloudstack.org/">en transformation</a> après la fin du financement),</li>



<li>Le <em><a href="https://www.sovereign.tech/">Sovereign Tech Fund</a></em>, qui fournit des fonds pour maintenir les composants <em>open source</em> essentiels,</li>



<li>Le <em><a href="https://zendis.de/">Zentrum Digitale Souveränität</a></em> (ZenDis), qui aide les gouvernements à réduire leurs dépendances technologiques.</li>
</ul>



<p>Ce dernier investit également avec succès dans deux projets propres&nbsp;:</p>



<ul class="wp-block-list">
<li>La plateforme <a href="https://opencode.de/">OpenCode</a>, où les services publics peuvent publier et partager leur code avec d’autres,</li>



<li>L’environnement de travail administratif <a href="https://opendesk.eu/en/">OpenDesk</a>, qui inclut également des options typiques pour les entreprises telles que l’authentification unique et les intégrations entre les réunions, les «&nbsp;chats&nbsp;», le calendrier et les courriers électroniques.<br></li>
</ul>



<p>La France n’est pas en reste non plus. Plusieurs initiatives en faveur de la souveraineté numérique sont menées par la Direction interministérielle du Numérique (<a href="https://www.numerique.gouv.fr/dinum/">DINUM</a>). Ils comptent également leur propre dépôt sous la forme de <a href="https://code.gouv.fr/fr/">code.gouv.fr</a>. En outre, ils développent de manière proactive de nouvelles applications dans leur propre <a href="https://beta.gouv.fr/">incubateur</a>. Cela a donné naissance à des projets tels que <a href="https://lasuite.numerique.gouv.fr">La Suite Numérique</a>, une suite <em>enterprise level</em> de bureautique qui offre des fonctionnalités telles que le chat vidéo, les webinaires et le transfert de fichiers, et qui est en cours d’extension pour inclure des traitements de texte et des tableurs. La France s’est également engagée dans une <a href="https://www.economie.gouv.fr/securite-performance-souverainete-strategie-cloud">stratégie de cloud computing la plus indépendante possible</a> et, tout aussi important, elle s’efforce de motiver et de former ses fonctionnaires par le biais de la <a href="https://code.gouv.fr/fr/bluehats/">communauté des Blue Hats</a>. Du côté des entreprises, l’union des entreprises du logiciel libre et du numérique ouvert (<a href="https://cnll.fr/">CNLL</a>) s’est engagé en faveur de la souveraineté numérique.</p>



<p>Ce qui est frappant à la fois avec l’<a href="https://opendesk.eu/">OpenDesk</a> allemand et <a href="https://lasuite.numerique.gouv.fr">La Suite Numérique</a> française, c’est qu’ils sont tous deux également disponibles en anglais. Même dans le contexte gouvernemental, on prend de plus en plus conscience que les initiatives <em>open source</em> ont de meilleures chances de succès si l’on investit de manière proactive dans l’internationalisation. Plus prometteur encore, <a href="https://www.numerique.gouv.fr/dinum/">DINUM</a> et <a href="https://zendis.de/">ZenDis</a> ont commencé une collaboration concrète avec une <a href="https://fosdem.org/2025/schedule/event/fosdem-2025-6403-note-worthy-collaboration-co-developing-a-note-taking-application/">application de prise de notes développée conjointement</a>. Cette dernière a été présentée lors du dernier <a href="https://fosdem.org/">FOSDEM</a>, la grand-messe annuelle des développeurs <em>open source</em> à Bruxelles, où les <a href="https://fosdem.org/2025/schedule/track/government-collaboration/">collaborations gouvernementales étaient à l’honneur</a>.</p>



<p>Le tandem franco-allemand est un signe prometteur de la volonté de l’Europe de s’unir pour promouvoir la souveraineté numérique. Nous savons déjà que les <a href="https://www.numerique.gouv.fr/espace-presse/premiers-succes-cooperation-franco-allemande-administration-numerique-souveraine-collaboration-trilaterale-avec-royaume-des-pays-bas-signature-nouvelle-declaration-dintention-commune/">Pays-Bas souhaitent se joindre</a> à cette collaboration. En effet, le <a href="https://ibestuur.nl/artikel/actie-nodig-om-de-digitale-soevereiniteit-van-nederland-en-europa-te-versterken/">débat social</a> y est également bien vivant, même à la Seconde Chambre, avec des discussions sur les <a href="https://ecp.nl/argumentenkaart-niet-europese-clouddiensten-overhandigd-aan-tweede-kamer/">services cloud</a> ou le <a href="https://tweakers.net/nieuws/233008/tweede-kamer-wil-unaniem-dat-sidn-nl-domeininfrastructuur-niet-naar-aws-overzet.html">DNS</a>. L’Organisation néerlandaise pour la recherche scientifique appliquée (<a href="https://www.tno.nl/en/importance-digital-sovereignty/">TNO</a>) a publié un <a href="https://publications.tno.nl/publication/34642268/o5remY/TNO-2024-R10300.pdf">long rapport sur la souveraineté numérique</a>, les <a href="https://www.uu.nl/sites/default/files/Moerel%2C%20Timmers%20%282.0%29%20-%20Preadvies%20Staatsrechtconferentie%202020.pdf">universités en font un sujet de discussion</a> et le <a href="https://dutchcloudcommunity.nl/digitale-soevereiniteit/">monde des affaires</a> y prête également attention. La souveraineté numérique est à l’ordre du jour à <a href="https://www.binnenlandsbestuur.nl/digitaal/experts-slaan-alarm-over-soevereiniteit">tous les niveaux de gouvernement</a>.</p>



<h2 class="wp-block-heading">Le rôle de l’Europe</h2>



<p>L’Union européenne a un intérêt stratégique évident dans la souveraineté (numérique). Les éléments clés à cet égard sont le récent <a href="https://digital-markets-act.ec.europa.eu/index_en">Digital Markets Act (DMA)</a> et le <a href="https://digital-strategy.ec.europa.eu/en/policies/digital-services-act-package">Digital Services Act (DSA)</a>. Ces deux cadres législatifs visent à limiter le pouvoir des géants technologiques étrangers et à rendre le «&nbsp;terrain de jeu&nbsp;» plus équitable et transparent pour les entreprises européennes. L’UE souhaite ainsi renforcer son autonomie stratégique en établissant des règles claires en matière de gestion des données et des plateformes, rendant les États membres européens moins vulnérables aux dépendances extérieures. Le <a href="https://digital-strategy.ec.europa.eu/en/policies/cybersecurity-act">Cybersecurity Act</a> et la <a href="https://eur-lex.europa.eu/eli/dir/2022/2555/oj/">directive NIS2</a> devraient garantir que la sécurité et la fiabilité ne soient pas compromises.</p>



<p class="has-text-align-left">L’UE entreprend également de <a href="https://www.europarl.europa.eu/RegData/etudes/BRIE/2020/651992/EPRS_BRI(2020)651992_EN.pdf">nombreuses initiatives pertinentes</a>, mais toutes ne décollent pas tout aussi facilement. La fragmentation européenne est une vieille plaie. Les petits projets restent souvent petits et, une fois le financement terminé, ils se transforment en <em><a href="https://fr.wikipedia.org/wiki/Logiciel_abandonn%C3%A9">abandonware</a></em>. Par exemple, il est impossible de savoir si la nouvelle <em><a href="https://europeanopensource.academy/">European Open Source Academy</a></em> survivra à la fin de son cycle de financement en 2027. D’autre part, les consortiums à grande échelle ont de nombreux problèmes de coordination et de contrôle. Le projet <a href="https://gaia-x.eu/">GAIA-X</a> a ainsi acquis la réputation d’être <a href="https://blog.okfn.org/2025/02/11/open-source-policy-and-europes-digital-sovereignty-key-takeaways-from-the-eu-open-source-policy-summit/">plus une histoire de mémos que de démos</a>, si bien que les nouveaux projets tels qu’<a href="https://openeurollm.eu/">OpenEuroLLM</a> sont également accueillis avec un certain scepticisme. Le déploiement des <em><a href="https://digital-strategy.ec.europa.eu/en/policies/data-spaces">European Data Spaces</a></em> dans divers domaines devrait favoriser la souveraineté sur les données. Cela <a href="https://health.ec.europa.eu/ehealth-digital-health-and-care/european-health-data-space-regulation-ehds_en">deviendra obligatoire</a> pour la santé (EHDS), qui pourrait insuffler un nouvel élan. Cela ne suffit cependant pas à apaiser les inquiétudes&nbsp;: le <a href="https://www.euro-stack.info/">rapport complet EuroStack</a> de la <em>Bertelsmann Stiftung</em> présente même à l’UE une vision plus ambitieuse sur un plateau d’argent.</p>



<p>Sous l’égide de l’<a href="https://interoperable-europe.ec.europa.eu/">Europe Interopérable</a>, on retrouve l’<em>Open Source Observatory and Repository</em> (<a href="https://interoperable-europe.ec.europa.eu/collection/open-source-observatory-osor">OSOR</a>), en plus de <em><a href="https://interoperable-europe.ec.europa.eu/collection/public-sector-tech-watch">Public Sector Techwatch</a></em> et <em><a href="https://interoperable-europe.ec.europa.eu/collection/govtechconnect/">GovTech Connect</a></em>. Ils surveillent l’utilisation de l’<em>open source</em> dans les administrations gouvernementales européennes depuis plus de 15 ans maintenant, et encouragent les partenariats et la réutilisation. L’<em><a href="https://interoperable-europe.ec.europa.eu/eu-oss-catalogue/solutions">Open Source Solutions Catalogue</a></em> récemment lancé devrait permettre aux pays de réutiliser plus facilement les solutions des uns et des autres. Ils publient également des <a href="https://interoperable-europe.ec.europa.eu/collection/open-source-observatory-osor/reports-and-guidelines">rapports</a>, des <a href="https://interoperable-europe.ec.europa.eu/collection/open-source-observatory-osor/case-studies">études de cas</a>, des <a href="https://interoperable-europe.ec.europa.eu/collection/open-source-observatory-osor/oss-repositories">catalogues nationaux</a> (dans lesquels nous trouvons <a href="https://www.ict-reuse.be/">ict-reuse.be</a>) et une <a href="https://interoperable-europe.ec.europa.eu/collection/open-source-observatory-osor/osor-newsletters">lettre d’information</a>. Les gouvernements qui souhaitent mettre en place leur propre <a href="https://interoperable-europe.ec.europa.eu/collection/open-source-observatory-osor/ospos-oss-governance"><em>Open Source Program Office</em> (OSPO)</a> afin de contribuer activement aux projets <em>open source</em> tels que <a href="https://interoperable-europe.ec.europa.eu/collection/ec-ospo">celui de l’UE</a>, y trouvent le soutien nécessaire. Les <a href="https://interoperable-europe.ec.europa.eu/collection/open-source-observatory-osor/news/dutch-digitalisation-minister-announces-ospo-creation">Pays-Bas</a> sont déjà convaincus. Si les autorités belges veulent contribuer visiblement à la souveraineté numérique, voilà une excellente occasion.</p>



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



<p>La souveraineté numérique est plus qu’un choix technique. C’est une stratégie continue pour retrouver un pouvoir d’agir dans un monde numérique hautement interconnecté où les éléments fondamentaux peuvent soudainement changer. Nous ne voulons pas nous contenter de consommer la technologie, mais aussi la façonner, la comprendre et la contrôler activement. Cela nous permettrait de réduire les dépendances externes et les risques qui en découlent. La pensée et la coopération européennes offrent des possibilités de synergies.</p>



<p><a id="_msocom_1"></a>L’autonomie technologique nécessite un écosystème technologique sain. Une attention constante au capital humain et au développement des connaissances est indispensable. Pour y parvenir de manière durable, les initiatives de soutien doivent bénéficier des ressources nécessaires&nbsp;:</p>



<ul class="wp-block-list">
<li>Développer de manière proactive des alternatives technologiques, qui anticipent la demande,</li>



<li>Participer à l’échange de connaissances, à des évènements et réseauter, avec des pairs, des institutions du savoir, des pays voisins, avec l’UE, etc.</li>



<li>Investir ou participer activement aux solutions <em>open source</em> existantes que l’on réutilise,</li>



<li>Construire des communautés autour de projets propres,</li>



<li>Investir dans un design attrayant et l’intuitivité des solutions propres,</li>



<li>Rendre sa propre solution disponible en dehors de ses murs&nbsp;: publier en <em>open source</em>, <a href="https://yml.publiccode.tools">intégrer dans des catalogues</a>, ajouter une documentation et une traduction anglaise, etc.</li>



<li>Travailler sur la notoriété de la marque&nbsp;: sites web, promotion, marketing, salons professionnels, médias (sociaux), etc.</li>



<li>&#8230;</li>
</ul>



<p>Les personnes intéressées par ce thème peuvent suivre les organisations et les initiatives mentionnées dans cet article sur les médias sociaux ou à travers leurs lettres d’information. Pour une analyse approfondie, le <a href="https://www.euro-stack.info/">rapport EuroStack</a> mentionné ci-dessus est intéressant. Si vous cherchez des alternatives pour les dépendances dans vos propres projets, <a href="https://european-alternatives.eu/">european-alternatives.eu</a>, <a href="https://euro-stack.com/">euro-stack.com</a> ou <a href="https://alternativeto.net/">alternativeto.net</a> sont de bons points de départ. Enfin, la souveraineté numérique est un effort d’équipe, n’hésitez donc surtout pas à partager d’autres sources, projets ou liens intéressants dans les commentaires ci-dessous&nbsp;!</p>



<p>______________________</p>



<p><em>Ce post est une contribution de Joachim Ganseman, consultant IT chez Smals Research. Cet article est écrit en son nom propre et n’impacte en rien le point de vue de Smals.</em></p>


]]></content:encoded>
					
					<wfw:commentRss>https://www.smalsresearch.be/souverainete-numerique/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Digitale Soevereiniteit</title>
		<link>https://www.smalsresearch.be/digitale-soevereiniteit/</link>
		
		<dc:creator><![CDATA[Joachim Ganseman]]></dc:creator>
		<pubDate>Fri, 04 Apr 2025 14:39:21 +0000</pubDate>
				<category><![CDATA[[NL]]]></category>
		<category><![CDATA[Blog post]]></category>
		<category><![CDATA[audit]]></category>
		<category><![CDATA[cloud computing]]></category>
		<category><![CDATA[confidentiality]]></category>
		<category><![CDATA[data center]]></category>
		<category><![CDATA[egov]]></category>
		<category><![CDATA[G-Cloud]]></category>
		<category><![CDATA[government]]></category>
		<category><![CDATA[interoperability]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[open standards]]></category>
		<category><![CDATA[Privacy]]></category>
		<category><![CDATA[Resilience]]></category>
		<category><![CDATA[Risk Management]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Society]]></category>
		<guid isPermaLink="false">/?p=22224</guid>

					<description><![CDATA[We zien vandaag fundamentele kwesties rond onafhankelijkheid, veiligheid en strategische autonomie opnieuw ter sprake komen: Digitale Soevereiniteit is hot.]]></description>
										<content:encoded><![CDATA[
<p><em>Cet article est aussi disponible <a href="/souverainete-numerique/">en français</a>.</em></p>



<p>Digitale dienstverlening moet niet alleen kostenefficiënt zijn, maar ook robuust: het moet blijven werken als bepaalde toeleveranciers of bouwblokken het laten afweten, om welke reden dan ook. Dat is niet alleen een louter technisch vraagstuk van <a href="https://nl.wikipedia.org/wiki/Vendor_lock-in">vendor lock-in</a> of <a href="https://www.ibm.com/think/topics/multicloud">multicloud architectuur</a>. We zien fundamentele kwesties rond onafhankelijkheid, veiligheid en strategische autonomie <a href="https://foreignpolicy.com/2025/03/31/europe-digital-sovereignty-colony-trump-asml-ai-eurostack/">opnieuw ter sprake komen</a>: <em>Digitale Soevereiniteit</em> is hot.</p>



<p>De aanleiding is niet ver te zoeken: met een beleidsomslag van jewelste is de reputatie van de VS als betrouwbare handelspartner in recordtempo verdampt. Zonder aanleiding kan van de ene dag op de andere een <a href="https://www.reuters.com/world/us-aerospace-firm-maxar-disables-satellite-photos-ukraine-2025-03-07/">dienstverlening stopgezet</a>, of een <a href="https://www.reuters.com/world/us/trump-tariffs-updates-world-braces-us-announce-duties-2025-04-01/">handelstarief ingevoerd</a> worden. Wie kritische infrastructuur en IT ontwikkelt of beheert, trekt lijkbleek weg van het idee alleen al. En zo is zelfredzaamheid plots weer goud waard.</p>



<h2 class="wp-block-heading">Strategische pijlers</h2>



<p>De kern van digitale soevereiniteit ligt in het kunnen kiezen, implementeren en beheren van technologische oplossingen zonder verregaande externe afhankelijkheden. Die afhankelijkheden zitten dieper dan we vaak denken, zoals enkele jaren geleden nog gedemonstreerd in een interessant <a href="https://www.youtube.com/watch?v=Rxuf1598bjc">experiment van Gizmodo journaliste Kashmir Hill</a>. Technologische afhankelijkheid vormt altijd een risico. Om dat te minimaliseren kunnen we onder andere:</p>



<ul class="wp-block-list">
<li>Investeren in lokale en open-source technologie-ontwikkeling</li>



<li>Zelf robuuste, gedecentraliseerde infrastructuren opbouwen</li>



<li>Eigen technologische vaardigheden en capaciteiten uitbouwen</li>



<li>Voorwaarden qua interoperabiliteit, data-migratie, flexibiliteit, stopzetting, … opnemen in contractuele clausules en openbare aanbestedingen</li>



<li>&#8230;</li>
</ul>



<p>Ook bij praktische software-ontwikkeling hebben keuzes die technologische wendbaarheid bevorderen een streepje voor:</p>



<ul class="wp-block-list">
<li>Verkies open standaarden en robuuste, gestandaardiseerde APIs</li>



<li>Ontwikkel niet alleen modulair en schaalbaar maar ook cloud-agnostisch</li>



<li>Implementeer eventueel middleware die verschillende technologieën kan overbruggen</li>



<li>Besteed aandacht aan portabiliteit, cross-platform en cross-browser compatibiliteit</li>



<li>…</li>
</ul>



<p>Daarnaast is ook <a href="https://publications.jrc.ec.europa.eu/repository/handle/JRC138657">data-autonomie</a> van groot belang. Zo vereist digitale soevereiniteit dat men maximale controle over data-verzameling, -opslag, -verwerking en -bescherming behoudt. Dat kan door de data-opslag en -verwerking lokaal te organiseren, liefst met toepassing van degelijke <a href="https://en.wikipedia.org/wiki/Data_governance">data governance</a> mechanismes, of door ze bij een derde partij onder te brengen die de nodige garanties biedt en tenminste onder een <a href="https://commission.europa.eu/law/law-topic/data-protection/international-dimension-data-protection/adequacy-decisions_en">compatibele wetgeving</a> opereert.</p>



<p>Het mag gerust gezegd worden dat België het op het vlak van infrastructurele autonomie, met onder andere de <a href="https://gcloud.belgium.be">overheidscloud Gcloud</a> en <a href="https://www.belnet.be/">Belnet</a>, best goed doet.</p>



<h2 class="wp-block-heading">De rol van open-source</h2>



<p>Open-source technologieën zijn, als <em>enablers</em> van technologische onafhankelijkheid, fundamentele bouwstenen voor digitale soevereiniteit. Ze bieden volledige transparantie van code, geven de mogelijkheid tot aanpassing of eigen ontwikkeling, en ze verminderen de afhankelijkheid van buitenlandse technologiereuzen.</p>



<p>Dat heeft echter ook een kostenplaatje. Wie in eigen beheer open-source software en open standaarden wil aanwenden, moet ook zelf voorzien in alle ondersteuning, opleiding, upgrades, compatibiliteit, eventueel debuggen, etc. In ruil voor autonomie moet je een heel takenpakket mee opnemen in de marge. Dat impliceert dat je moet willen investeren in actief beheer, onderhoud en kennisopbouw. Commerciële spelers met bedrijfseigen oplossingen ontzorgen je daar meestal van.</p>



<p>“All the way” zelfvoorzienend worden is daarom meestal onhoudbaar. Een bekende case studie is die van de stad München, die vanaf 2006 ambitieus <a href="https://interoperable-europe.ec.europa.eu/collection/open-source-observatory-osor/document/munichs-long-history-open-source-public-administration">overschakelde naar een zelf ontwikkelde Linux-omgeving</a>, maar omwille van aanslepende compatibiliteitsproblemen en de daarmee gepaard gaande oplopende beheerskosten, in 2017 de stekker uit het programma trok en opnieuw voor een gestandaardiseerde Microsoft-omgeving koos.</p>



<h2 class="wp-block-heading">In de buurlanden</h2>



<p>Duitsland draagt het idee van digitale soevereiniteit dus al langer een warm hart toe. De Duitse <a href="https://osb-alliance.de/ueber-uns/was-ist-die-osb-alliance">Open Source Business Alliance</a> zet de term zelfs in hun slogan. De ervaring van München evolueerde naar het huidige <a href="https://opensource.muenchen.de/">Open Source Programme Office</a> van de stad. Het Duitse federale niveau moedigt technische onafhankelijkheid ook aan, met onder andere:</p>



<ul class="wp-block-list">
<li>Eigen projecten zoals <a href="https://scs.community/">Sovereign Cloud Stack</a> (lijkt momenteel <a href="https://www.sovereigncloudstack.org/">in transformatie</a> na afloop financiering),</li>



<li>Het <a href="https://www.sovereign.tech/">Sovereign Tech Fund</a>, dat financiering voorziet om kritische open-source componenten te onderhouden,</li>



<li>Het <a href="https://zendis.de/">Zentrum Digitale Souveränität</a> (ZenDis), dat overheden ondersteunt bij de afbouw van technologische afhankelijkheden.</li>
</ul>



<p>Die laatste investeert ook met succes in 2 eigen projecten:</p>



<ul class="wp-block-list">
<li>Het platform <a href="https://opencode.de/">OpenCode</a> waar overheidsdiensten hun code kunnen publiceren en delen met anderen,</li>



<li>De administratieve werkomgeving <a href="https://opendesk.eu/en/">OpenDesk</a> , die ook typische enterprise-opties omvat zoals Single Sign-on en integraties tussen meetings, chats, kalender, en email.</li>
</ul>



<p>Frankrijk zit evenmin stil. Verschillende initiatieven voor digitale soevereiniteit worden bij onze zuiderburen getrokken door <a href="https://www.numerique.gouv.fr/dinum/">DINUM</a>, de centrale interministeriële dienst voor digitalisering. Met <a href="https://code.gouv.fr/fr/">code.gouv.fr</a> hebben zij ook hun eigen code repository. Daarnaast ontwikkelen ze zelf proactief nieuwe toepassingen in een eigen <a href="https://beta.gouv.fr/">incubator</a>. Dat resulteerde onder andere in <a href="https://lasuite.numerique.gouv.fr/en">La Suite Numérique</a>, een <em>enterprise-level</em> kantoorsuite die functionaliteiten zoals videochat, webinars, en file transfer aanbiedt, en nu wordt uitgebreid met tekstverwerkers en spreadsheets. Frankrijk zet eveneens in op een <a href="https://www.economie.gouv.fr/securite-performance-souverainete-strategie-cloud">maximaal onafhankelijke cloud-strategie</a>, en minstens zo belangrijk, werken ze aan motivatie en kennis bij hun overheidsmedewerkers via de <a href="https://code.gouv.fr/fr/bluehats/">Blue Hats community</a>. Vanuit het bedrijfsleven zet <a href="https://cnll.fr/">CNLL</a> zich in voor digitale soevereiniteit.</p>



<p>Opvallend aan zowel het Duitse <a href="https://opendesk.eu/">OpenDesk</a> als het Franse <a href="https://lasuite.numerique.gouv.fr/en">La Suite Numérique</a>, is dat beide ook beschikbaar zijn in het Engels. Zelfs in overheidscontext is dus ondertussen het bewustzijn gegroeid dat open-source initiatieven betere slaagkansen hebben als men proactief investeert in internationalisering. Nog hoopgevender is dat <a href="https://www.numerique.gouv.fr/dinum/">DINUM</a> en <a href="https://zendis.de/">ZenDis</a> concreet zijn beginnen samenwerken. Op het laatste <a href="https://fosdem.org/">FOSDEM</a> evenement, de jaarlijks weerkerende hoogmis voor open-source developers in Brussel, stonden <a href="https://fosdem.org/2025/schedule/track/government-collaboration/">overheidssamenwerkingen in de kijker</a> en presenteerden ze een <a href="https://fosdem.org/2025/schedule/event/fosdem-2025-6403-note-worthy-collaboration-co-developing-a-note-taking-application/">tesamen ontwikkelde notitie-app</a>.</p>



<p>Deze Duits-Franse tandem is een veelbelovend teken dat, als het gaat over het bevorderen van digitale soevereiniteit, de wil alleszins bestaat om Europese krachten wat te bundelen. Er is alvast bekend dat <a href="https://www.numerique.gouv.fr/espace-presse/les-premiers-succ%C3%A8s-de-la-coop%C3%A9ration-franco-allemande-en-faveur-dune-administration-num%C3%A9rique-souveraine-ouvrent-la-voie-%C3%A0-une-collaboration-trilat%C3%A9rale-avec-le-royaume-des-pays-bas-%C3%A0-travers-la-signature-dune-nouvelle-d%C3%A9claration-dintention-commune/">Nederland wil aansluiten</a> bij hun samenwerking. Daar leeft de <a href="https://ibestuur.nl/artikel/actie-nodig-om-de-digitale-soevereiniteit-van-nederland-en-europa-te-versterken/">maatschappelijke discussie</a> immers ook, tot in de Tweede Kamer, met debatten over <a href="https://ecp.nl/argumentenkaart-niet-europese-clouddiensten-overhandigd-aan-tweede-kamer/">clouddiensten</a> of <a href="https://tweakers.net/nieuws/233008/tweede-kamer-wil-unaniem-dat-sidn-nl-domeininfrastructuur-niet-naar-aws-overzet.html">DNS</a>. Het onderzoeksinstituut <a href="https://www.tno.nl/nl/digitale-soevereiniteit/">TNO</a> publiceerde er een <a href="https://publications.tno.nl/publication/34642268/o5remY/TNO-2024-R10300.pdf">lijvig rapport over digitale soevereiniteit</a>, de <a href="https://www.uu.nl/sites/default/files/Moerel%2C%20Timmers%20%282.0%29%20-%20Preadvies%20Staatsrechtconferentie%202020.pdf">universiteiten agenderen het</a>, en ook het <a href="https://dutchcloudcommunity.nl/digitale-soevereiniteit/">bedrijfsleven</a> besteedt er aandacht aan. Op <a href="https://www.binnenlandsbestuur.nl/digitaal/experts-slaan-alarm-over-soevereiniteit">alle bestuursniveaus</a> ligt digitale soevereiniteit er op tafel.</p>



<h2 class="wp-block-heading">De rol van Europa</h2>



<p>De EU heeft een evident strategisch belang bij (digitale) soevereiniteit. Centrale elementen hierin zijn de recente <a href="https://digital-markets-act.ec.europa.eu/index_en">Digital Markets Act (DMA)</a> en <a href="https://digital-strategy.ec.europa.eu/en/policies/digital-services-act-package">Digital Services Act (DSA)</a>. Beide wetgevende kaders hebben tot doel om de macht van buitenlandse technologiereuzen te beperken en het speelveld voor Europese bedrijven gelijkwaardiger en transparanter te maken. Hiermee wil Europa haar strategische autonomie versterken door duidelijke regels te stellen rondom data- en platformbeheer, waardoor Europese lidstaten minder kwetsbaar worden voor externe afhankelijkheden. De <a href="https://digital-strategy.ec.europa.eu/en/policies/cybersecurity-act">Cybersecurity Act</a> en de <a href="https://eur-lex.europa.eu/eli/dir/2022/2555/oj/">NIS2-richtlijn</a> moeten erover waken dat daarbij niet aan veiligheid en betrouwbaarheid wordt ingeboet.</p>



<p class="has-text-align-left">Ze onderneemt daarnaast <a href="https://www.europarl.europa.eu/RegData/etudes/BRIE/2020/651992/EPRS_BRI(2020)651992_EN.pdf">tal van relevante initiatieven</a>, maar die komen niet allemaal even vlot van de grond. De Europese versnippering is een oud zeer. Kleine projecten blijven vaak klein, en eens de financiering afloopt, verworden ze tot <a href="https://en.wikipedia.org/wiki/Abandonware">abandonware</a>. Zo is het onvoorspelbaar of het net gestarte <a href="https://europeanopensource.academy/">European Open Source Academy</a> het einde van haar financieringsronde in 2027 zal overleven. Grootschalige consortia kennen dan weer heel wat problemen met coördinatie en sturing. Het <a href="https://gaia-x.eu/">GAIA-X</a> project heeft zo enigszins de reputatie gekregen als een verhaal van <a href="https://blog.okfn.org/2025/02/11/open-source-policy-and-europes-digital-sovereignty-key-takeaways-from-the-eu-open-source-policy-summit/">meer memo&#8217;s dan demo&#8217;s</a>, wat maakt dat ook nieuwe projecten zoals <a href="https://openeurollm.eu/">OpenEuroLLM</a> met enige scepsis onthaald worden. De uitrol van de <a href="https://digital-strategy.ec.europa.eu/en/policies/data-spaces">Europese Data Spaces</a> in verschillende domeinen moet data-autonomie bevorderen. Voor gezondheid (EHDS) <a href="https://health.ec.europa.eu/ehealth-digital-health-and-care/european-health-data-space-regulation-ehds_en">wordt deze verplicht</a>, wat misschien voor nieuw momentum kan zorgen. Maar dat is niet genoeg om de bezorgdheden weg te nemen: het lijvige <a href="https://www.euro-stack.info/">EuroStack rapport</a> van de Bertelsmann Stiftung stelt de EU zelfs op een dienblaadje een ambitieuzere visie voor.</p>



<p>Onder de paraplu van <a href="https://interoperable-europe.ec.europa.eu/">Interoperable Europe</a> vinden we naast <a href="https://interoperable-europe.ec.europa.eu/collection/public-sector-tech-watch">Public Sector Techwatch</a> en <a href="https://interoperable-europe.ec.europa.eu/collection/govtechconnect/">GovTech Connect</a> ook <a href="https://interoperable-europe.ec.europa.eu/collection/open-source-observatory-osor">OSOR</a>, het Open Source Observatory and Repository, terug. Zij monitoren ondertussen al meer dan 15 jaar het gebruik van open-source in Europese overheidsadministraties, en moedigen samenwerkingsverbanden en hergebruik aan. Met de recent gelanceerde <a href="https://interoperable-europe.ec.europa.eu/eu-oss-catalogue/solutions">Open Source Solutions Catalogue</a> moet het gemakkelijker worden voor landen om elkaars oplossingen te hergebruiken. Daarnaast publiceren ze <a href="https://interoperable-europe.ec.europa.eu/collection/open-source-observatory-osor/reports-and-guidelines">rapporten</a>, <a href="https://interoperable-europe.ec.europa.eu/collection/open-source-observatory-osor/case-studies">case studies</a>, <a href="https://interoperable-europe.ec.europa.eu/collection/open-source-observatory-osor/oss-repositories">nationale catalogi</a> (waarin we <a href="https://www.ict-reuse.be/">ict-reuse.be</a> terugvinden) en een <a href="https://interoperable-europe.ec.europa.eu/collection/open-source-observatory-osor/osor-newsletters">nieuwsbrief</a>. Overheden die zelf een <a href="https://interoperable-europe.ec.europa.eu/collection/open-source-observatory-osor/ospos-oss-governance">Open Source Program Office (OSPO)</a> willen oprichten om actief bij te dragen aan open-source projecten, net zoals de <a href="https://interoperable-europe.ec.europa.eu/collection/ec-ospo">EU er een heeft</a>, vinden bij hen steun. <a href="https://interoperable-europe.ec.europa.eu/collection/open-source-observatory-osor/news/dutch-digitalisation-minister-announces-ospo-creation">Nederland</a> is alvast overtuigd. Als Belgische overheden zichtbaar willen bijdragen aan digitale soevereiniteit, ligt hier nog een uitgelezen kans.</p>



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



<p>Digitale soevereiniteit is meer dan een technische keuze. Het is een continue strategie om <em>agency </em>terug te winnen in een sterk geïnterconnecteerde digitale wereld waarvan fundamentele bouwblokken plots kunnen verschuiven. We willen niet alleen technologie consumeren, maar deze ook actief vormgeven, begrijpen en controleren. Zo beperken we externe afhankelijkheden en de risico&#8217;s die daarmee gepaard gaan. Europees denken en samenwerken biedt daarbij opportuniteiten voor synergieën.</p>



<p>Technologische autonomie vereist een gezond technologisch ecosysteem. Permanente aandacht voor menselijk kapitaal en kennisopbouw zijn een must. Om dat te doen slagen op een duurzame manier, verdienen ondersteunende initiatieven de nodige middelen:</p>



<ul class="wp-block-list">
<li>Proactief technologische alternatieven ontwikkelen, anticiperend op de vraag,</li>



<li>Participeren in kennisuitwisseling, evenementen en netwerken, met vakgenoten, kennisinstellingen, buurlanden, EU, &#8230;</li>



<li>Actief meewerken aan, of investeren in, bestaande open-source oplossingen die je zelf hergebruikt,</li>



<li>Communities uitbouwen rondom eigen projecten,</li>



<li>Investeren in aantrekkelijke vormgeving en gebruiksgemak van de eigen oplossingen,</li>



<li>Eigen oplossingen inzetbaar maken buiten de eigen muren: publiceren als open-source, <a href="https://yml.publiccode.tools">integreren in catalogi</a>, een Engelse vertaling en documentatie toevoegen,</li>



<li>Werken aan naambekendheid: websites, promotie, marketing, vakbeurzen, (social) media, &#8230;</li>



<li>&#8230;</li>
</ul>



<p>Wie interesse heeft om dit thema verder op te volgen, kan de in dit artikel vermelde organisaties en initiatieven volgen op sociale media of via hun nieuwsbrieven. Voor een <em>deep dive</em> is het bovenvermelde <a href="https://www.euro-stack.info/">EuroStack rapport</a> interessant. Om alternatieven te zoeken voor afhankelijkheden in je eigen projecten, zijn <a href="https://european-alternatives.eu/">european-alternatives.eu</a>, <a href="https://euro-stack.com/">euro-stack.com</a>, of <a href="https://alternativeto.net/">alternativeto.net</a> goede startpunten. Tot slot: digitale soevereiniteit is een <em>team effort</em>, voel je daarom vrij om andere bronnen, projecten, of interessante links te delen in de commentaren hieronder!</p>



<p>______________________</p>



<p><em>Dit is een ingezonden bijdrage van Joachim Ganseman, IT consultant bij Smals Research. Dit artikel werd geschreven in eigen naam en neemt geen standpunt in namens Smals.</em></p>


]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Voorbij aan REST: Event-Driven APIs</title>
		<link>https://www.smalsresearch.be/event-driven-apis/</link>
		
		<dc:creator><![CDATA[Koen Vanderkimpen]]></dc:creator>
		<pubDate>Tue, 30 Nov 2021 10:23:22 +0000</pubDate>
				<category><![CDATA[[NL]]]></category>
		<category><![CDATA[Blog post]]></category>
		<category><![CDATA[API]]></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[methodology]]></category>
		<category><![CDATA[reactive]]></category>
		<category><![CDATA[Resilience]]></category>
		<category><![CDATA[rest]]></category>
		<category><![CDATA[Software architectures]]></category>
		<category><![CDATA[software engineering]]></category>
		<category><![CDATA[standards]]></category>
		<category><![CDATA[vortex]]></category>
		<guid isPermaLink="false">/?p=16655</guid>

					<description><![CDATA[We hadden het op deze blog reeds uitvoerig over het gebruik van APIs als bouwsteen voor herbruikbare software. RESTful APIs hebben uiteraard heel wat voordelen, maar toch moeten we opletten dat we ze niet altijd en overal gaan inzetten. Er zijn namelijk ook nadelen verbonden aan deze manier van werken. Met deze blog willen we [&#8230;]]]></description>
										<content:encoded><![CDATA[
<div class="wp-block-image"><figure class="alignleft size-full is-resized"><a href="/wp-content/uploads/2021/11/EventAPI-1.png"><img decoding="async" src="/wp-content/uploads/2021/11/EventAPI-1.png" alt="" class="wp-image-16720" width="179" height="179" srcset="https://www.smalsresearch.be/wp-content/uploads/2021/11/EventAPI-1.png 240w, https://www.smalsresearch.be/wp-content/uploads/2021/11/EventAPI-1-150x150.png 150w" sizes="(max-width: 179px) 100vw, 179px" /></a></figure></div>



<p class="justify-text">We hadden het op deze blog reeds uitvoerig over het gebruik van <a href="/the_api_event/" data-type="post" data-id="15137">APIs als bouwsteen</a> voor <a href="/hergebruik-de-dos-en-donts/" data-type="post" data-id="13002">herbruikbare software</a>. <a href="/data-centric-it-met-rest/" data-type="post" data-id="9535">RESTful APIs</a> hebben uiteraard heel wat voordelen, maar toch moeten we opletten dat we ze niet altijd en overal gaan inzetten. Er zijn namelijk ook nadelen verbonden aan deze manier van werken. Met deze blog willen we er op wijzen dat asynchrone, <a href="/het-event-als-leidend-voorwerp-in-software-engineering/" data-type="post" data-id="8942">Event-Driven communicatie</a> tussen de systemen soms een veel beter resultaat oplevert, dan het zuivere gebruik van RESTful APIs.</p>



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



<h2 class="wp-block-heading">REST: de gouden standaard</h2>



<p class="justify-text">We hebben er zelf reeds enkele malen op gehamerd: <a href="/groei-van-rest-json-standaarden-voor-identity-management/" data-type="post" data-id="2327">RESTful APIs zijn al jaren de de facto standaard</a> voor de communicatie tussen services en hebben ons tal van voordelen gebracht. Zo maken ze het b.v. eenvoudig om diensten te kunnen ontwikkelen op een technologie-agnostische manier, zolang de API maar goed gestandaardiseerd is. Een REST API geeft je ook rechtstreekse controle over wat een service voor jou doet en laat toe om <a href="/newsql-een-upgrade-voor-je-oude-database/" data-type="post" data-id="13610">gedistribueerde transacties</a> uit te voeren.</p>



<p class="justify-text">Het belangrijkste voordeel van REST is dat de technologie heel goed ingeburgerd en breed geaccepteerd is. Het is daardoor makkelijk om ontwikkelaars te vinden die ermee om kunnen gaan. Ondertussen zijn er ook tal van goede raamwerken rond gebouwd en ook standaarden voor de definitie en omschrijving van APIs, waardoor RESTful APIs de ultieme <a href="/hergebruik-de-dos-en-donts/" data-type="post" data-id="13002">bouwstenen van herbruikbaarheid</a> zijn geworden.</p>



<p class="justify-text">Het gevaar is echter dat RESTful APIs zó nuttig zijn, dat ze als een gouden hamer gaan worden gebruikt: deze RESTful hamer werkt zo goed, dat elk project en elk probleem als een spijker wordt beschouwd. Kortom, de technologie wordt steevast toegepast, daar waar soms andere keuzes een betere oplossing kunnen vormen. Er zijn namelijk een aantal nadelen verbonden aan een aanpak enkel en alleen gebaseerd op APIs&#8230;</p>



<h2 class="wp-block-heading">De pure API aanpak</h2>



<p class="justify-text">Wanneer we tegenwoordig <a href="/architecturale-evoluties-deel-1/" data-type="post" data-id="11434">software ontwikkelen</a>, zullen we dit niet meer monolitihisch doen. Om de beschikbaarheid te verhogen en om elastisch schaalbare diensten te bouwen, zullen we de functionaliteit zo goed mogelijk verdelen over een aantal <a href="/van-n-tier-naar-microservices/" data-type="post" data-id="9702">zo klein mogelijke services, mogelijks zelfs microservices</a>. Deze zullen dan samen, onderling communicerend, alle functionaliteit voor een applicatie, of meerdere applicaties, implementeren. Bij een enigszins naïeve aanpak zal men al deze communicatie eenvoudigweg voorzien d.m.v. het gebruik van RESTful APIs, en zal elke dienst de andere diensten synchroon oproepen wanneer deze de functionaliteit ervan nodig heeft.</p>



<p class="justify-text">Voor alle duidelijkheid: een synchrone oproep is een oproep die onmiddellijk antwoord verwacht van de tegenpartij. Een asynchroon bericht is éénrichtingsverkeer (al kan er &#8211; later &#8211; wel een antwoord komen in de vorm van een ander asynchroon bericht; het verschil is dat de eerste partij niet wacht op een antwoord en gewoon zijn werk verder zet).</p>



<div class="wp-block-image"><figure class="aligncenter size-full"><a href="/wp-content/uploads/2021/11/PureApi-1.png"><img fetchpriority="high" decoding="async" width="703" height="368" src="/wp-content/uploads/2021/11/PureApi-1.png" alt="" class="wp-image-16673" srcset="https://www.smalsresearch.be/wp-content/uploads/2021/11/PureApi-1.png 703w, https://www.smalsresearch.be/wp-content/uploads/2021/11/PureApi-1-300x157.png 300w" sizes="(max-width: 703px) 100vw, 703px" /></a><figcaption>Figuur 1: De Webstore, met enkel synchrone communicatie (via APIs) tussen microservices.</figcaption></figure></div>



<p class="justify-text">Laten we het voorbeeld in Figuur 1 bespreken: Het betreft een webwinkel, opgebouwd via een microservices aanpak, waarbij alle microservices met elkaar communiceren via hun APIs. In de figuur staan 14 point-to-point afhankelijkheden; we zullen deze overlopen aan de hand van een typisch scenario. </p>



<ol class="justify-text wp-block-list"><li>De gebruiker logt in (REST call van Webstore Site naar Customer voor de gebruikersgegevens)</li><li>Customer doet ook een call naar Cart om een eerder opgeslagen winkelkarretje in te laden</li><li>De gebruiker winkelt: calls naar Catalog (query) en calls naar Cart (update)</li><li>Op zijn beurt zal Catalog de Inventory service aanroepen om te zien wat voorradig is</li><li>De gebruiker wil afrekenen: call van Site naar Checkout</li><li>Checkout roept Customer en Cart op, om de adresgegevens van de klant in te laden en de inhoud van het karretje</li><li>Call van Checkout naar Shipping voor de verzendingskost</li><li>Achter de schermen roept Shipping hiertoe mogelijks een externe API op van de koerier</li><li>De betaling wordt gestart: call van Checkout naar Payment</li><li>Payment roept Customer op voor de opgeslagen betalingsgegevens</li><li>Na de betaling werkt de Checkout module het order af met een Call naar Shipping en naar Inventory</li><li>Ook Orders krijgt een call om het afgewerkte order op te slaan</li><li>De klant kijkt zijn bestellingen nog eens na: call van Customer naar Orders</li></ol>



<p class="justify-text">Zoals we kunnen zien heeft de microservices approach al een<a href="/architecturale-evoluties-deel-2/" data-type="post" data-id="11475"> voordeel tegenover de monolithische aanpak</a>: er mogen een paar services plat zijn, en mensen kunnen toch winkelen (zonder in te loggen zijn enkel cart, catalog en eventueel inventory nodig). Enkel tijdens een checkout zijn zowat alle services nodig (behalve de catalog).</p>



<p class="justify-text">Dit laatste blijft natuurlijk een probleem: door de vele onderlinge afhankelijkheden tussen de services, kunnen er cascades ontstaan: de onbeschikbaarheid van één service kan de werking van vele andere verstoren en zelfs verhinderen. Daarnaast moet men met al deze afhankelijkheden rekening houden wanneer men een nieuwe versie van een service wil bouwen. Verder is het ook zo dat we van alles impliciet een transactie maken (en als één stap faalt, faalt de hele transactie), terwijl dit misschien niet noodzakelijk is op business niveau. Dit transactionele aspect verplicht ons ook om telkens alle stappen opnieuw te doorlopen in geval van een fout, en kan er, indien er zaken weggeschreven worden tijdens de transactie, ook voor zorgen dat we zaken terug actief ongedaan moeten maken indien er een fout is opgetreden, om te vermijden dat de achterliggende <a href="/data-quality-anomalies-transactions-management-system-atms-prototype-work-in-progress/" data-type="post" data-id="14866">data corrupt wordt</a>.</p>



<p class="justify-text">De directe koppeling tussen de vele diensten heeft nog een ander gevolg: de onafhankelijkheid van de microservices komt in het gedrang. Het hoofddoel van een microservices aanpak, is dat men een collectie onafhankelijk opererende diensten verkrijgt, die afzonderlijk van elkaar kunnen opereren en evolueren. Hoe sterker ze echter gekoppeld zijn aan elkaar, hoe minder groot deze onafhankelijkheid wordt.</p>



<h2 class="wp-block-heading">Richting asynchrone communicatie</h2>



<p class="justify-text">We hebben reeds in vorige blogs besproken wat <a href="/geavanceerd-event-driven-engineering/" data-type="post" data-id="9041">Event-Driven Architecture (EDA) is en welke geavanceerde toepassingen er bestaan</a>, gebaseerd op dat paradigma. Kort herhaald, gaat het hier over asynchrone communicatie tussen toepassingen, doordat ze events publiceren en zich op events van andere systemen kunnen abonneren. Dit zorgt voor een extra indirectie tussen de toepassingen, en op die manier kunnen ze onafhankelijker van elkaar opereren. Een EDA systeem is ook erg uitbreidbaar: je kan altijd extra services toevoegen aan het geheel, die reeds bestaande events gaan gebruiken om nieuwe functionaliteit te implementeren, en die op hun beurt nieuwe events kunnen publiceren. <a href="/architecturale-evoluties-deel-2/" data-type="post" data-id="11475" target="_blank" rel="noreferrer noopener">Op die manier krijg je een groeiend ecosysteem van nuttige Events, net zoals je ook met APIs een ecosysteem kan ontwikkelen</a>.</p>



<p class="justify-text">De wereld heeft echter niet stilgestaan sinds onze vorige posts over EDA en ondertussen zijn er op technologisch vlak al heel wat interessante evoluties bijgekomen. Het is nu zelfs vrij gemakkelijk geworden om ook de front-ends van applicaties aan te sluiten op een Event-Driven omgeving. Je kan je natuurlijk gaan afvragen of er ondertussen ook nog geen standaarden bestaan voor EDA, op basis waarvan we herbruikbare zaken kunnen gaan ontwikkelen, en die zijn er ook stilaan. Het voornaamste wat we kunnen doen om EDA goed te kunnen gebruiken, is echter eerst en vooral ze als &#8220;first class citizen&#8221; gaan beschouwen vanaf de business analyse, en niet langer als een louter technische vernuftigheid die een aantal problemen in systemen kan oplossen.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p>Beschouw Events als First Class Citizen: neem ze mee in je visie en vanaf de business analyse.</p></blockquote>



<p class="justify-text">De meeste business domeinen zijn intrinsiek Event-gebaseerd. Denk maar aan een aangifte die binnenkomt, een betaling die moet worden gedaan, een taak die is uitgevoerd, &#8230; Dit zijn allemaal &#8220;gebeurtenissen&#8221; die in de business zelf voorkomen en aldus <em>business events</em>. Eén van de taken die zou moeten gebeuren aan de start van elke analyse, is de tijd nemen om aan <strong><a href="/radar-2021/business-radar-2021/" data-type="page" data-id="15411">Event Storming</a></strong> te doen: een soort brainstorm naar alle business events die zich in een bepaald process of domein afspelen. Daarna kan de functionele analyse hier mee verder gaan om te bepalen hoe de communicatie tussen de te ontwikkelen systemen zich zal afspelen en hoe de business processen zullen worden geïmplementeerd.</p>



<p class="justify-text">Op IT vlak zullen de business events, en daarbijkomend waarschijnlijk nog een aantal eerder technische events, zich dan uiteindelijk vertalen in de events die over de bus worden gestuurd en deel kunnen gaan uitmaken van een ecosysteem van herbruikbare events. Daartoe is het ook echter van belang dat de events, net zoals herbruikbare APIs, <em>gecatalogiseerd en goed gedocumenteerd</em> worden, zodat er maximaal voordeel uit het bestaan van deze events kan worden gedistilleerd in nieuwe toepassingen. Wat we dus willen zeggen met &#8220;first class citizen&#8221;, is dat events op dezelfde manier zouden moeten worden behandeld als APIs, in een Event-first strategie. We willen echter niet afdoen van APIs, daarom wordt het een <strong>API+Event-first strategie</strong>.</p>



<h3 class="wp-block-heading">Standaarden voor Asynchrone APIs</h3>



<p>Zoals daarnet aangehaald, zijn er op technisch vlak dus ondertussen verschillende goed ingeburgerde technologieën om asynchrone communicatie te voorzien tussen systemen, en waarmee men dus Events kan ondersteunen. <a href="/de-stille-cloud-machtsgreep/" data-type="post" data-id="5543">De Cloud</a> heeft deze evolutie enorm versneld. We sommen er een aantal op:</p>



<div class="wp-block-image"><figure class="alignright size-full"><a href="https://www.asyncapi.com/blog/openapi-vs-asyncapi-burning-questions"><img decoding="async" width="296" height="235" src="/wp-content/uploads/2021/11/asyncopenapi.jpg" alt="" class="wp-image-16706"/></a><figcaption>Figuur 2: AsyncAPI, de veelbelovende industriestandaard voor Event Driven APIs, vult perfect OpenAPI aan (de standaard voor REST).</figcaption></figure></div>



<ul class="justify-text wp-block-list"><li><strong>Webhooks / REST hooks</strong>. <a href="https://zapier.com/blog/what-are-webhooks/">Ook wel reverse APIs genoemd</a>. Via webhooks kan men nog steeds RESTful werken: er wordt een API aangeboden waar een client een adres van een zogenaamde &#8220;callback API&#8221; kan gaan posten. Later zal de server via dit adres de client kunnen antwoorden. Het voordeel van deze manier van werken is dat men ze op kan laten gaan in de RESTful aanpak. Het nadeel is dat er nog steeds van een synchrone connectie sprake is op het moment van de registratie en op het moment van de callback. Daarnaast is de performantie en veiligheid ook minder dan met de andere methodes.</li><li><strong>Websockets</strong>. Dit is het <a href="https://en.wikipedia.org/wiki/WebSocket">hippe nieuwe protocol voor de browser</a>, waarmee deze een full-duplex kanaal met een webserver kan onderhouden. Full-duplex will zeggen dat men in beide richtingen kan communiceren en dat eender welke kant de communicatie kan starten. Op deze manier kan men dus een webtoepassing in de browser live updaten via events die van de server komen. Deze technologie is dus specifiek nuttig voor het UI-gedeelte van een gedistribueerd systeem: ze zorgt ervoor dat de asynchrone communicatie tot bij de eindgebruiker kan worden gebracht.</li><li><strong>Server Side Events</strong>. Dit is <a href="https://www.w3schools.com/html/html5_serversentevents.asp">een specificatie ingebakken</a> in <a href="/html-5-een-rijke-ervaring-zonder-plugins/" data-type="post" data-id="1426">HTML 5</a>, en daardoor compatibeler dan het nieuwere websockets. Het betreft echter éénrichtingsverkeer, maar dan van de server naar de clients, waardoor men dus een eenvoudigere manier heeft om toch events naar een browser te sturen.</li><li><strong>GraphQL</strong>. Een vrij recente query taal om APIs te beschrijven en bijhorende runtime. Deze technologie wordt gepromoot als meer gericht op de client dan op de server. Dit is omdat de client precies kan uitdrukken wat hij van de server wil krijgen, in plaats van enkel gebruik te kunnen maken van op voorhand vastgelegde zaken, zoals in REST. <a rel="noreferrer noopener" href="https://www.mobilelive.ca/blog/graphql-vs-rest-what-you-didnt-know/" target="_blank">Dit is dus in principe eerder een concurrent voor REST</a>. Je kan echter in GraphQL zogenaamde &#8220;subcriptions&#8221; aanmaken, waardoor de server je op de hoogte kan houden van een aantal zaken, en aldus is ook hier sprake van asycnhrone communicatie waarmee men aan EDA kan doen.</li><li><strong>gRPC</strong>. Dit is een raamwerk dat wordt gepromoot door de Cloud Native Computing Foundation (CNCF). Het is bedoeld om performant Remote Procedure Calls (RPCs) te kunnen maken en aldus eveneens een concurrent voor REST. <a href="https://grpc.io/">gRPC</a> bieft een streaming API aan (<a href="/de-reactive-hype/" data-type="post" data-id="14280">erg handig bij gebruik van de Reactive principes</a>), waarmee ook asynchrone stromen van berichten (en dus ook Events) kunnen worden behandeld.</li><li><strong>CloudEvents</strong>. Ook dit is een <a href="https://cloudevents.io/">initiatief</a> van de &#8220;Serverless Working Group&#8221; van de CNCF. Het betreft een standaardisering van het beschrijven van events op Publisher niveau, waarbij men zich vooral richt op standaard manieren om de metadata te beschrijven. Een jaar geleden kwam versie 1.0.1 uit. Men werkt verder aan verschillende SDK&#8217;s voor talen en er zijn ook specificaties van hoe de standaard te koppelen aan bepaalde technologieën, zoals Event Brokers (de technologie achter de EventBus).</li><li><strong>AsyncAPI</strong>. <a href="https://www.asyncapi.com/">Dit initiatief is de industriestandaard aan het worden. AsyncAPI</a> doet voor EDA wat <a href="https://www.openapis.org/">OpenAPI</a> reeds doet voor RESTful APIs; de twee worden samen ondersteund door de Linux Foundation. Het betreft hier een specificatie van zowel de Events zelf, als de producers en consumers ervan, op een manier die door een computer kan worden verwerkt. Daardoor kan men dan automatisch goede documentatie genereren, aslook stubs voor code, die kan worden gebruikt in de systemen die met de Events zullen omgaan. Deze specificatie gaat veel verder dan CloudEvents, en trekt ook meer aandacht van developers. Ze zit ondertussen aan versie 2.2.0. Op dit moment zijn er ook al verschillende technologieën ondersteund voor de effectieve implementatie van de Events: o.a. Apache Kafka, AMQP, IBM MQ, MQTT, SNS, WebSockets, en JMS.</li></ul>



<p class="justify-text">Ondanks alle nieuwe ontwikkelingen op gebied van EDA, willen we hier echter niet gaan beweren dat alles nu Event-Driven moet worden, en al zeker niet dat we APIs zouden moeten afschaffen. Events zijn, evenmin as APIs, het antwoord op alles. Ook EDA heeft een aantal nadelen: de asynchrone communicatie inherent aan Events, zorgt ervoor dat systemen die events van elkaar willen gebruiken, op een bepaald niveau &#8220;Eventually Consistent&#8221; worden, en dus niet meer transactioneel zijn. Dit kan in principe voordelig zijn op een aantal punten, maar het zorgt ervoor dat het minder makkelijk is om erover te redeneren indien men gewend is dat alles ten allen tijde consistent wordt gehouden. Het zijn dus systemen die soms iets ingewikkelder in elkaar zitten en minder gemakkelijk te voorspellen zijn: je hebt, binnen één systeem, geen directe controle over wat er allemaal zal gebeuren als gevolg van een Event dat je de wereld instuurt (je hebt enkel controle over wat je kan doen met inkomende Events). Dit alles zorgt ervoor dat het niet altijd even gemakkelijk is om zulke (groepen) systemen te testen en debuggen, temeer omdat er ook minder veel mensen te vinden zijn die er ervaring mee hebben.</p>



<p class="justify-text">Maar, zoals reeds gezegd, EDA kan heel krachtig zijn, en leunt vaak sterk aan bij het business model. Het ideale antwoord over wat we nu best gebruiken, zal dus, zoals gewoonlijk, ergens in het midden liggen&#8230;</p>



<h2 class="wp-block-heading">De gebalanceerde aanpak: APIs plus Events</h2>



<p class="justify-text">Zoals we hebben aangetoond in de vorige sectie, heeft een Eventgedreven aanpak een aantal sterke pluspunten; niet in het minst een resiliënter systeem dat beter voorzien is op toekomstige aanpassingen en uitbreidingen en dus tot op business niveau agile is. Uiteraard zijn er ook een aantal beperkingen, en we gaan dus zeker geen pleidooi houden om vanaf nu alle services zuiver Event-driven te maken. Het antwoord zal een hybride aanpak zijn.</p>



<div class="wp-block-image"><figure class="aligncenter size-full"><a href="/wp-content/uploads/2021/11/hybrid.png"><img loading="lazy" decoding="async" width="855" height="422" src="/wp-content/uploads/2021/11/hybrid.png" alt="" class="wp-image-16681" srcset="https://www.smalsresearch.be/wp-content/uploads/2021/11/hybrid.png 855w, https://www.smalsresearch.be/wp-content/uploads/2021/11/hybrid-300x148.png 300w, https://www.smalsresearch.be/wp-content/uploads/2021/11/hybrid-768x379.png 768w" sizes="auto, (max-width: 855px) 100vw, 855px" /></a><figcaption>Figuur 3: De webstore, met een combinatie van synchrone API calls en asynchrone Events</figcaption></figure></div>



<p class="justify-text">We gaven vroeger al een <a href="/architecturale-evoluties-deel-2/" data-type="post" data-id="11475">een eerder abstract voorbeeld van hoe deze verschillende zaken kunnen worden gecombineerd in onze blogs</a>. Nu zullen we dit iets concreter maken: in figuur 3 overlopen we hetzelfde voorbeeld als dat van figuur 1, maar dan met een combinatie van API gebruik en Events.</p>



<ol class="justify-text wp-block-list"><li>De gebruiker logt in (API call naar Customer; &#8220;Login&#8221;-Event 1 )</li><li>De Cart Service ziet event 1 en verstuurt zelf een event met de vorige inhoud van het karretje (&#8220;Cart Updated&#8221;-Event 2 )</li><li>De front-end ziet event 2 en laat de kar-inhoud zien aan de gebruiker</li><li>De gebruiker winkelt (API calls naar Catalog; &#8220;Product Chosen&#8221;-Event 3 )</li><li>De Cart Service ziet event 3 en past het karretje aan (nogmaals &#8220;Cart Updated&#8221;-Event zoals 2, niet apart getoond)</li><li>Ook Checkout ziet de &#8220;Cart Updated&#8221; events en bewaart de aankopen (&#8220;Cart Updated&#8221;-Event zoals 2, niet getoond)</li><li>De gebruiker wil een checkout doen (API calls naar checkout en shipping, voor de verzendingskost)</li><li>De gebruiker bevestigt het order (API call naar checkout; &#8220;Order Confirmed&#8221;-Event 4 )</li><li>Event 4 wordt opgepikt door Cart (kar leegmaken) en Orders (order bewaren)</li><li>Event 4 wordt eveneens gezien door Inventory (Inventory wordt gereserveerd)</li><li>De gebruiker wordt ook omgeleid naar Payment en voert de betaling uit (API call naar payment)</li><li>Er gebeurt een succesvolle betaling (&#8220;Payment Received&#8221;-Event 5 )</li><li>De Orders Service ziet event 5 en stuurt zelf een event (&#8220;Order Ready-to-Pack&#8221;-Event 6 )</li><li>De Shipping Service vangt event 6 en regelt het versturen bij de koerier</li><li>Ook de Inventory service ziet event 6 (Inventory wordt finaal aangepast en pak-opdracht gaat naar magazijn)</li><li>De klant die zijn orders raadpleegt, kan dat nog via een API call (De Orders Service kunnen we via <a href="/geavanceerd-event-driven-engineering/" data-type="post" data-id="9041">CQRS</a> bouwen: het deel dat actief zaken verwerkt en business beslissingen neemt is volledig Event-Driven; een tweede component van de service observeert alle gerelateerde events en bouwt een resulterend relationeel model op, dat makkelijk kan worden gequeried)</li><li>Hier stopt het voorbeeld van Fig. 1, maar we zouden nog verder kunnen gaan: wanneer het pakket klaar staat, zal er opnieuw een event hiervoor zijn en kan de effectieve verzending gebeuren via de koerier. Daarna zijn er nog tracking events, enz.</li></ol>



<p class="justify-text">Een aantal extra opmerkingen betreffende deze manier van aanpakken:</p>



<ul class="justify-text wp-block-list"><li>In dit scenario zien we dat de front-end meer rechtstreeks gebruik maakt van een aantal achterliggende diensten, en er dus in principe van afhankelijk wordt. We moeten echter onthouden dat dit geen alles-of-niets afhankelijkheid is, zoals een aantal van de point-to-point verbindingen in het eerste scenario. De afhankelijkheid geldt enkel voor welbepaalde functionaliteiten, die afzonderlijk van elkaar onbeschikbaar kunnen zijn.</li><li>We hebben hier ook de mogelijkheid de betaling achteraf in orde te brengen indien de betaling zou mislukken of de Payment Service niet beschikbaar is. Shipping schiet pas in actie nadat het event &#8220;Payment Received&#8221; is gepasseerd. In beide scenario&#8217;s hebben we eventuele 3rd party API calls naar Betalingsfirma&#8217;s (b.v. PayPal) achterwege gelaten, wat een extra kans op falen introduceert. In het eerste scenario zou hierdoor de volledige transactie van de bestelling mislukken (hetgeen ook het geval is bij vele echt bestaande webshops, maar b.v. niet bij een geavanceerde webshop als Amazon, waar men de betaling asynchroon achter de schermen kan regelen).</li><li>Zowel de Cart als de Checkout service houden een winkelmandje bij, maar toch verschillen ze. De Cart service is verantwoordelijk voor de opslag van het mandje overheen verschillende gebruikersessies (en kan eventueel nog wishlists en favorieten en dergelijke functionaliteiten aanbieden). De Checkout service houdt het enkel gedurende één sessie bij tot het een effectief order wordt, en voegt de bestemming en de verzendingskost toe. We zouden hier echter kunnen overwegen om de checkout functies ook in Cart onder te brengen.</li><li>Merk op dat we in geen van beide scenario&#8217;s (zuivere API aanpak en hybride) een laatste check van de inventory doen bij het bestellen. Indien echt nodig op business niveau, zouden we dit in beide gevallen synchroon (en transactioneel) doen (met gevolgen voor de resiliency en klantentevredenheid). We kiezen er echter voor op business niveau dit niet te doen en een eventueel stocktekort op business niveau aan te pakken (<a href="/eventual-consistency-1/" data-type="post" data-id="15544">zie het voorbeeld in de blogpost over Eventual Consistency</a>).</li><li>Om de afhankelijkheid van de externe shipping API te reduceren, kunnen we er in beide scenario&#8217;s voor zorgen dat we de prijzen cachen, of zelf op business niveau vastleggen zonder dit dynamisch op te vragen bij de koerier. Op die manier bestaat de afhankelijkheid enkel op het moment van het effectieve aanmaken van de verzending (en later bij het traceren; wat in principe ook best Event-Driven is, maar in externe APIs is dit vaak niet voorzien).</li></ul>



<p class="justify-text">Zoals we kunnen zien aan de hand van dit voorbeeld, kan een hybride aanpak interessante voordelen hebben: de services zijn heel wat minder sterk afhankelijk van elkaar en zijn zelfstandiger. Men kan kiezen op welke events te reageren en welke events uit te sturen, zonder een API te wijzigen; de service kan op deze manier makkelijker evolueren of verplaatst worden. Er is ook een verbeterde resiliëntie: wanneer een service uitvalt, blijven een aantal events onbehandeld. Maar wanneer de service terug online komt, kan dit werk worden ingehaald en gaat het proces gewoon verder. Er is dus sprake van tijdelijke degradatie en uitstel, maar niet van verloren gegane transacties of een cascade van falen. Men moet er wel op letten dat de EventBus een hoog niveau van beschikbaarheid heeft, net zoals de <a href="/productiviteitsverhoging-met-paas/" data-type="post" data-id="5995">andere middleware platformen</a> waar men de applicaties op bouwt, en de onderliggende infrastructuur.</p>



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



<p class="justify-text">Een Software Development strategie gebaseerd op het bouwen van RESTful APIs is een goed startpunt. We mogen ons echter niet blindstaren op de voordelen van REST en alleen maar van deze oplossing gebruik maken.</p>



<p class="justify-text">Een Eventgedreven aanpak heeft een aantal sterke pluspunten; niet in het minst een resiliënter systeem dat beter voorzien is op toekomstige aanpassingen en uitbreidingen, en dus tot op business niveau agile is.</p>



<p class="justify-text">In een optimaal gebalanceerde Softwareontwikkelingsstrategie is dus zeker ook ruimte voorzien voor asynchrone communicatie en eventual consistency, door gebruik te maken van Event Driven Architecture. Het is dan ook van groot belang hiermee rekening te houden vanaf het vormen van een visie, tijdens de business analyse en daarna doorheen het hele ontwikkelingsproces.</p>


]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Reactive: het Akka framework</title>
		<link>https://www.smalsresearch.be/reactive-het-akka-framework/</link>
		
		<dc:creator><![CDATA[Koen Vanderkimpen]]></dc:creator>
		<pubDate>Tue, 07 Sep 2021 11:59:31 +0000</pubDate>
				<category><![CDATA[[NL]]]></category>
		<category><![CDATA[Blog post]]></category>
		<category><![CDATA[akka]]></category>
		<category><![CDATA[aktors]]></category>
		<category><![CDATA[cloud computing]]></category>
		<category><![CDATA[EDA]]></category>
		<category><![CDATA[Event]]></category>
		<category><![CDATA[methodology]]></category>
		<category><![CDATA[multithreading]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[reactive]]></category>
		<category><![CDATA[Resilience]]></category>
		<category><![CDATA[Software architectures]]></category>
		<category><![CDATA[software engineering]]></category>
		<guid isPermaLink="false">/?p=16446</guid>

					<description><![CDATA[In een vorige blog gaven we reeds een uitvoerige inleiding van het &#8220;Reactive&#8221; paradigma. Vermits dit toch wel een belangrijke en invloedrijke zaak geworden is binnen de developer wereld, lijkt het ons nuttig om hier op terug te komen en wat dieper in te gaan op een voorbeeld van een Reactive framework: het Akka framework, [&#8230;]]]></description>
										<content:encoded><![CDATA[
<div class="wp-block-image"><figure class="alignleft is-resized"><img loading="lazy" decoding="async" src="/wp-content/uploads/2021/09/reactive2-edited-1.png" alt="" class="wp-image-16466" width="150" height="150" srcset="https://www.smalsresearch.be/wp-content/uploads/2021/09/reactive2-edited-1.png 155w, https://www.smalsresearch.be/wp-content/uploads/2021/09/reactive2-edited-1-150x150.png 150w" sizes="auto, (max-width: 150px) 100vw, 150px" /></figure></div>



<p class="justify-text">In een <a href="/de-reactive-hype/" data-type="post" data-id="14280">vorige blog</a> gaven we reeds een uitvoerige inleiding van het &#8220;Reactive&#8221; paradigma. Vermits dit toch wel een belangrijke en invloedrijke zaak geworden is binnen de developer wereld, lijkt het ons nuttig om hier op terug te komen en wat dieper in te gaan op een voorbeeld van een Reactive framework: het <em>Akka framework</em>, één van de pioniers binnen de Reactive beweging.</p>



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



<h2 class="wp-block-heading">Wat is Reactive alweer?</h2>



<p class="justify-text"><a href="https://www.reactivemanifesto.org/">Reactieve systemen</a> worden gezien als één van de belangrijkste ontwikkelingen om systemen responsiever te maken voor meer veeleisende eindgebruikers, en om overweg te kunnen met de grote hoeveelheid data die moderne systemen overspoelt. Zogenaamde &#8220;wearables&#8221; en andere <a href="/er-zit-een-hacker-in-mijn-diepvries/" data-type="post" data-id="6757">IoT zaken</a> kunnen bijvoorbeeld een constante stroom aan data genereren. Wanneer men dan de data van vele honderden van zulke devices moet verwerken, komen traditionele systemen vaak in de problemen. Maar ook voor &#8216;gewone&#8217; toepassingen kan deze technologie heil brengen, doordat de responsiviteit en resiliëntie ook kunnen worden verhoogd.</p>



<figure class="wp-block-image size-large"><a href="/wp-content/uploads/2021/09/Reactive-Manifesto.png"><img loading="lazy" decoding="async" width="1024" height="416" src="/wp-content/uploads/2021/09/Reactive-Manifesto-1024x416.png" alt="" class="wp-image-16462" srcset="https://www.smalsresearch.be/wp-content/uploads/2021/09/Reactive-Manifesto-1024x416.png 1024w, https://www.smalsresearch.be/wp-content/uploads/2021/09/Reactive-Manifesto-300x122.png 300w, https://www.smalsresearch.be/wp-content/uploads/2021/09/Reactive-Manifesto-768x312.png 768w, https://www.smalsresearch.be/wp-content/uploads/2021/09/Reactive-Manifesto.png 1235w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a><figcaption>Figuur 1: De vier basiseigenschappen van Reactieve systemen en hoe ze zich tot elkaar verhouden.</figcaption></figure>



<p class="justify-text">Aan de grondslag van Reactive ligt het feit dat het &#8220;message driven&#8221; is (Zie Fig. 1). Men zal een systeem bouwen aan de hand van een aantal met elkaar communicerende subsystemen die berichten zullen uitwisselen. Dit kan zowel rechtstreeks als via het <a href="/het-event-als-leidend-voorwerp-in-software-engineering/" data-type="post" data-id="8942">publish/subscribe mechanisme van Events</a>. Deze communicatie is altijd inherent asynchroon. Men weet niet wanneer er op een bericht zal worden gereageerd en men gaat er ook niet expliciet op wachten. Deze vorm van communicatie tussen componenten zorgt ervoor dat ze losjes gekoppeld zijn en locatietransparant. Dit &#8220;message driven&#8221; fundament leidt verder tot verschillende voordelen.</p>



<p class="justify-text">Eerst en vooral zorgt dit voor resiliëntie. Asynchrone communicatie laat toe om componenten veel onafhankelijker van elkaar te laten opereren dan <a href="/data-centric-it-met-rest/" data-type="post" data-id="9535">synchrone communicatie</a>, wat ervoor kan zorgen dat één component verder kan indien de andere (tijdelijk) faalt. De manier waarop berichten behandeld worden bij Reactive maakt ook van foutmeldingen gewone berichten; men behandelt deze als &#8216;first class citizen&#8217;, en niet zozeer als een uitzondering. Het omgaan met fouten en met niet-werkende componenten wordt dan als van nature mee opgenomen in het programmeren van zo&#8217;n systeem.</p>



<p class="justify-text">Ten tweede stijgt ook de elasticiteit. Bij reactieve systemen is de berichtenstroom heel belangrijk. Men kan deze gaan monitoren en ingrijpen wanneer deze sterk in volume toe- of afneemt, en snel reageren door meer componenten op te starten (of te stoppen), om deze berichten af te handelen. Ook het feit dat het systeem bestaat uit een heel aantal samenwerkende componenten, en niet afhankelijk is van een centrale bottleneck, komt de schaalbaarheid ten goede.</p>



<p class="justify-text">Ten slotte moet dit alles samen zorgen voor een verhoogde responsiviteit. Men zorgt ervoor dat men tijdig en vooral binnen een bepaalde tijd kan reageren op alle binnenkomende berichten, voor een consistente Quality of Service.</p>



<h2 class="wp-block-heading">Het Akka raamwerk</h2>



<p class="justify-text"><a href="https://akka.io/">Akka</a> zag het licht in 2009 als één van de eerste raamwerken die het principe van het Actor programmeermodel naar een mainstream server programmeertaal bracht. Het is beschikbaar zowel voor de programmeertaal <a href="https://www.scala-lang.org/">Scala</a> (een taal die werkt op de JVM), waar het in principe voor is gebouwd, als voor Java (waar het iets meer boilerplate code vergt). Tegenwoordig maakt het deel uit van het <a href="https://www.lightbend.com/">Lightbend</a> platform, samen met het <a href="https://www.playframework.com/">Play raamwerk</a> en de taal Scala.</p>



<p class="justify-text">Actoren kan men zien als kleine onafhankelijke machines binnen een softwaresysteem. Ze communiceren enkel met de buitenwereld (en dus met andere actors) via asynchrone berichten. Wanneer een actor een bericht krijgt, kan deze een aantal verschillende dingen doen: lokale code uitvoeren, zijn eigen toestand veranderen, zelf berichten uitsturen, andere actoren creëren, en beslissen hoe op het volgende bericht zal worden gereageerd. Een actor leeft dus volledig binnen zijn eigen executie-stack. Men kan deze dus beschouwen als een apart proces of een aparte thread, maar in een raamwerk als Akka is het mogelijk om deze veel efficiënter te instantiëren dan dat (zelfs threads zijn nog relatieve zwaargewichten, terwijl een actor in akka maar een paar honderd bytes hoeft in te nemen; één thread zal dan ook typisch vele actors tegelijk aansturen). Daarnaast kan men er voor zorgen dat een actor een andere actor als &#8220;supervisor&#8221; krijgt. Deze zal in het oog houden of de gesuperviseerde actor faalt, en kan dus indien nodig gepast reageren.</p>



<p class="justify-text">Eén van de meest interessante zaken aan actors is dat het voor de programmeur transparant kan gemaakt worden waar een actor zich bevindt: het kan een andere actor binnen hetzelfde proces zijn, een actor binnen een ander proces op dezelfde machine, of een actor aan de andere kant van het internet: de programmeur kan deze op dezelfde manier behandelen. Dit is één van de eigenschappen die Akka <em><a href="https://www.cncf.io/">Cloud Native</a></em> maakt: het is een technologie gebouwd vóór de Cloud, waarmee men optimaal kan gebruik maken van de eigenschappen van de Cloud.</p>



<p class="justify-text">Naast de &#8216;core&#8217; Akka bibliotheek, bestaan er ook nog heel wat modulaire uitbreidingen, zoals b.v. voor het werken met streams, persistentie, webservers en http, en allerlei integraties, zoals b.v. met het Play framework, of met Apache Kafka. Ook RESTful APIs worden ondersteund.</p>



<h2 class="wp-block-heading">Een voorbeeld</h2>



<p class="justify-text">In de code duiken zou een beetje te technisch worden, maar we kunnen toch illustreren wat men met deze manier van programmeren kan bereiken aan de hand van een eenvoudig voorbeeld.</p>



<p class="justify-text">In onderstaande figuur zie je een tekening van een aantal actoren in een boekenwinkel systeem en de berichten die ze elkaar sturen: er zijn klanten, de boekenwinkel zelf, en bedienden (die boeken opsturen). Het systeem zal als volgt werken: klanten sturen bestellingen naar de winkel; deze zal de bestellingen verder doorgeven aan een bediende. Deze hebben wat tijd nodig om een bestelling af te handelen, dus er zijn er meerdere, om meer bestellingen aan te kunnen. Hoe de winkel kiest welke taak aan welke bediende te geven, zouden we op verschillende manieren kunnen oplossen (b.v. &#8220;neem een willekeurige vrije bediende&#8221;), maar zoveel detail laten we hier niet zien.</p>



<figure class="wp-block-image size-large"><a href="/wp-content/uploads/2021/09/bookstore-default.png"><img loading="lazy" decoding="async" width="1024" height="485" src="/wp-content/uploads/2021/09/bookstore-default-1024x485.png" alt="" class="wp-image-16459" srcset="https://www.smalsresearch.be/wp-content/uploads/2021/09/bookstore-default-1024x485.png 1024w, https://www.smalsresearch.be/wp-content/uploads/2021/09/bookstore-default-300x142.png 300w, https://www.smalsresearch.be/wp-content/uploads/2021/09/bookstore-default-768x363.png 768w, https://www.smalsresearch.be/wp-content/uploads/2021/09/bookstore-default.png 1192w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a><figcaption>Figuur 2: De boekenwinkel aktors. Bij de standaard werking zullen bestellingen van klanten doorgegeven worden aan een pool van bediendes. Wanneer een boek niet kan worden geleverd, krijgt de klant in de plaats ervan een cadeaubon.</figcaption></figure>



<p class="justify-text">De bediende die een bestelling krijgt wordt &#8220;bezig&#8221; (een andere toestand dan &#8220;vrij&#8221;) en zal uiteindelijk een boek terugsturen naar de klant (in het geval van het IT systeem dat dit systeem modelleert, kan dit b.v. een bericht zijn met de tracking code van het pakket). Daarna wordt de bediende terug &#8220;vrij&#8221;.</p>



<p class="justify-text">Soms gaat er echter iets mis met de bestelling: de bediende vindt b.v. het boek niet dat de klant wil. In dat geval stuurt deze een verontschuldigend bericht terug naar de klant, met een cadeaubon. Als er echter te vaak van deze dingen gebeuren, krijgt een bediende teveel stress en geeft deze er de brui aan (zijn actor gaat in error-modus). Dit geeft dus een foutmelding, die geëscaleerd wordt naar de supervisor van de bediende, in dit geval de winkel (zie Fig. 3). Deze zal dan moeten beslissen wat er met de fout gebeurt: we kiezen ervoor om de bestelling aan een andere bediende te geven en de gestresseerde bediende een paar dagen &#8220;verlof&#8221; te geven (waarna zijn actor terug in toestand &#8220;vrij&#8221; zal komen).</p>



<figure class="wp-block-image size-large"><a href="/wp-content/uploads/2021/09/bookstore-error.png"><img loading="lazy" decoding="async" width="1024" height="722" src="/wp-content/uploads/2021/09/bookstore-error-1024x722.png" alt="" class="wp-image-16460" srcset="https://www.smalsresearch.be/wp-content/uploads/2021/09/bookstore-error-1024x722.png 1024w, https://www.smalsresearch.be/wp-content/uploads/2021/09/bookstore-error-300x211.png 300w, https://www.smalsresearch.be/wp-content/uploads/2021/09/bookstore-error-768x541.png 768w, https://www.smalsresearch.be/wp-content/uploads/2021/09/bookstore-error.png 1121w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a><figcaption>Figuur 3: Illustratie van de verschillende toestanden waarin een bediende zich kan bevinden, plus: wat gebeurt er indien een bediende er de brui aan geeft tijdens een bestelling (Error)? De bediende krijgt verlof van de winkel en de bestelling wordt doorgegeven aan een andere bediende.</figcaption></figure>



<p class="justify-text">Dit voorbeeld illustreert het principe van resiliëntie, gebruikmakende van actoren: de fout wordt niet speciaal als fout behandeld, maar als een bericht naar de winkel, die het probleem op dat niveau kan oplossen. Er wordt ook niet alleen gezorgd voor fout-tolerantie, maar ook voor veerkracht: uiteindelijk zal de foutieve actor worden hersteld en terug ter beschikking komen van de pool. Deze veerkracht maakt net het verschil tussen gewone fout-tolerantie en echte resiliëntie.</p>



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



<p>De meeste bestaande raamwerken voor Reactive systemen focussen zich op het gebruik van streams van berichten/events, en op hoe deze zo efficiënt mogelijk te behandelen. Een raamwerk zoals Akka doet het net iets anders, door gebruik te maken van het actor paradigma. Dit biedt een verfrissende kijk op multi-threaded programming, en kan het bouwen van sommige systemen net iets gemakkelijker maken.</p>



<p class="justify-text">Het gebruik van actoren verhoogt in ieder geval het niveau van abstractie wanneer men over parallellisme en multi-threading probeert te redeneren, een oefening die berucht is voor zijn moeilijkheid.</p>



<p class="justify-text">Actors lijken erg nuttig voor het modelleren van zaken die een toestand en een gedrag vertonen in de echte wereld, zoals mensen, machines, of bedrijven. In het algemeen zijn ze goed inzetbaar wanneer je systeem goed decomposeerbaar is in een set van onafhankelijke taken, of een set van taken die een bepaalde workflow volgt. Ten slotte zijn ze ook erg geschikt voor het programmeren van <a href="/geavanceerd-event-driven-engineering/" data-type="post" data-id="9041">Event Driven systemen</a>.</p>



<p></p>


]]></content:encoded>
					
		
		
			</item>
		<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 loading="lazy" 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="auto, (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 loading="lazy" 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="auto, (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>De &#8220;Reactive&#8221; hype</title>
		<link>https://www.smalsresearch.be/de-reactive-hype/</link>
		
		<dc:creator><![CDATA[Koen Vanderkimpen]]></dc:creator>
		<pubDate>Wed, 11 Mar 2020 09:45:00 +0000</pubDate>
				<category><![CDATA[[NL]]]></category>
		<category><![CDATA[Blog post]]></category>
		<category><![CDATA[cloud computing]]></category>
		<category><![CDATA[EDA]]></category>
		<category><![CDATA[methodology]]></category>
		<category><![CDATA[reactive]]></category>
		<category><![CDATA[Resilience]]></category>
		<category><![CDATA[Software architectures]]></category>
		<category><![CDATA[software engineering]]></category>
		<guid isPermaLink="false">/?p=14280</guid>

					<description><![CDATA[U heeft het buzzword &#8220;Reactive&#8221; misschien al gehoord. Deze nieuwe architecturale principes om software mee te bouwen zouden heel wat van de &#8220;problemen&#8221; oplossen waar huidige software mee kampt. De Reactive Revolution zou systemen robuuster, resiliënter en flexibeler maken; klaar om toekomstige requirements sneller op te vangen. Maar wat is hier nu eigenlijk van aan? [&#8230;]]]></description>
										<content:encoded><![CDATA[
<div class="wp-block-image"><figure class="alignleft size-large"><img loading="lazy" decoding="async" width="145" height="145" src="/wp-content/uploads/2020/03/reactive1.png" alt="" class="wp-image-14315"/></figure></div>



<p class="justify-text">U heeft het buzzword &#8220;Reactive&#8221; misschien al gehoord. Deze nieuwe architecturale principes om software mee te bouwen zouden heel wat van de &#8220;problemen&#8221; oplossen waar huidige software mee kampt. De <em>Reactive Revolution</em> zou systemen robuuster, resiliënter en flexibeler maken; klaar om toekomstige requirements sneller op te vangen. Maar wat is hier nu eigenlijk van aan?</p>



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



<h2 class="wp-block-heading">Een Beetje Geschiedenis</h2>



<h3 class="wp-block-heading">Het &#8220;Reactive&#8221; Manifest</h3>



<p class="justify-text">De huidige hype rond Reactive Systems is ontstaan in de nasleep van het publiceren van het &#8216;<em><a href="https://www.reactivemanifesto.org/">Reactive Manifesto</a></em>&#8216;. Een manifest is een openbare verklaring die een aantal principes uiteenzet volgens een nadrukkelijke mening en vaak ook mensen uitnodigt deze te onderschrijven. Het reactive manifest werd een eerste keer gepubliceerd door iemand van de firma &#8216;<a href="https://www.lightbend.com/">Lightbend</a>&#8216;, makers van een <a href="/de-vortex-van-enablers/">cloud platform</a> dat volgens deze principes werkt. De tweede en huidige versie van dit manifest dateert van 16 september 2014. Het werd reeds door duizenden mensen onderschreven.</p>



<p class="justify-text">Wat zegt dit manifesto? Een systeem moet <em>responsief, resiliënt, elastisch en message-driven</em> zijn. In de <a href="https://www.lightbend.com/blog/why-do-we-need-a-reactive-manifesto">eerste versie</a> was dit nog <em>interactief, resiliënt, schaalbaar en event-gedreven</em>, maar men wou dit algemener gaan verwoorden. Er wordt in het manifest uiteraard iets dieper ingegaan op elk van deze aspecten, maar niet diep genoeg om nu precies te weten hoe je volgens deze principes software kan bouwen, en waar de naam &#8220;reactive&#8221; nu eigenlijk vandaan komt. Wat dit laatste betreft vinden we meer uitleg in een <a href="https://www.lightbend.com/blog/why-do-we-need-a-reactive-manifesto">blogpost van de oorspronkelijke auteur</a>, en in de <a href="https://github.com/reactivemanifesto/reactivemanifesto/commit/d0c6b5ba4e7d34faf88b237e2fac85564ce4bbf9#diff-04c6e90faac2675aa89e2176d2eec7d8">eerdere versies</a> van het manifest: het gaat om een aantal verschillende principes, die allemaal tot gevolg hebben dat het systeem beter en sneller zal reageren op allerlei zaken:</p>



<ul class="justify-text wp-block-list"><li><em>react to events</em>: the event-driven nature enables the following qualities:</li><li><em>react to load</em>: focus on scalability rather than single-user performance</li><li><em>react to failure</em>: build resilient systems with the ability to recover at all levels</li><li><em>react to users</em>: combine the above traits for an interactive user experience</li></ul>



<h3 class="wp-block-heading">Functional Reactive Programming</h3>



<p class="justify-text">Het woord &#8220;reactive&#8221; zien we in de IT-geschiedenis echter nog veel eerder opduiken: het gaat dan om <a href="https://en.wikipedia.org/wiki/Reactive_programming">Reactive Programming</a>. Dit is een manier om te programmeren die zich toespitst op het omgaan, op een declaratieve manier, met stromen van data en het propageren van veranderingen in die data (en ook met steeds binnenkomende nieuwe data). Ze is sterk verwant aan &#8220;<a href="https://en.wikipedia.org/wiki/Dataflow_programming">Dataflow Programming</a>&#8220;.</p>



<p class="justify-text">Om het iets concreter te maken, kan men dit vergelijken met spreadsheets, zoals gekend van b.v. Excel. Wanneer men in een werkblad een gegeven in een cel verandert, veranderen onmiddellijk alle cellen die van dit gegeven zijn afgeleid, a.h.w. zonder dat er eerst nog expliciete berekeningen voor moesten worden verricht. Uiteraard gebeuren deze berekeningen wel op de achtergrond: Excel maakt dit transparant, net zoals reactieve programmeertalen dit doen voor hun datastromen: verandert er iets in de bron-stroom, dan volgt ook onmiddellijk de uitgangsstroom.</p>



<p class="justify-text">Aan het bovenstaande principe wordt dan nog <a href="https://medium.com/javascript-scene/master-the-javascript-interview-what-is-functional-programming-7f218c68b3a0">Functioneel Programmeren</a> toegevoegd. Dit is een manier van programmeren die zich focust op het vrijwaren van de eigenschappen van pure functies: functies die enkel rekening houden met hun argumenten (niet met toestand elders in het programma) en ook alleen maar een resultaat teruggeven (en dus ook niets veranderen aan de toestand van het programma). Functioneel programmeren maakt het veel gemakkelijker om over code te redeneren. Wanneer met dit doortrekt in een <a href="/architecturale-evoluties-deel-2/">architectuur</a>, bekomt men componenten die men gemakkelijker elastisch kan schalen, die men makkelijker redundant kan uitrollen tegen falen, etc.</p>



<p class="justify-text">Functioneel Reactief Programmeren is momenteel populair en wordt mogelijk gemaakt door een aantal frameworks die goed zijn in te bedden in bestaande platformen. Onder de noemer <a href="https://reactivex.io/">ReactiveX</a> vinden we bijvoorbeeld ondersteuning voor dit paradigma voor een heel aantal populaire talen, vertaald in specifieke libraries per taal (o.a. voor <a href="https://www.udemy.com/blog/kotlin-vs-java-9-benefits-of-kotlin-for-your-business/">Kotlin</a>, Java, .Net, Scala, Python, C++, en Javascript). ReactiveX heeft behoorlijk wat invloed gehad op programmeren en krijgt nog steeds de nodige aandacht op conferenties. Het is goed om deze manier van programmeren als software ontwikkelaar in de toolbox te hebben.</p>



<h3 class="wp-block-heading">Reactive voor Reactive</h3>



<div class="wp-block-image"><figure class="alignright size-large"><img loading="lazy" decoding="async" width="333" height="155" src="/wp-content/uploads/2020/03/reactive2.png" alt="" class="wp-image-14317" srcset="https://www.smalsresearch.be/wp-content/uploads/2020/03/reactive2.png 333w, https://www.smalsresearch.be/wp-content/uploads/2020/03/reactive2-300x140.png 300w" sizes="auto, (max-width: 333px) 100vw, 333px" /><figcaption>Software Ontwikkelaars die volgens de Reactive Principes werken, kunnen dit op hun website aangeven d.m.v. de volgende banner.</figcaption></figure></div>



<p class="justify-text">En wat heeft &#8220;Reactive Programming&#8221; nu uiteindelijk te maken met de eerder genoemde Reactive Systems? In principe kan je reactieve systemen implementeren zonder dit paradigma, maar het gebruik ervan maakt het bouwen van de systemen echter wel een stuk makkelijker. De middelen die worden voorzien door de reactieve programmeerframeworks maken het namelijk een stuk eenvoudiger om &#8220;reactief te zijn&#8221; wanneer men zo&#8217;n systeem bouwt. De meeste zaken die zo&#8217;n systeem in en uitgaan zijn immers te behandelen als datastromen waar men op moet reageren, met als meest typische voorbeeld de stroom van binnenkomende berichten/events.</p>



<h2 class="wp-block-heading">Hoe is dit nu Beter?</h2>



<p class="justify-text">Reactieve systemen zijn <a href="/kosten-besparen-in-de-cloud/">Cloud</a>-native, en focussen op 4 zaken: Responsiviteit, Resiliëntie, Elasticiteit, en asynchrone communicatie via berichten. Uiteraard zijn de eerste 3 van deze kenmerken al voordelen op zich, maar hoe worden deze nu effectief verwezenlijkt?</p>



<p class="justify-text">Het belangrijkste element in de <a href="/architecturale-evoluties-deel-1/">architectuur</a> van Reactieve systemen is de asynchrone communicatie via berichten, meestal onder de vorm van Events. Doordat <a href="/het-event-als-leidend-voorwerp-in-software-engineering/">Consumenten en Producenten van Events</a> elkaar niet hoeven te kennen, bekomen we een grotere onafhankelijkheid van deze componenten ten opzichte van elkaar. Men zegt dan ook dat ze &#8216;loosely coupled&#8217; zijn. Daarenboven zorgt de asynchrone communicatie voor een kleinere latentie en hogere doorvoer van de gegevensuitwisseling tussen de componenten, wat de performantie ten goede komt en zodat de systemen meer &#8216;Responsive&#8217; zijn. De losse koppeling of onafhankelijkheid is iets wat we ook reeds bij <a href="/van-n-tier-naar-microservices/">microservices</a> als thema zagen: zulke componenten worden makkelijker elastisch schaalbaar t.o.v. elkaar en kunnen ook afzonderlijk redundant worden gemaakt, waardoor ze resiliënter worden tegen falen. Indien het <a href="/geavanceerd-event-driven-engineering/">berichtenuitwisselingssysteem</a> een tijdelijke uitval van één van de componenten kan opvangen (door berichten te bufferen b.v.), is ook het systeem als geheel resiliënter dan een systeem waarbij er <a href="/data-centric-it-met-rest/">synchrone comunicatie wordt gebruikt</a> en elke component onmiddellijk antwoord verwacht van een andere.</p>



<p class="justify-text">Uiteraard moeten in het asynchrone geval de componenten die falen ook wel zo snel mogelijk terug online komen, zodat berichten (inkomende datastromen) zo snel mogelijk worden afgehandeld en er in het systeem als geheel geen te grote wachttijden ontstaan (wat ook een vorm van onbeschikbaarheid is).</p>



<h2 class="wp-block-heading">Verschil met Event Driven Architecture?</h2>



<p class="justify-text">De hier opgesomde voordelen lijken sterk op de voordelen van <a href="/het-event-als-leidend-voorwerp-in-software-engineering/">Event Driven Architecture (EDA)</a>, en reactive maakt ook gebruikt van Events. Waar zit dan precies het nieuwe?</p>



<p class="justify-text">De belangrijkste nieuwigheid zit hem in dit geval in de schaal en de benodigde performantie van deze systemen. Waar men in een traditioneel publish-subscribe model af en toe een berichtje kreeg, zit men nu met stromen van data die eigenlijk volcontinu de componenten binnen het systeem bombarderen. Het schaalbaar en elastisch, en ook simpelweg efficiënt maken van elke afzonderlijke component, was nog nooit zo belangrijk.</p>



<p class="justify-text">En dan nog kan het gebeuren dat één component niet meer kan volgen. Er is dan zogezegd een te grote druk (<em>pressure)</em> op de component. Om te vermijden dat deze bezwijkt, heeft men een mechanisme nodig om de rest van het systeem, en dan voornamelijk de bron van de te grote druk, te informeren. Als dit ervoor kan zorgen dat de druk minder wordt, dan kan de component blijven werken en dan is dit voor het systeem als geheel minder erg dan wanneer deze weg zou vallen.</p>



<p class="justify-text">Dit terugkoppelingssignaal noemen we het aangeven van <em>back pressure</em> (de <a href="https://medium.com/@jayphelps/backpressure-explained-the-flow-of-data-through-software-2350b3e77ce7">back pressure</a> zelf is het niet meer kunnen volgen; het niet aankunnen van de inkomende &#8216;druk&#8217;). Het zorgt er dus voor dat het bronsysteem wat minder berichten naar de desbetreffende component zal sturen. Zoiets kan natuurlijk verder propageren doorheen het hele systeem; uiteindelijk kan dit zelfs bij de gebruiker geraken, die dan een mindere performantie merkt. Maar dit is uiteraard nog altijd beter dan een plots falen (<a href="/robotic-process-automation/">graceful degradation</a>). Andere componenten in het systeem kunnen hier op hun beurt ook op gaan reageren en meer middelen beginnen vrijmaken op de onderliggende infrastructuur, zodat men kan gaan schalen om de verhoogde druk beter aan te kunnen.</p>



<p class="justify-text">Het monitoren van falende componenten gaat bij Reactive systemen ook verder dan de traditionele monitoring die we zien vanuit de infrastructuur en op het niveau van het <a href="/productiviteitsverhoging-met-paas/">PaaS platform</a>. Het is deels ingebouwd in de systemen zelf, zodat deze ook zelf de verantwoordelijkheid kunnen nemen. Men maakt hiervoor o.a. gebruik van het zogenaamde actor model en van supervision trees. In detail ingaan op deze zaken zou ons voor deze blog te ver leiden.</p>



<p class="justify-text">Kortom, een Event Driven Architecture vormt de basis waarop allerlei andere, verregaandere zaken mogelijk worden, om uiteindelijk te komen tot iets wat dan &#8220;Reactive&#8221; kan worden genoemd.</p>



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



<p class="justify-text">Reactive systems zijn bedoeld om op grote schaal enorme hoeveelheden werk te verzetten, en dit met een sterke <strong>resiliëntie</strong>. Ze zijn specifiek ontworpen om optimaal in een <strong>Cloud</strong> te kunnen werken.</p>



<p class="justify-text">De truuk bestaat hem eruit de architectuur zodanig op te bouwen dat elke component op zich sterk staat, maar dat ook de communicatie tussen de componenten meehelpt om onverwachte zaken op te vangen. Het belangrijkste paradigma van Reactive is de <strong>asynchrone communicatie</strong>, meestal onder de vorm van <strong>Events</strong>. Daarnaast is het ook nuttig om bij de implementatie gebruik te maken van Functional Reactive Programming.</p>



<p></p>



<p></p>



<h3 class="wp-block-heading">Interessante bronnen</h3>



<p><a href="https://4everinbeta.com/2015/01/15/is-reactive-programming-more-than-just-hype/">https://4everinbeta.com/2015/01/15/is-reactive-programming-more-than-just-hype/</a> </p>



<p><a href="https://www.reactive-streams.org/">http://www.reactive-streams.org/</a></p>



<p><a href="https://blog.redelastic.com/what-is-reactive-programming-bc9fa7f4a7fc">https://blog.redelastic.com/what-is-reactive-programming-bc9fa7f4a7fc</a></p>



<p><a href="https://itnext.io/demystifying-functional-reactive-programming-67767dbe520b">https://itnext.io/demystifying-functional-reactive-programming-67767dbe520b</a></p>



<p><a href="https://www.scnsoft.com/blog/java-reactive-programming">https://www.scnsoft.com/blog/java-reactive-programming</a></p>



<p><a href="https://medium.com/@GumtreeDevTeam/reactive-programming-hype-or-truth-e6fba44ace76">https://medium.com/@GumtreeDevTeam/reactive-programming-hype-or-truth-e6fba44ace76</a></p>



<p><a href="https://spring.io/blog/2016/06/07/notes-on-reactive-programming-part-i-the-reactive-landscape">https://spring.io/blog/2016/06/07/notes-on-reactive-programming-part-i-the-reactive-landscape</a></p>



<p>

_________________________</p>



<p><em>Dit is een ingezonden bijdrage van Koen Vanderkimpen, IT consultant bij Smals Research. &nbsp;Dit artikel werd geschreven in eigen naam en neemt geen standpunt in namens Smals.</em></p>


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