Príklad vyrovnávania zaťaženia pomocou Zuul a Eureka

1. Prehľad

V tomto článku sa pozrieme na to, ako funguje vyrovnávanie zaťaženia so Zuul a Eureka.

Požiadavky nasmerujeme na službu REST, ktorú objavila Spring Cloud Eureka, prostredníctvom servera Zuul Proxy.

2. Počiatočné nastavenie

Musíme sa zariadiť Server / klient Eureka ako ukazuje článok Spring Cloud Netflix-Eureka.

3. Konfigurácia Zuul

Zuul okrem iného načítava z miest služieb Eureka a robí vyvažovanie záťaže na strane servera.

3.1. Konfigurácia Maven

Najprv pridáme Server Zuul a Závislosť od heuréky k nášmu pom.xml:

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

3.2. Komunikácia s Heurékou

Po druhé, pridáme potrebné vlastnosti do Zuulu application.properties spis:

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 / heuréka} 

Tu hovoríme Zuulovi, aby sa zaregistroval ako služba na Heuréke a aby bežal na porte 8762.

Ďalej implementujeme hlavná trieda s @EnableZuulProxy a @EnableDiscoveryClient. @EnableZuulProxy označuje ako Zuul Server a @EnableDiscoveryClient označuje to ako klient Eureka:

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

Náš prehliadač ukážeme na // localhost: 8762 / trasy. Toto by sa malo prejaviť všetky trasy dostupné pre Zuul ktoré objavil Heuréka:

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

Teraz budeme komunikovať s klientom Eureka pomocou získanej trasy Zuul Proxy. Ukazujeme náš prehliadač na // localhost: 8762 / spring-cloud-eureka-client / pozdrav by mal vygenerovať odpoveď asi ako:

Dobrý deň od 'SPRING-CLOUD-EUREKA-CLIENT s číslom portu 8081'!

4. Vyrovnávanie zaťaženia pomocou Zuul

Keď Zuul dostane požiadavku, zdvihne jedno z dostupných fyzických umiestnení a preposiela požiadavky do skutočnej inštancie služby. Celý proces ukladania do pamäti umiestnenia inštancií služby a preposielania požiadavky do skutočného umiestnenia sa poskytuje po vybalení z krabice bez potreby ďalších konfigurácií.

Tu vidíme, ako Zuul zapuzdruje tri rôzne inštancie tej istej služby:

Zuul interne používa server Netflix Ribbon na vyhľadanie všetkých inštancií služby z objavu služby (server Eureka).

Pozrime sa na toto správanie, keď sa objaví viac inštancií.

4.1. Registrácia viacerých inštancií

Začneme spustením dvoch inštancií (porty 8081 a 8082).

Keď sú všetky inštancie hore, v protokoloch môžeme sledovať, že sa fyzicky nachádzajú miesta inštancií DynamicServerListLoadBalancer a trasa je namapovaná na Ovládač Zuul ktorý sa stará o preposielanie požiadaviek na skutočnú inštanciu:

Namapovaná cesta URL [/ spring-cloud-eureka-client / **] na obslužnú rutinu typu [class org.springframework.cloud.netflix.zuul.web.ZuulController] Klient: spring-cloud-eureka-client vytvoril inštanciu LoadBalancer: DynamicServerListLoadBalancer : {NFLoadBalancer: name = spring-cloud-eureka-client, current list of Servers = [], Load balancer statistics = Zone statistics: {}, Server statistics: [null] ServerList: null Using serverListUpdater PollingServerListUpdater DynamicServerListLoadBalancer for client spring-cloud -eureka-client initialized: DynamicServerListLoadBalancer: {NFLoadBalancer: name = spring-cloud-eureka-client, current list of Servers = [0.0.0.0:8081, 0.0.0.0:8082], Load balancer statistics = Zone statistics: {defaultzone = [Zóna: defaultzone; Počet inštancií: 2; Počet aktívnych pripojení: 0; Počet vypnutých ističov: 0; Aktívne pripojenia na server: 0,0;]}, Štatistiky servera: [[Server: 0.0.0.0: 8080; Zóna: defaultZone; ......], [Server: 0.0.0.0: 8081; Zóna: defaultZone; ......],

Poznámka: protokoly boli naformátované kvôli lepšej čitateľnosti.

4.2. Príklad vyvažovania záťaže

Prejdime náš prehliadač na // localhost: 8762 / spring-cloud-eureka-client / niekoľkokrát pozdrav.

Zakaždým by sme sa mali dočkať trochu iného výsledku:

Dobrý deň od 'SPRING-CLOUD-EUREKA-CLIENT s číslom portu 8081'!
Dobrý deň od 'SPRING-CLOUD-EUREKA-CLIENT s číslom portu 8082'!
Dobrý deň od 'SPRING-CLOUD-EUREKA-CLIENT s číslom portu 8081'!

Každá žiadosť prijatá Zuulom je postúpená na inú inštanciu spôsobom „každý s každým“.

Ak spustíme inú inštanciu a zaregistrujeme ju na Eureke, Zuul ju zaregistruje automaticky a začne na ňu posielať žiadosti:

Dobrý deň od 'SPRING-CLOUD-EUREKA-CLIENT s číslom portu 8083'!

Môžeme tiež zmeniť stratégiu vyrovnávania zaťaženia spoločnosti Zuul na akúkoľvek inú stratégiu pásky Netflix - viac o tom nájdete v našom článku o páse kariet.

5. Záver

Ako sme videli, Zuul poskytuje jedinú adresu URL pre všetky inštancie služby Rest Service a vyvažuje zaťaženie, aby posielal žiadosti do jednej z inštancií spôsobom „každý s každým“.

Kompletný kód tohto článku nájdete ako vždy na serveri GitHub.


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