Et eksempel på lastbalansering med Zuul og Eureka

1. Oversikt

I denne artikkelen vil vi se på hvordan lastbalansering fungerer med Zuul og Eureka.

Vi dirigerer forespørsler til en REST-tjeneste oppdaget av Spring Cloud Eureka gjennom Zuul Proxy.

2. Første oppsett

Vi må sette opp Eureka-server / klient som vist i artikkelen Spring Cloud Netflix-Eureka.

3. Konfigurere Zuul

Zuul, blant mange andre ting, henter fra Eureka-tjenestesteder og gjør belastningsbalansering på serversiden.

3.1. Maven-konfigurasjon

Først skal vi legge til Zuul Server og Eureka avhengighet til vår pom.xml:

 org.springframework.cloud spring-cloud-starter-netflix-zuul org.springframework.cloud spring-cloud-starter-netflix-eureka-client 

3.2. Kommunikasjon med Eureka

For det andre vil vi legge til de nødvendige egenskapene i Zuuls application.properties fil:

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_URI: // localhost : 8761 / eureka} 

Her ber vi Zuul om å registrere seg som en tjeneste i Eureka og kjøre på port 8762.

Deretter implementerer vi hovedklasse med @EnableZuulProxy og @EnableDiscoveryClient. @EnableZuulProxy indikerer dette som Zuul Server og @EnableDiscoveryClient indikerer dette som Eureka Client:

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

Vi peker nettleseren vår mot // localhost: 8762 / ruter. Dette skal dukke opp alle rutene som er tilgjengelige for Zuul som blir oppdaget av Eureka:

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

Nå kommuniserer vi med Eureka-klienten ved å oppnå Zuul Proxy-rute. Peker nettleseren vår til // localhost: 8762 / spring-cloud-eureka-client / greeting skal generere svaret som:

Hei fra 'SPRING-CLOUD-EUREKA-CLIENT med portnummer 8081'!

4. Lastbalansering med Zuul

Når Zuul mottar en forespørsel, plukker den opp en av de tilgjengelige fysiske stedene og videresender forespørsler til den faktiske tjenesteinstansen. Hele prosessen med å cache plasseringen av tjenesteinstansene og videresende forespørselen til den faktiske plasseringen, blir gitt ut av boksen uten ytterligere konfigurasjoner.

Her kan vi se hvordan Zuul innkapsler tre forskjellige forekomster av samme tjeneste:

Internt bruker Zuul Netflix Ribbon til å lete etter alle forekomster av tjenesten fra tjenestefunnet (Eureka Server).

La oss observere denne oppførselen når flere forekomster blir tatt opp.

4.1. Registrere flere forekomster

Vi starter med å kjøre to forekomster (8081 og 8082 porter).

Når alle forekomster er oppe, kan vi observere i logger at fysiske steder for forekomster er registrert DynamicServerListLoadBalancer og ruten er kartlagt til Zuul-kontroller som tar seg av videresending av forespørsler til selve forekomsten:

Kartlagt URL-bane [/ spring-cloud-eureka-client / **] til handler av typen [class org.springframework.cloud.netflix.zuul.web.ZuulController] Client: spring-cloud-eureka-client instantiated a LoadBalancer: DynamicServerListLoadBalancer : {NFLoadBalancer: name = spring-cloud-eureka-client, current list of Servers = [], Load balancer stats = Zone stats: {}, Server stats: []} ServerList: null Using serverListUpdater PollingServerListUpdater DynamicServerListLoadBalancer for client-spring-cloud -eureka-client initialisert: DynamicServerListLoadBalancer: {NFLoadBalancer: name = spring-cloud-eureka-client, gjeldende liste over servere = [0.0.0.0:8081, 0.0.0.0:8082], Load balancer stats = Zone stats: {defaultzone = [Sone: defaultzone; Antall forekomster: 2; Antall aktive forbindelser: 0; Circuit breaker tripped count: 0; Aktive tilkoblinger per server: 0.0;]}, Serverstatistikk: [[Server: 0.0.0.0: 8080; Sone: defaultZone; ......], [Server: 0.0.0.0: 8081; Sone: defaultZone; ......],

Merk: logger ble formatert for bedre lesbarhet.

4.2. Lastbalanseringseksempel

La oss navigere i nettleseren vår til // localhost: 8762 / spring-cloud-eureka-client / greeting et par ganger.

Hver gang skal vi se et litt annet resultat:

Hei fra 'SPRING-CLOUD-EUREKA-CLIENT med portnummer 8081'!
Hei fra 'SPRING-CLOUD-EUREKA-CLIENT med portnummer 8082'!
Hei fra 'SPRING-CLOUD-EUREKA-CLIENT med portnummer 8081'!

Hver forespørsel mottatt av Zuul blir videresendt til en annen forekomst på en runde-måte.

Hvis vi starter en annen forekomst og registrerer den i Eureka, registrerer Zuul den automatisk og begynner å videresende forespørsler til den:

Hei fra 'SPRING-CLOUD-EUREKA-CLIENT med portnummer 8083'!

Vi kan også endre Zuuls lastbalanseringsstrategi til hvilken som helst annen Netflix-båndstrategi - mer om dette finner du i vår båndartikkel.

5. Konklusjon

Som vi har sett, tilbyr Zuul en enkelt URL for alle forekomster av hviletjenesten, og utfører belastningsbalansering for å videresende forespørslene til en av forekomsten på en robin-måte.

Som alltid kan den fullstendige koden for denne artikkelen finnes på GitHub.


$config[zx-auto] not found$config[zx-overlay] not found