Een fouttolerante architectuur is noodzakelijk om de continue werking van IT-systemen te waarborgen, zelfs bij storingen van afzonderlijke componenten. Het belangrijkste principe is het elimineren van enkele foutpunten door middel van redundantie, load balancing en automatische failover.
Een klassieke fouttolerante systeemindeling omvat clusters van servers, gerepliceerde databases, load balancers en bewakingssystemen. Voor grote systemen wordt geo-replicatie toegepast — het plaatsen van replica's in verschillende datacenters.
Voorbeeld van een nginx-configuratie met meerdere upstream:
upstream backend { server backend1.example.com; server backend2.example.com; server backend3.example.com; least_conn; } server { listen 80; server_name example.com; location / { proxy_pass http://backend; } }
Belangrijke kenmerken:
Als de database gerepliceerd is, kan je dan altijd de consistentie van gegevens tussen replica's garanderen?
Nee, de consistentie hangt af van het gekozen replicatiemodel (sterke/eindelijke consistentie). Bijvoorbeeld, voor eindelijke consistentie kunnen vertragingen in synchronisatie leiden tot "verouderde" gegevens op sommige replica's.
Kan een load balancer zelf het probleem van een onbereikbare backend oplossen?
Nee, de load balancer kan alleen de niet-werkende server uit de pool uitsluiten, maar kan deze niet repareren. Voor automatische herstel worden aanvullende diensten gebruikt (bijvoorbeeld een orkestratiesysteem zoals Kubernetes).
Is het voldoende om alleen een cluster van servers in te stellen voor fouttolerantie?
Nee, het is ook belangrijk om de fouttolerantie van de netwerkinfrastructuur, opslag en andere componenten van de stack te controleren. Fouten in de planning van een deel kunnen het hele systeem in gevaar brengen.