Ribbon Client Side Load Balancer

Nell’articolo Eureka Service Registry è stato introdotto il service registry di Spring nell’architettura dell’applicazione a microservizi calculator presentata nel post Invocazione di Servizi RESTful con RestTemplate. In particolare abbiamo utilizzato l’astrazione DiscoveryClient per interrogare il registry e recuperare tutte le istanze attiva di un determinato servizio.

In generale in un sistema a microservizi la comunicazione tra i servizi può avvenire in modo diretto, come nel caso appena visto, in cui ogni servizi conosce “dove” sono gli altri, perchè recuperati dal registry server, ed è quindi il client ad invocarli direttamente secondo politiche scelte liberamente. Alternativamente è possibile utilizzare un proxy ed in tale caso il servizio utilizza direttamente tale componente, il quale poi si occupa di bilanciare le chiamate verso le repliche del servizio che si intende invocare.

Spring Ribbon

Nell’ecosistema Spring Cloud il compito del bilanciamento delle richieste tra microservizi è svolto dal framework Ribbon che consente di controllare il comportamento dei client HTTP e TCP. Per includerlo nel progetto è sufficiente inserire nel pom.xml la dipendenza relativa:

Nel caso dei microservizi dell’applicazione calculator la dipendenza è inserita esclusivamente nel progetto calculator che invoca gli altri due servizi: opgenerator e numbergenerator.

L’abilitazione del proxy nel progetto avviene semplicemente inserendo l’annotazione @RibbonClient nella classe di start di Spring Boot.

L’annotazione ha come effetto anche l’inserimento nel contesto di Spring di un insieme di bean (la loro implementazione di default) utilizzati da Ribbon per il load balancing. Tali bean sono del tipo:

  • IClientConfig: client configuration,
  • ILoadBalancer: software load balancer,
  • ServerList: strategia di recupero dei server,
  • Irul: strategia di load balancing,
  • Iping: strategia di ping dei server.

Le loro implementazioni di default possono essere sostituite o estese ridefinendole nella classe RibbonConfiguration citata nell’annotazione @RibbonClient.

Load Balancing

Per bilanciare le chiamate verso gli altri microservizi è sifficiente annotare il metodo che restituisce il RestTemplate con @LoadBalanced. Questo indicherà all’applicazione di utilizzare il bean RibbonLoadBalancerClient per interagire con i servizi invocati.

A questo punto per l’invocazione dei servizi non è più necessario utilizzare il DiscoveryClient di Eureka ma semplicemente il bean RestTemplate, come era originariamente prima dell’introduzione del Registry Server. Sarà Ribbon questa volta ad utilizzare l’astrazione di Eureka per recuperare le istanze attive del servizio richiesto ed a bilanciare le invocazioni.

Codice Sorgente

Il codice sorgente è scaricabile su Github all’url https://github.com/gotamo/spring-microservices.

Per l’esecuzione utilizzate il profilo: eureka, ribbon.

 

© 2018 Java Boss - Theme by HappyThemes