Microservices mit Spring Boot. Teil 4. Verwenden von Ribbon für den Lastenausgleich

Dies ist Teil 4 der Reihe der Microservice-Architekturen, in der wir uns auf die Verwendung von Ribbon für den Lastenausgleich konzentrieren.

Dieser Artikel ist Teil der Spring Boot Microservices-Reihe:


In dieser Artikelserie werden Sie mit dem Konzept von Microservices vertraut gemacht und erfahren, wie Sie mit Spring Boot und Spring Cloud Microservices erstellen.

In diesem Handbuch lernen Sie die Grundlagen der Mikroservice-Architekturen kennen. Wir werden uns auch mit der grundlegenden Implementierung von Mikroservices mit Spring Boot befassen.

Wir werden ein Paar von Mikrodiensten erstellen und diese über die Eureka-Nameserver (Eureka Naming Server) und die Ribbon-Nameserver miteinander kommunizieren lassen, um die Belastung auf der Clientseite auszugleichen.

In diesem Tutorial setzen wir die Geschichte fort, wie Ribbon als Load Balancer in einem Spring Boot-Microservice-Projekt verwendet wird.

Sie werden lernen:


  • Was wird zum Lastenausgleich benötigt?
  • Was ist Ribbon?
  • So fügen Sie einem Spring Boot-Projekt ein Menüband hinzu
  • Aktivieren und Konfigurieren des Menübands für den Lastenausgleich

Microservice Übersicht


In den beiden vorhergehenden Teilen haben wir Mikrodienste erstellt und eine Verbindung zwischen ihnen hergestellt.

GET to http://localhost:8100/currency-converter-feign/from/EUR/to/INR/quantity/10000 

 { id: 10002, from: "EUR", to: "INR", conversionMultiple: 75, quantity: 10000, totalCalculatedAmount: 750000, port: 8000, } 

Wenn wir den oben genannten Dienst starten, werden Sie feststellen, dass die Anfrage auch an den Forex-Dienst gesendet wird. Das ist großartig!

Wir haben zwei Microservices erstellt und eine Verbindung zwischen ihnen hergestellt.



Wir haben jedoch die URL für FS in der CCS-Komponente CurrencyExchangeServiceProxy fest codiert.

 @FeignClient(name="forex-service" url="localhost:8000") public interface CurrencyExchangeServiceProxy { @GetMapping("/currency-exchange/from/{from}/to/{to}") public CurrencyConversionBean retrieveExchangeValue (@PathVariable("from") String from, @PathVariable("to") String to); } 

Dies bedeutet, dass wir beim Starten neuer Instanzen des Forex-Dienstes keine Möglichkeit haben, die Last auf diese zu verteilen.

In diesem Teil aktivieren wir nun den clientseitigen Lastenausgleich mit Ribbon.

Sie benötigen:


  • Maven 3.0+ - Ihr Build-Tool
  • Ihre Lieblings-IDE. Wir verwenden Eclipse.
  • JDK 1.8+

Ready Maven-Projekt mit Codebeispielen


Das Github-Repository enthält alle Codebeispiele.

Multifunktionsleiste einschalten


Fügen Sie eine Ribbon-Abhängigkeit in pom.xml hinzu:

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

Aktivieren Sie RibbonClient in CurrencyExchangeServiceProxy:

 @FeignClient(name="forex-service") @RibbonClient(name="forex-service") public interface CurrencyExchangeServiceProxy { 

Konfigurieren Sie Instanzen in application.properties:

 forex-service.ribbon.listOfServers=localhost:8000,localhost:8001 

Starten Sie den Forex Service unter 8001


Im vorherigen Schritt haben wir Ribbon so konfiguriert, dass die Last auf die Instanzen verteilt wird. Wir haben jedoch keine einzige Forex Service-Instanz, die auf 8001 ausgeführt wird.

Wir können es starten, indem wir die Startkonfiguration konfigurieren, wie in der folgenden Abbildung gezeigt:



Farbband in Aktion


Derzeit bieten wir folgende Dienstleistungen an:

  • Microservice Currency Converter (CCS) auf 8100
  • Zwei Instanzen von Forex Microservice auf 8000 und 8001

Jetzt sehen Sie, dass Anfragen an CCS über Ribbon zwischen zwei Instanzen des Forex-Microservice verteilt werden.

Anfrage 1


 GET to http://localhost:8100/currency-converter-feign/from/EUR/to/INR/quantity/10000 

Anfrage 2


 GET to http://localhost:8100/currency-converter-feign/from/EUR/to/INR/quantity/10000 

Möglicherweise stellen Sie fest, dass die Portnummern in den beiden Antworten unterschiedlich sind.

Zusammenfassung


Wir haben zwei Microservices erstellt und eine Verbindung zwischen ihnen hergestellt.



Wir verwenden Ribbon, um die Last zwischen zwei Instanzen des Forex-Dienstes zu verteilen.

Wir codieren jedoch die URL beider FS-Instanzen in CCS fest. Dies bedeutet, dass jedes Mal, wenn eine neue Instanz von FS angezeigt wird, die CCS-Konfiguration geändert werden muss. Das ist nicht cool.

Im nächsten Teil werden wir den Eureka Naming Server verwenden, um dieses Problem zu lösen.

Source: https://habr.com/ru/post/de485608/


All Articles