Spring Boot 4-microservices en REST-API's · Les

Client-side load balancing met Ribbon

Integreer Ribbon voor client-side load balancing over meerdere service-instanties.

Les 2 van 311 stappen

Client-side load balancing met Ribbon is een gratis Spring Boot 4-microservices en REST-API's-les op CoddyKit. Dit is les 2 van 3. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Spring Boot 4-microservices en REST-API's. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Spring Boot 4-microservices en REST-API's bevat in totaal 3 lessen.

Wat is load balancing?

In de wereld van microservices draaien er vaak meerdere kopieën (instanties) van dezelfde service. Dit is nodig voor schaalbaarheid en hoge beschikbaarheid.

Load balancing is het verdelen van binnenkomend netwerkverkeer over deze meerdere instanties. Zo voorkom je dat één service-instantie overbelast raakt.

  • Schaalbaarheid: Verwerk meer gebruikers door meer instanties toe te voegen.
  • Hoge beschikbaarheid: Als één instantie uitvalt, kunnen andere instanties het overnemen.
  • Prestaties: Verdeel het werk gelijkmatig om reactietijden te verkorten.

Load balancing aan de client- of serverzijde

Er zijn twee hoofdtypen load balancing:

  • Load balancing aan de serverzijde: Een afzonderlijk onderdeel, zoals Nginx of een hardwarematige load balancer, staat voor je services. Clients sturen aanvragen naar dit onderdeel, dat ze doorstuurt naar een geschikte service-instantie.
  • Load balancing aan de clientzijde: De clientapplicatie zelf houdt bij welke service-instanties beschikbaar zijn en kiest er voor elke aanvraag één. Hiervoor kun je hulpmiddelen zoals Ribbon gebruiken.

Ribbon: je hulpmiddel aan de clientzijde

Ribbon is een load balancer aan de clientzijde die naadloos met Spring Cloud-applicaties integreert. Het helpt je clientservice om de juiste instantie van een doeldienst te kiezen.

Hoe weet Ribbon welke service-instanties beschikbaar zijn? Het werkt samen met een mechanisme voor service discovery, zoals Eureka. Eureka vertelt Ribbon waar services zich bevinden en Ribbon bepaalt welke service moet worden aangeroepen.

Afhankelijkheid voor load balancing toevoegen

Om load balancing aan de clientzijde in je Spring Boot-applicatie mogelijk te maken, voeg je meestal de afhankelijkheid Spring Cloud LoadBalancer toe. Hoewel 'Ribbon' in de titel van deze les staat, is Spring Cloud LoadBalancer de moderne opvolger ervan en werkt deze op vergelijkbare wijze.

Voeg dit toe aan je pom.xml:

<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>

RestTemplate met load balancing

De eenvoudigste manier om load balancing aan de clientzijde te gebruiken, is met Spring's RestTemplate. Door simpelweg de annotatie @LoadBalanced toe te voegen aan je RestTemplate-bean, configureert Spring deze voor het gebruik van een load balancer.

Wanneer je een HTTP-aanroep uitvoert, gebruik je de logische servicenaam, bijvoorbeeld my-service, in plaats van een specifiek IP-adres en een specifieke poort. De load balancer (Ribbon/Spring Cloud LoadBalancer) vertaalt deze naam naar een echte instantie.

Client roept een service aan (code)

Hier zie je een eenvoudige Spring Boot-clientapplicatie die een load-balanced RestTemplate gebruikt om een andere service met de naam my-service aan te roepen. Om dit te laten werken, moet my-service bij een server voor service discovery, zoals Eureka, geregistreerd zijn.

package com.coddykit;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

@SpringBootApplication
@RestController
public class MyClientApplication {

    private final RestTemplate restTemplate;

    // Inject the load-balanced RestTemplate
    public MyClientApplication(@LoadBalanced RestTemplate restTemplate) {
        this.restTemplate = restTemplate;
    }

    public static void main(String[] args) {
        SpringApplication.run(MyClientApplication.class, args);
    }

    // Define the load-balanced RestTemplate bean
    @Bean
    @LoadBalanced 
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }

    // Endpoint to call 'my-service'
    @GetMapping("/call-my-service")
    public String callMyService() {
        // Use the logical service ID 'my-service'
        return restTemplate.getForObject("http://my-service/hello", String.class);
    }
}

Algoritmen voor load balancing

Ribbon en Spring Cloud LoadBalancer kunnen verschillende algoritmen gebruiken om te bepalen welke service-instantie moet worden aangeroepen. Enkele veelgebruikte algoritmen zijn:

  • Round Robin: Verdeelt aanvragen achtereenvolgens over elke instantie, bijvoorbeeld instantie 1, daarna 2, daarna 3 en vervolgens weer 1.
  • Willekeurig: Kiest voor elke aanvraag een willekeurige instantie.
  • Filteren op beschikbaarheid: Negeert instanties die als niet-actief of niet-reagerend zijn gemarkeerd.
  • Gewogen reactietijd: Geeft de voorkeur aan instanties die in het verleden sneller hebben gereageerd.

Regels voor load balancing configureren

Je kunt de load-balancingregel voor een specifieke service configureren in je application.yml of application.properties. Gebruik bijvoorbeeld een Round Robin-regel voor my-service met de oudere configuratiestijl van Ribbon:

my-service.ribbon.NFLoadBalancerRuleClassName=com.netflix.loadbalancer.RoundRobinRule

Hoewel deze specifieke syntaxis bedoeld is voor oudere versies van Ribbon, is het concept van regels per service configureren vergelijkbaar in Spring Cloud LoadBalancer. Dit gebeurt vaak met aangepaste configuraties of eigenschappen.

Voordelen van load balancing aan de clientzijde

Load balancing aan de clientzijde biedt verschillende voordelen in een microservicesarchitectuur:

  • Eenvoudigere infrastructuur: Je hebt geen afzonderlijk hardware- of softwareonderdeel voor load balancing nodig.
  • Directe communicatie: Clients communiceren rechtstreeks met service-instanties, waardoor de vertraging mogelijk kleiner wordt.
  • Dynamisch schalen: De client past zich eenvoudig aan wanneer nieuwe service-instanties zich registreren bij of afmelden van service discovery.
  • Gedetailleerde controle: De client kan aangepaste logica voor load balancing implementeren of per service verschillende regels toepassen.

Korte controle over load balancing

Je hebt geleerd wat load balancing aan de clientzijde inhoudt. Controleer nu of je het goed hebt begrepen.

Samenvatting: load balancing aan de clientzijde

Goed gedaan. Je hebt load balancing aan de clientzijde met Ribbon en zijn opvolger, Spring Cloud LoadBalancer, verkend.

  • Je hebt geleerd dat load balancing verkeer over service-instanties verdeelt voor schaalbaarheid en beschikbaarheid.
  • Load balancing aan de clientzijde betekent dat de client zelf kiest welke instantie wordt aangeroepen, vaak met behulp van een logische servicenaam.
  • De annotatie @LoadBalanced op een RestTemplate-bean is essentieel om deze functie in Spring Boot mogelijk te maken.
  • Je kunt verschillende algoritmen, zoals Round Robin, gebruiken om aanvragen te verdelen.

Dankzij deze aanpak worden je microservices robuuster en efficiënter.

Gratis beginnen

Leer Java met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
24
Lessen
93

Veelgestelde vragen

Is de les “Client-side load balancing met Ribbon” gratis?

Ja — de volledige tekst van “Client-side load balancing met Ribbon” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus Spring Boot 4-microservices en REST-API's wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus Spring Boot 4-microservices en REST-API's bevat in totaal 3 lessen.

Wat leer ik in “Client-side load balancing met Ribbon”?

Integreer Ribbon voor client-side load balancing over meerdere service-instanties. Je oefent met Spring Boot 4-microservices en REST-API's door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met Spring Boot 4-microservices en REST-API's te beginnen?

Ervaring vooraf is niet nodig. Spring Boot 4-microservices en REST-API's op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 2 van 3.

Hoe lang duurt de les “Client-side load balancing met Ribbon”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over Spring Boot 4-microservices en REST-API's?

Ja. Elke les over Spring Boot 4-microservices en REST-API's bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. Eureka-servicediscovery implementeren
  2. Client-side load balancing met Ribbon
  3. API-gateway met Spring Cloud Gateway
← Terug naar Spring Boot 4-microservices en REST-API's