Primjer uravnoteženja opterećenja sa Zuulom i Eurekom

1. Pregled

U ovom ćemo članku pogledati kako uravnoteženje opterećenja funkcionira sa Zuulom i Eurekom.

Zahtjeve ćemo preusmjeriti na REST uslugu koju je otkrio Spring Cloud Eureka putem Zuul Proxyja.

2. Početno postavljanje

Moramo postaviti Eureka poslužitelj / klijent kako je prikazano u članku Spring Cloud Netflix-Eureka.

3. Konfiguriranje Zuula

Zuul, između ostalog, dohvaća s mjesta usluge Eureka i vrši uravnoteženje opterećenja na strani poslužitelja.

3.1. Maven konfiguracija

Prvo ćemo dodati Zuul poslužitelj i Ovisnost o eureci našem pom.xml:

 org.springframework.cloud proljeće-oblak-starter-netflix-zuul org.springframework.cloud proljeće-oblak-starter-netflix-eureka-klijent 

3.2. Komunikacija s Eurekom

Drugo, dodat ćemo potrebna svojstva u Zuulovim primjena.svojstva datoteka:

server.port = 8762 spring.application.name = zuul-server eureka.instance.preferIpAddress = true eureka.client.registerWithEureka = true eureka.client.fetchRegistry = true eureka.client.serviceUrl.defaultZone = $ {EUREKA_sturI: // lokalno : 8761 / eureka} 

Ovdje poručujemo Zuulu da se registrira kao usluga u Eureki i da radi na portu 8762.

Dalje ćemo implementirati glavna klasa s @EnableZuulProxy i @EnableDiscoveryClient. @EnableZuulProxy označava ovo kao Zuul Server i @EnableDiscoveryClient označava ovo kao Eureka klijent:

@SpringBootApplication @EnableZuulProxy @EnableDiscoveryClient javna klasa ZuulConfig {public static void main (String [] args) {SpringApplication.run (ZuulConfig.class, args); }}

Usmjerit ćemo svoj preglednik na // localhost: 8762 / rute. Ovo bi se trebalo pojaviti sve rute dostupne za Zuul koje su otkrili Eureka:

{"/ spring-cloud-eureka-client / **": "spring-cloud-eureka-client"}

Sada ćemo komunicirati s klijentom Eureke koristeći dobivenu Zuul Proxy rutu. Usmjeravajući naš preglednik na // localhost: 8762 / spring-cloud-eureka-client / pozdrav bi trebao generirati odgovor poput:

Pozdrav iz 'SPRING-CLOUD-EUREKA-CLIENT with Port Number 8081'!

4. Balansiranje opterećenja pomoću Zuula

Kad Zuul primi zahtjev, preuzima jedno od dostupnih fizičkih mjesta i prosljeđuje zahtjeve stvarnoj instanci usluge. Čitav postupak predmemoriranja lokacije instanci usluge i prosljeđivanja zahtjeva na stvarno mjesto pruža se bez ikakvih dodatnih konfiguracija.

Ovdje možemo vidjeti kako Zuul obuhvaća tri različita primjerka iste usluge:

Zuul interno koristi Netflix Ribbon za traženje svih slučajeva usluge iz otkrivanja usluge (Eureka Server).

Promotrimo ovo ponašanje kad se pokrene više instanci.

4.1. Registriranje više instanci

Počet ćemo izvođenjem dva primjerka (8081 i 8082 porta).

Nakon što se završe svi primjerci, u zapisnicima možemo primijetiti da su fizička mjesta instanci registrirana DynamicServerListLoadBalancer a ruta je preslikana na Zuul kontroler koja se brine za prosljeđivanje zahtjeva stvarnoj instanci:

Mapirana URL staza [/ spring-cloud-eureka-client / **] na rukovatelj tipa [class org.springframework.cloud.netflix.zuul.web.ZuulController] Klijent: spring-cloud-eureka-client instancirao je LoadBalancer: DynamicServerListLoadBalancer : {NFLoadBalancer: name = spring-cloud-eureka-client, trenutni popis poslužitelja = [], Load balancer stats = Zonska statistika: {}, Statistika poslužitelja: []} ServerList: null Korištenje serverListUpdater PollingServerListUpdater DynamicServerListLoadBalancer za client-spring spring -eureka-klijent inicijaliziran: DynamicServerListLoadBalancer: {NFLoadBalancer: name = spring-cloud-eureka-client, trenutni popis poslužitelja = [0.0.0.0:8081, 0.0.0.0:8082], Učitavanje statistike uravnoteživača = Statistika zona: {defaultzone = [Zona: zadana zona; Broj primjeraka: 2; Broj aktivnih veza: 0; Broj isključenih prekidača: 0; Aktivne veze po poslužitelju: 0.0;]}, Statistika poslužitelja: [[Poslužitelj: 0.0.0.0: 8080; Zona: defaultZone; ......], [Poslužitelj: 0.0.0.0: 8081; Zona: defaultZone; ......],

Napomena: dnevnici su formatirani radi bolje čitljivosti.

4.2. Primjer uravnoteženja opterećenja

Pomaknimo se do našeg preglednika // localhost: 8762 / spring-cloud-eureka-client / pozdrav nekoliko puta.

Svaki put bismo trebali vidjeti malo drugačiji rezultat:

Pozdrav iz 'SPRING-CLOUD-EUREKA-CLIENT with Port Number 8081'!
Pozdrav iz 'SPRING-CLOUD-EUREKA-CLIENT s brojem porta 8082'!
Pozdrav iz 'SPRING-CLOUD-EUREKA-CLIENT with Port Number 8081'!

Svaki zahtjev koji primi Zuul prosljeđuje se drugoj instanci na okrugli način.

Ako pokrenemo drugu instancu i registriramo je u Eureki, Zuul će je automatski registrirati i započeti s prosljeđivanjem zahtjeva na nju:

Pozdrav iz 'SPRING-CLOUD-EUREKA-CLIENT with Port Number 8083'!

Također možemo promijeniti Zuulovu strategiju uravnoteženja opterećenja u bilo koju drugu strategiju Netflix Ribbon - više o tome možete pronaći u našem članku Ribbon.

5. Zaključak

Kao što smo vidjeli, Zuul pruža jedinstveni URL za sve instance Usluge odmora i uravnotežuje učitavanje kako bi zahtjeve proslijedio u jedan od slučajeva na okrugli način.

Kao i uvijek, cjeloviti kôd za ovaj članak nalazi se na GitHubu.