Vrijwel elke organisatie is afhankelijk van bedrijfsapplicaties en data. De beschikbaarheid hiervan is voor je business dan ook van cruciaal belang. Dit betekent dat je de uptime van je systemen altijd wilt bewaken. Fault tolerance helpt hierbij en is een proces dat een systeem in staat goed te blijven functioneren en presteren, ook bij hardware- of softwarematige problemen of storingen.
Hoe werkt fault tolerance?
Fault tolerance draait om het voorkomen single points of failure. Dit zijn softwarematige of hardwarematige punten in een systeem die voor de beschikbaarheid van cruciaal belang zijn. Valt een dergelijk punt uit? Dan kan de applicatie niet meer naar behoren functioneren. Het vermijden van single points of failure betekent dat het systeem geen enkel component mag omvatten dat bij uitval leidt tot het compleet uitvallen, onbereikbaar raken of onbruikbaar worden van een volledig systeem.
In de praktijk maak je bij fault tolerance gebruik van processen als load balancing en failover. Bij load balancing verdeel je workloads over meerdere hardwarematige componenten. Denk hierbij aan meerdere fysieke servers of virtuele machines (VM’s). Bij failover kies je ervoor workloads niet zo zeer te spreiden, maar een backup te creëren waarop het systeem bij technische problemen kan terugvallen. Het overschakelen naar dit backupsysteem gaat dankzij het failover-mechanisme volledig automatisch, zodat gebruikers in de praktijk weinig tot geen hinder ondervinden.
Hoe realiseer je fault tolerance?
Fault tolerance bestaat in verschillende vormen en maten. Zo kun je de nadruk leggen op hardware, bijvoorbeeld door het opzetten van meerdere hardwarematige systemen die dezelfde taken kunnen uitvoeren. Denk aan twee identieke databases die continu met elkaar gesynchroniseerd zijn. De databases zijn op twee verschillende fysieke servers gehost, die bij voorkeur in verschillende datacenters zijn ondergebracht. Geeft de primaire databaseserver problemen? Dan kun je altijd terugvallen op de alternatieve databaseserver.
Je kunt fault tolerance via software realiseren. Bijvoorbeeld door het draaien van meerdere instances van software die hetzelfde werk uitvoeren. Dit realiseer je bijvoorbeeld door het gebruik van containers (en containerorkestratiesoftware, zoals Kubernetes). Hiermee kun je meerdere instances van software uitrollen op meerdere servers. Handig: en container kun je in iedere willekeurige omgeving deployen, zonder dat dit van invloed is op de werking van de applicatie. Geeft een van de softwarematige instances problemen? Dan kun je verkeer eenvoudig naar een andere instance leiden, zodat de software beschikbaar blijft.
Wat is kenmerkend voor fault tolerance?
Diversifiëren van componenten waar je applicatie van afhankelijk is
Diversiteit is een van de manieren voor het realiseren van fault tolerance. De term beschrijft het diversifiëren van de componenten waarvan je systeem afhankelijk is. Een goed voorbeeld is de stroomvoorziening. Allerlei problemen kunnen de aansluiting op het reguliere elektriciteitsnet verstoren. Je wilt daarom de stroomvoorziening van je kritieke systemen diversifiëren. Dit betekent dat je niet alleen bent aangesloten op het reguliere stroomnetwerk, maar ook alternatieve energiebronnen tot je beschikking hebt, zoals een noodstroomaggregaat.
In sommige gevallen kan een methode die je voor fault tolerance kiest, ertoe leiden dat je systeem tijdens technische problemen minder capaciteit biedt dan normaal het geval is. In dit geval kan het nodig zijn de functionaliteiten van een systeem af te schalen totdat de problemen zijn verholpen, en alleen kritieke onderdelen in de lucht te houden.
Redundantie
Redundantie is een ander kenmerk dat centraal staat bij fault tolerance. De term beschrijft het dubbel uitvoeren van kritieke componenten van je hardwarematige infrastructuur. Laat zo’n component het om wat voor reden dan ook afweten? Dan kun je altijd terugvallen op een alternatief component dat de werking overneemt en zo de beschikbaarheid waarborgt.
Replicatie
Replicatie is een ander kenmerk en een complexere aanpak voor het realiseren van fault tolerance. Je maakt hierbij gebruik van meerdere identieke systemen en subsystemen. Belangrijk is dat zij altijd dezelfde resultaten leveren. Is dit niet het geval en wijken resultaten die systemen opleveren van elkaar af? Dan bepaal je met behulp van een democratisch proces welk systeem afwijkt en dus foutieve gegevens aanlevert.
Je kunt replicatie uitvoeren op componentniveau, bijvoorbeeld door het gelijktijdig gebruik van meerdere processoren voor hetzelfde doeleinden. Dit is echter ook mogelijk op systeemniveau, bijvoorbeeld door het dubbel uitvoeren en gelijktijdig draaien van een volledig computersysteem. Zo kan je bij uitval altijd terugvallen op een alternatief systeem.
Wat zijn doelstellingen van fault tolerance?
Het belangrijkste voordeel dat fault tolerance oplevert, is zekerheid over de beschikbaarheid en kracht van je applicatie. Belangrijk, aangezien je business in belangrijke mate afhankelijk is van applicaties. Je kunt verschillende doelstellingen formuleren, afhankelijk van de toepassing waar het omgaat. Denk aan:
- Bestand zijn tegen problemen met een node: het draaien van instances van je software op meerdere nodes in hetzelfde datacenter zorgt dat je applicatie problemen met een of meerdere nodes kan opvangen.
- Problemen door het wegvallen van een availability zone voorkomen: het draaien van instances van software in meerdere availability zones in een cloudregio maakt het opvangen van problemen met een volledige availability zone mogelijk. Denk hierbij aan uitval van een volledig datacenter.
- De applicatie beschermen tegen uitval van een volledige cloudregio: je kunt ook kiezen voor het hosten van je instances in meerdere cloudregio’s. Zo stel je zeker dat applicaties ook beschikbaar blijven indien een volledige cloudregio onbereikbaar is, wat alleen bij zeer omvangrijke storingen het geval is.
Wat kost fault tolerance?
Fault tolerance biedt voordelen, maar brengt ook kosten met zich mee. Zo moet je als organisatie bijvoorbeeld meerdere versies van diverse systeemcomponenten implementeren met het oog op redundantie, zodat je bij technische problemen altijd kunt terugvallen op een alternatief component. Denk echter ook aan allerlei apparatuur die de betrouwbaarheid van je omgeving vergroot, zoals een noodstroomaggregaat.
Met die extra componenten en apparatatuur komt ook beheer, onderhoud en testen ervan kijken. Een noodstroomaggregaat gebruik je over het algemeen zelden; het staat voor langere tijd stil. Alleen: als je het toch nodig hebt, wil je zeker weten dat het optimaal functioneert. Alleen door regelmatig te testen en optimaal onderhouden van apparatuur stel je dit zeker.
Hardwarecomponenten die nodig zijn voor fault tolerance, nemen ruimte in een datacenter in beslag. Ook dat brengt kosten met zich mee.
Wat zijn de belangrijkste overwegingen rondom fault tolerance?
Overweeg je in te zetten op fault tolerance? Dit zijn enkele aandachtspunten:
Kosten
Fault tolerance vraagt in veel gevallen om het redundant uitvoeren van componenten of het draaien van meerdere instances. Dit betekent dat je applicatie meer resources gebruikt, dat kosten met zich meebrengt. Ook het redundant hosten van je applicatie in de cloud, door het over meerdere cloud instances of zelfs cloud providers te spreiden, brengt extra kosten met zich mee.
Monitoring
Een aandachtspunt dat wellicht vergeten wordt, is het monitoren van je hardware en instances. Een neveneffect van fault tolerance is dat eventuele technische problemen minder snel aan het licht komen. Kies je voor geautomatiseerde failover? Dan merk je in de praktijk maar weinig van de uitval van bijvoorbeeld een server, aangezien een redundante server de werking van de uitgevallen server automatisch overneemt. Monitoring is dan ook van cruciaal belang om zeker te stellen dat je IT-landschap en de applicaties die je hierin host naar behoren functioneren.
Fault tolerance versus high availability
Fault tolerance en high availability zijn twee termen die vaak in combinatie met elkaar worden genoemd en op het eerste oog overeenkomsten lijken te hebben. Er zijn echter wezenlijke verschillen, al zijn de begrippen wel degelijk nauw met elkaar verweven.
High availability is een term die verwijst naar de totale uptime van een systeem. Fault tolerance verwijst juist naar het zodanig opzetten van systemen dat je hardware- of softwarematige problemen kunt opvangen zonder impact op de functionele werking van deze systemen. Het realiseren van een high-availability omgeving kan dan ook een belangrijke reden zijn om in te zetten op fault tolerance.
Fault tolerance in de praktijk bij CCV Shop
Benieuwd naar fault tolerance bij andere organisaties? Bekijk on-demand on webinar met CCV Shop, een SaaS-oplossing met een totaalpakket voor webshops. Daarin gaan we met de senior software architect in gesprek over fault tolerance in de praktijk.