Naar de inhoud
Menu
CV downloaden (PDF)

Wallet

Een webapp voor persoonlijke financiën, opgebouwd uit microservices voor mijn bachelorproef aan HAMK en daarna met opzet kapotgemaakt om te zien hoe ze op fouten reageert.

Context
Bachelorproef, HAMK
Jaar
2025
Stack
React · Spring Boot · NestJS · FastAPI · Kubernetes · Chaos Mesh
Wallet

Wallet is een webapp om inkomsten, uitgaven en spaargeld bij te houden. Ik bouwde ze voor mijn bachelorproef aan Häme University of Applied Sciences (HAMK) in Finland. De proef is in het Engels geschreven: From monolith to microservices: building scalable applications with Kubernetes, CI/CD and chaos engineering.

Wat ik bouwde

Ik schreef zowel de front-end als de back-end. Een React-front-end stuurt zijn verzoeken naar een Spring Cloud Gateway, die ze doorstuurt naar drie services: gebruikers in Spring Boot, financiën in NestJS en inzichten in FastAPI. Elke service heeft een eigen database (MariaDB, MongoDB en PostgreSQL). Aanmelden gebeurt via Google OAuth2. De hele toepassing draaide op een lokale k3s-cluster, uitgerold met Helm en GitHub Actions en gemonitord met Prometheus en Grafana.

Architectuurschema: een ingress stuurt verkeer naar de React-front-end en naar een Spring Cloud Gateway, die verzoeken doorgeeft aan de services voor financiën, gebruikers en inzichten, elk met een eigen database.

Bewust kapotmaken

In het tweede deel van de proef gebruikte ik Chaos Mesh om fouten te veroorzaken: gestopte pods, netwerkvertraging en een tekort aan CPU en geheugen. Zo kwamen problemen boven die unit- en integratietests waarschijnlijk niet hadden gevonden. Met extra netwerkvertraging maakten twee gelijktijdige aanmeldpogingen dezelfde gebruiker twee keer aan. Bij geheugendruk crashten de Java-services, terwijl de NestJS-service en PostgreSQL bleven draaien. Kubernetes startte de gecrashte pods zoals verwacht opnieuw op.

Wat ik leerde

Kubernetes kan een service herstarten die crasht, maar het kan die service niet leren omgaan met fouten. Time-outs, nieuwe pogingen en een veilige afhandeling van gelijktijdige verzoeken moeten in de services zelf zitten, en limieten op resources horen in de deployments.

Links

Terminalmodus aan. Voer de code opnieuw in om af te sluiten.