Microservices in Java: In Deel 1 hebben we het gehad over de microservices-architectuur, het Spring Cloud-project en twee belangrijke onderdelen van Spring Cloud (Eureka Service Discovery en Zuul Edge Server). Nu gaan we verder met ons verhaal over de microservices-architectuur en introduceren we ook andere componenten:
- Dynamische routering en Load Balancer - Netflix Lint
- Stroomonderbreker en bewaking - Netflix Hystrix
- Centrale configuratieserver - Cloud-configuratieserver
Dynamische routering en load balancer - Netflix linten
Server-side load balancing wordt gebruikt bij monolithische applicaties waarbij er een beperkt aantal applicatie-instanties achter de load balancer zit. In dat geval heeft de loadbalancer een publiek IP en DNS en doet een client een verzoek via het publieke IP/DNS. Loadbalancing aan de serverkant is meestal een handmatige inspanning en we moeten handmatig instanties toevoegen/verwijderen om de loadbalancer te laten werken. Om de problemen van traditionele load balancing te overwinnen, kwam client-side load balancing in beeld.
Er zijn veel microservices in de microservicearchitectuur en elke microservice kan meerdere instanties hebben. Een enkele instantie van een service is ondenkbaar in productie, dus wat we in dat geval meestal doen is een loadbalancer gebruiken die de payload balanceert over meerdere instanties van een service. Netflix Ribbon uit de Spring Cloud familie biedt de mogelijkheid om load balancing aan de klantzijde in te stellen, samen met de service registry component.

Naast de load balancing algoritmes aan de kant van de client, biedt Ribbon ook andere functies
- Integratie van serviceontdekking
- Fouttolerantie
- Configureerbare load-balancing regels
Als we het hebben over regels voor loadbalancing, ondersteunt Ribbon RoundRobinRule, AvailabilityFilteringRule, WeightedResponseTimeRule out of the box, samen met het definiëren van aangepaste regels. Met de Ribbon API kunnen we de volgende componenten van de loadbalancer configureren:
- Regel - Een logicacomponent die de regel voor het verdelen van de belasting specificeert die we gebruiken in onze applicatie
- Ping - Een component die het mechanisme specificeert dat we gebruiken om de real-time beschikbaarheid van de server te bepalen
- Serverlijst - Kan dynamisch of statisch zijn
Ribbon API kan de beschikbaarheid van de server bepalen door met regelmatige tussenpozen servers te pingen. Als alle servers down zijn en er dus geen server beschikbaar is om het verzoek te serveren, zal de methode pingUrl() mislukken en krijgen we een exception met de melding "Er zijn geen instanties beschikbaar om het verzoek te serveren".
Stroomonderbreker en bewaking - Netflix Hystrix
Een typisch systeem bestaat uit vele diensten die samenwerken. Deze services zijn gevoelig voor storingen of vertraagde reacties. Als een service faalt, kan dit invloed hebben op andere services die de prestaties beïnvloeden en mogelijk andere delen van de applicatie ontoegankelijk maken of in het ergste geval de hele applicatie platleggen.
Hystrix is een bibliotheek die is ontworpen om de interacties tussen deze diensten te regelen en zo een grotere tolerantie voor latentie en fouten te bieden. Hystrix doet dit door toegangspunten tussen de services te isoleren, cascade-uitval tussen de services te voorkomen en terugvalopties te bieden, die allemaal de algehele veerkracht van het systeem verbeteren. Het implementeert het patroon van de stroomonderbrekers. Stroomonderbrekers berekenen wanneer ze het circuit moeten openen en sluiten en wat ze moeten doen in geval van storing. Wanneer alle diensten op een bepaald moment falen, handelt de stroomonderbreker deze fouten netjes af. De stroomonderbrekers hebben drie toestanden:
Tegenwoordig worden bij Netflix dagelijks tientallen miljarden thread-geïsoleerde en honderden miljarden semafoor-geïsoleerde aanroepen via Hystrix uitgevoerd en is er een drastische verbetering in uptime en veerkracht bereikt door het gebruik ervan.
Centrale configuratieserver - Cloud-configuratieserver
In de microservicesarchitectuur is er meestal een groot aantal kleine microservices en elke microservice is meestal gespreid over meerdere omgevingen. Spring Cloud Config is Spring's client/server-benadering voor het opslaan en serveren van gedistribueerde configuraties over meerdere applicaties en omgevingen. Met de Config Server is er een centrale plek om externe eigenschappen voor applicaties in alle omgevingen te beheren.

Spring Cloud Config is de combinatie van twee belangrijke componenten:
- Spring Cloud Config Server - Biedt ondersteuning voor het onderhouden van een gecentraliseerde configuratie op een GIT-repository.
- Spring Cloud Config Client - Biedt ondersteuning voor het koppelen van applicaties aan Spring Cloud Config Server.
Deze configuratiewinkel wordt idealiter onder Git versiebeheer geplaatst en kan tijdens het uitvoeren van de applicatie gewijzigd worden. Hoewel het heel goed past in Spring-applicaties die alle ondersteunde formaten voor configuratiebestanden gebruiken, samen met constructen zoals Environment,
PropertySource of @Value
kan het worden gebruikt in elke omgeving met elke programmeertaal.
Conclusie
Microservices hebben veel voordelen voor Agile- en DevOps-teams. In tegenstelling tot microservices wordt een monolithische applicatie gebouwd als een enkele, autonome eenheid en een wijziging aan een klein deel van de code kan het bouwen en implementeren van een geheel nieuwe versie van de software vereisen. Microservices lossen deze uitdagingen van monolithische systemen op door zo modulair mogelijk te zijn. Ze zijn vaak verbonden via API's en kunnen veel van dezelfde tools en oplossingen gebruiken die zijn gegroeid in het RESTful en webservice ecosysteem.