Artikel
Krachtige, robuuste software met het MACH-pattern
Softwareplatforms zijn als digitale uurwerken. Onder de oppervlakte ligt een ingewikkelde puzzel waarin alle onderdelen samenwerken om een systeem te laten draaien. Echter, in tegenstelling tot uurwerken, verandert software geleidelijk om nieuwe inzichten te weerspiegelen en aan veranderende behoeften te voldoen.
Bij fresk.digital geloven we dat producten kunnen evolueren na hun eerste release, en daarom lopen we de Optimise & Grow fase door. De software die we bouwen, moet dus flexibel genoeg zijn om dit mogelijk te maken. MACH speelt hierin een cruciale rol.
Wat is MACH?
MACH is een architectonisch patroon voor productontwikkeling. De afkorting staat voor microservices-gebaseerd, API-first, cloud-native en headless, en elk concept draagt bij aan het flexibeler maken van software. Laten we elk concept verkennen.
Microservices is een benadering van softwareontwikkeling waarbij afzonderlijke componenten worden verbonden om een systeem te creëren. Dit biedt veel flexibiliteit, omdat we individuele onderdelen kunnen verplaatsen en verwisselen. Het is vergelijkbaar met het vervangen van een tandwiel in een horloge – we hoeven slechts één onderdeel te vervangen en ervoor te zorgen dat het nieuwe tandwiel samenwerkt met aangrenzende onderdelen. Voor digitale oplossingen betekent dit dat je niet door hoepels hoeft te springen om wijzigingen door te voeren; de aanpasbaarheid maakt het flexibel en daardoor schaalbaar voor de toekomst.
API-first betekent dat application programming interfaces als eersteklas onderdelen worden behandeld. Simpel gezegd betekent dit dat we met componenten kunnen communiceren via code, bijvoorbeeld via een HTTP API – we zorgen ervoor dat onze tandwielen haken hebben waarin we kunnen grijpen. Hoewel API's nodig zijn om het systeem überhaupt te laten werken, besparen goed ontworpen API's ontwikkeltijd en zorgen ze voor betere prestaties.
Cloud-native diensten zijn diensten die in de cloud draaien. Cloudplatformen zoals Microsoft Azure, Amazon Web Services en Google Cloud bieden ongeëvenaarde beveiliging, stabiliteit en schaalbaarheid, en worden door veel software als een service (SaaS)-tools gebruikt.
Tot slot betekent headless dat de presentatie losgekoppeld is, waardoor we kunnen leren, aanpassen en itereren op frontend toepassingen zonder de backend te beïnvloeden, wat een enorme hoeveelheid ontwikkeltijd bespaart. We kunnen de wijzerplaat van ons uurwerk veranderen zonder ook de interne werking te hoeven aanpassen.
Al met al zorgt MACH ervoor dat een platform aanpasbaar is. Het patroon moedigt compositie aan, waardoor we de componenten kunnen combineren die we nodig hebben om een front-end te bouwen. Door gebruik te maken van de cloud kunnen we verder opschalen en zorgen we voor stabiliteit en prestaties naarmate het platform en het gebruik ervan groeit. Dit soort aanpasbaarheid is van onschatbare waarde voor elk softwareproject, of het nu gaat om een website die onverwachts een piek in het gebruik ervaart, een platform dat oude systemen wil vervangen door nieuwe zonder downtime, of een product dat moet draaien, zoals voor onze klant Ravlling.
MACH in de praktijk
Voor Ravlling, een platform voor reizigers om bestemmingen te ontdekken, ontwikkelden we in 2023 aanvankelijk een webapp. Eerder dit jaar hebben we een belangrijke iteratie ontwikkeld en uitgebracht — in de volksmond bekend als de platform-pivot.
Voor de pivot was de webapplicatie alleen afhankelijk van een graph database en een authenticatieservice. De database bevatte een enorme hoeveelheid activiteiten, accommodaties en meer. De authenticatieservice stelde gebruikers in staat om in te loggen op de website en favorieten te kiezen.
De pivot veranderde dit drastisch. Een belangrijke functie waarop we hebben doorontwikkeld, was de zoekfunctionaliteit, waarvoor we gebruik maakten van een Artifical Intelligence (AI) die natural language processing (NLP) kon uitvoeren. Bovendien gaven we Ravlling meer controle over de inhoud door een content management systeem (CMS) te introduceren.
Dankzij de cloud-native SaaS die we gebruikten, kostte het slechts een paar klikken om de database, integratie en implementation pipelines te repliceren. Hierdoor konden we itereren en experimenteren met het nieuwe platform terwijl het pre-pivot-platform doorliep. Het overschakelen naar het nieuwe platform om live te gaan was ook een kwestie van slechts enkele klikken. Bovendien, omdat de frontend al diende als de bemiddelaar van verschillende backend microservices, konden we daar de architectuur hercomponeren en verbinden met andere diensten.
Dankzij MACH konden we onze infrastructuur en veel van de al beschikbare diensten hergebruiken — geen herschrijvingen nodig.
MACH houdt systemen adaptief, is schaalbaar en stimuleert innovatie.
Complex maar simpel
Omdat MACH-systemen bestaan uit veel kleinere componenten, kunnen we ongelooflijk grote systemen creëren die complex, maar toch eenvoudig zijn. Een voorbeeld hiervan is het Sportinfrastructuur platform voor onze klant NOC*NSF.
Dit platform leunt op het Azure-ecosysteem en een handvol externe bronnen. Om je een indruk te geven: er is een webapplicatie, content-delivery network, authenticatie service, CMS, event messaging system, systeem monitoring servies, blob opslag, verschillende databases, een reeks sterk gespecialiseerde diensten voor het ondersteunen van verschillende functies, en nog veel meer componenten, die elk zorgvuldig met elkaar zijn verbonden.
Het feit dat het systeem enorm is, betekent niet dat het fragiel is of dat het zich niet kan aanpassen. Vergeet niet dat hier veel microservices gebruikt worden, die elk een gespecialiseerde taak uitvoeren. Met een druk op een knop of twee kunnen we ze toevoegen, vervangen, verwijderen of opnieuw verbinden. Dingen zijn alleen fragiel als een eenvoudige wijziging onverwachte problemen veroorzaakt. Hoewel sommige diensten van andere afhankelijk zijn, werkt elk van hen autonoom en soepel in de cloud.
Dit platform laat zien dat MACH meer is dan theorie of een patroon voor kleine projecten — het werkt ook voor ongelooflijk ambitieuze en grootschalige projecten, en het zal dat blijven doen naarmate het platform zich ontwikkelt.
Conclusie
MACH houdt systemen adaptief. Of het nu gaat om nieuwe inzichten, veranderende behoeften of technologische vooruitgang, software is onderhevig aan verandering. Net zoals we geen nieuw horloge nodig hebben om het uurwerk te repareren of de wijzerplaat te veranderen, hoeven we software niet opnieuw te bouwen.
MACH is schaalbaar. Door gebruik te maken van microservices, SaaS en de cloud, en de nadruk te leggen op compositie, krijgen we een opstelling die ons vanaf het begin zal dienen, die ons zal dienen terwijl we groeien, en die ons in de toekomst zal blijven dienen. We kunnen individuele componenten schalen, nieuwe onderdelen introduceren om belastingen te beheren en het product naar wens uitbreiden.
MACH stimuleert innovatie. Met al deze afzonderlijke componenten die hun deel doen, kunnen we ze op interessante manieren combineren. Wanneer verschillende datastromen worden gecombineerd om een webapplicatie aan te sturen, waarom zou je dan niet een deel van die informatie doorgeven aan je business intelligence-tool om waardevolle inzichten te verkrijgen?