Példa a terheléselosztásra Zuul és Eureka segítségével

1. Áttekintés

Ebben a cikkben megnézzük, hogyan működik a terheléselosztás Zuul és Eureka esetében.

A Spring Cloud Eureka által felfedezett REST szolgáltatáshoz továbbítjuk a kérelmeket a Zuul Proxy-n keresztül.

2. Kezdeti beállítás

Be kell állítanunk Eureka szerver / kliens amint az a Spring Cloud Netflix-Eureka cikkben látható.

3. Zuul beállítása

Zuul, sok egyéb mellett, lekér Eureka szervizhelyekről, és szerveroldali terheléselosztást végez.

3.1. Maven konfiguráció

Először is hozzáadjuk Zuul Server és Eureka-függőség a miénknek pom.xml:

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

3.2. Kommunikáció az Eurekával

Másodszor hozzáadjuk a szükséges tulajdonságokat Zuul's-ba alkalmazás.tulajdonságok fájl:

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

Itt azt mondjuk Zuulnak, hogy regisztrálja magát szolgáltatásként az Eurekában, és induljon a 8762-es porton.

Ezután megvalósítjuk a főosztály val vel @EnableZuulProxy és @EnableDiscoveryClient. @EnableZuulProxy jelzi ezt Zuul Server és @EnableDiscoveryClient ezt Eureka Ügyfélként jelzi:

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

Mutatjuk a böngészőnket // localhost: 8762 / route. Ennek meg kell jelennie az összes elérhető útvonal Zuul felé amelyeket felfedeznek Eureka:

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

Most az Eureka ügyféllel fogunk kommunikálni a megszerzett Zuul Proxy útvonalon. A böngészőnkre mutatva // localhost: 8762 / spring-cloud-eureka-client / greeting ilyennek kell generálnia a választ:

Üdvözlet a 'SPRING-CLOUD-EUREKA-CLIENT-től 8081-es portszámmal'!

4. Terheléselosztás Zuullal

Amikor Zuul kérést kap, felveszi az elérhető fizikai helyek egyikét, és továbbítja a kéréseket a tényleges szolgáltatási példánynak. A szolgáltatáspéldányok helyének gyorsítótárazásának és a kérelem tényleges helyre történő továbbításának teljes folyamata a dobozból kivéve további konfigurációkat igényel.

Itt láthatjuk, hogyan foglalja össze Zuul ugyanazon szolgáltatás három különböző példányát:

Belsőleg Zuul a Netflix Ribbon segítségével keresi a szolgáltatás minden példányát a szolgáltatás felfedezéséből (Eureka Server).

Figyeljük meg ezt a viselkedést, amikor több példány kerül elő.

4.1. Több példány regisztrálása

Két példány (8081 és 8082 port) futtatásával kezdjük.

Amint az összes példány fent van, naplókban figyelhetjük meg, hogy a példányok fizikai helyei regisztrálva vannak-e DynamicServerListLoadBalancer és az útvonal fel van térképezve Zuul vezérlő amely gondoskodik a kérelmek továbbításáról a tényleges példányhoz:

Az [/ spring-cloud-eureka-client / **] URL-elérési út leképezve a [class org.springframework.cloud.netflix.zuul.web.ZuulController] típusú kezelőre. Ügyfél: spring-cloud-eureka-client példányosított egy LoadBalancer-t: DynamicServerListLoadBalancer : {NFLoadBalancer: név = spring-cloud-eureka-client, a szerverek jelenlegi listája = [], Load balancer stats = Zóna statisztikák: {}, Server stats: []} ServerList: null A serverListUpdater PollingServerListUpdater DynamicServerListLoadBalancer használata az ügyfél tavaszi felhőjéhez -eureka-client inicializálva: DynamicServerListLoadBalancer: {NFLoadBalancer: név = tavaszi felhő-eureka-kliens, a szerverek aktuális listája = [0.0.0.0:8081, 0.0.0.0:8082], Terheléselosztó statisztikák = Zóna statisztikák: {defaultzone = [Zóna: alapértelmezett zóna; Példányszám: 2; Aktív kapcsolatok száma: 0; A megszakító kioldási száma: 0; Szerverenként aktív kapcsolatok: 0,0;]}, Szerver statisztika: [[Szerver: 0.0.0.0: 8080; Zóna: alapértelmezett Zóna; ......], [Szerver: 0.0.0.0: 8081; Zóna: alapértelmezett Zóna; ......],

Megjegyzés: a naplók formázása a jobb olvashatóság érdekében történt.

4.2. Terheléselosztási példa

Keressük meg böngészőnket a // localhost: 8762 / spring-cloud-eureka-client / greeting párszor.

Minden alkalommal egy kicsit más eredményt kell látnunk:

Üdvözlet a 'SPRING-CLOUD-EUREKA-CLIENT-től 8081-es portszámmal'!
Üdvözlet a 'SPRING-CLOUD-EUREKA-CLIENT-től 8082-es portszámmal'!
Üdvözlet a 'SPRING-CLOUD-EUREKA-CLIENT-től 8081-es portszámmal'!

A Zuul által beérkezett minden kérést egy másik példányhoz továbbítanak körmérkőzéses módon.

Ha másik példányt indítunk és regisztrálunk az Eurekában, a Zuul automatikusan regisztrálja és megkezdi a kérések továbbítását neki:

Üdvözlet a 'SPRING-CLOUD-EUREKA-CLIENT 8083-as portszámmal'!

Zuul terheléselosztási stratégiáját bármely más Netflix Ribbon stratégiára is módosíthatjuk - erről bővebben a Szalag cikkünkben találhatunk.

5. Következtetés

Mint láttuk, a Zuul egyetlen URL-t biztosít a Pihenőszolgálat összes példányához, és terheléselosztással végzi a kérelmek továbbítását az egyik példányhoz körbefutó módon.

Mint mindig, a cikk teljes kódja megtalálható a GitHubon.