Bevezetés a Spring Cloud Rest kliensbe a Netflix szalaggal

1. Bemutatkozás

A Netflix Ribbon egy Inter Process Communication (IPC) felhőtár. A szalag elsősorban az ügyféloldali terheléselosztó algoritmusokat biztosítja.

Az ügyféloldali terheléselosztó algoritmusok mellett a Ribbon további funkciókat is kínál:

  • Szolgáltatásfelderítés integrációja - A szalagterhelés-kiegyenlítők szolgáltatásfelismerést nyújtanak olyan dinamikus környezetekben, mint egy felhő. Az Eureka és a Netflix szolgáltatáskereső komponenssel való integráció a szalagkönyvtárban található
  • Hibatűrés - a Ribbon API dinamikusan meg tudja határozni, hogy a szerverek élnek-e és működnek-e élő környezetben, és felismerheti azokat a kiszolgálókat, amelyek le vannak
  • Konfigurálható terheléselosztási szabályok - Szalagtartók RoundRobinRule, AvailableFilteringRule, WeightedResponseTimeRule a dobozból, és támogatja az egyedi szabályok meghatározását is

A Ribbon API a „Named Client” nevű koncepció alapján működik. A szalag konfigurálásakor az alkalmazáskonfigurációs fájlunkban megadunk egy nevet a terheléselosztáshoz használt szerverek listájához.

Vegyük egy pörgetésre.

2. Függőségkezelés

A Netflix Ribbon API hozzáadható projektünkhöz az alábbi függőség hozzáadásával pom.xml:

 org.springframework.cloud spring-cloud-starter-netflix-szalag 

A legújabb könyvtárak itt találhatók.

3. Példa alkalmazásra

Annak érdekében, hogy lássuk a Ribbon API működését, elkészítünk egy minta mikroszolgáltatási alkalmazást a Spring alkalmazással RestTemplate és továbbfejlesztjük a Netflix Ribbon API-val, valamint a Spring Cloud Netflix API-val.

A Ribbon egyik terheléselosztási stratégiáját fogjuk használni, WeightedResponseTimeRule, a kliensoldali terheléselosztás engedélyezéséhez alkalmazásunkban 2 kiszolgáló között, amelyeket a konfigurációs fájlban egy megnevezett kliens alatt határozunk meg.

4. Szalag konfigurálása

A Ribbon API lehetővé teszi a terheléselosztó következő összetevőinek konfigurálását:

  • Szabály - Logikai komponens, amely meghatározza az alkalmazásunkban használt terheléselosztási szabályt
  • Ping - Komponens, amely meghatározza a szerver valós idejű elérhetőségének meghatározásához használt mechanizmust
  • ServerList - lehet dinamikus vagy statikus. Esetünkben a szerverek statikus listáját használjuk, ezért közvetlenül az alkalmazás konfigurációs fájljában definiáljuk őket

Írjunk egy egyszerű konfigurációt a könyvtárhoz:

public class RibbonConfiguration {@Autowired IClientConfig ribbonClientConfig; @Bean nyilvános IPing szalagPing (IClientConfig config) {return new PingUrl (); } @Bean public IRule ribbonRule (IClientConfig config) {return new WeightedResponseTimeRule (); }}

Figyeljük meg, hogyan használtuk a WeightedResponseTimeRule szabály a kiszolgáló és PingUrl mechanizmus a kiszolgáló valós idejű elérhetőségének meghatározására.

E szabály szerint minden szerver az átlagos válaszidejének megfelelően kap súlyt, rövidebb a válaszidő kisebb súlyt ad. Ez a szabály véletlenszerűen választ ki egy szervert, ahol a lehetőséget a kiszolgáló súlya határozza meg.

És a PingUrl minden URL-t pingelni fog, hogy meghatározza a szerver elérhetőségét.

5. alkalmazás.yml

Az alábbiakban a alkalmazás.yml konfigurációs fájl, amelyet ehhez a minta alkalmazáshoz hoztunk létre:

tavasz: alkalmazás: név: tavaszi felhő-szalagkiszolgáló: port: 8888 ping-szerver: szalag: eureka: engedélyezve: hamis listaOfServers: localhost: 9092, localhost: 9999 ServerListRefreshInterval: 15000

A fenti fájlban megadtuk:

  • Alkalmazás neve
  • Az alkalmazás portszáma
  • Megnevezett kliens a szerverek listájához: “ping-server”
  • Letiltotta az Eureka szolgáltatáskereső összetevőt az eureka beállításával: engedélyezve nak nek hamis
  • Meghatározta a terheléselosztáshoz rendelkezésre álló kiszolgálók listáját, ebben az esetben 2 szervert
  • A szerver frissítési gyakoriságát a ServerListRefreshInterval

6. RibbonClient

Most állítsuk be a fő alkalmazáskomponens-kódrészletet - ahol a RibbonClient hogy lehetővé tegye a terhelés kiegyenlítését a sima helyett RestTemplate:

@SpringBootApplication @RestController @RibbonClient (name = "ping-a-server", configuration = RibbonConfiguration.class) public class ServerLocationApp {@LoadBalanced @Bean RestTemplate getRestTemplate () {return new RestTemplate (); } @Autowired RestTemplate restTemplate; @RequestMapping ("/ server-location") public String serverLocation () {return this.restTemplate.getForObject ("// ping-server / locaus", String.class); } public static void main (String [] args) {SpringApplication.run (ServerLocationApp.class, args); }}

Meghatároztunk egy vezérlő osztályt az annotációval @RestController; azzal is feljegyeztük az osztályt @RibbonClient nevével és konfigurációs osztályával.

Az itt definiált konfigurációs osztály ugyanaz az osztály, amelyet korábban definiáltunk, és amelyben megadtuk a kívánt Ribbon API konfigurációt ehhez az alkalmazáshoz.

Figyeljük meg, hogy a RestTemplate val vel @LoadBalanced ami azt sugallja, hogy azt akarjuk, hogy ez legyen a terhelés kiegyensúlyozott és ebben az esetben a szalaggal.

7. A szalag hibarugalmassága

Amint azt a cikkben korábban tárgyaltuk, a Ribbon API nemcsak az ügyféloldali terheléselosztó algoritmusokat biztosítja, hanem beépítette a hiba rugalmasságát is.

Amint azt korábban említettük, a Ribbon API rendszeres időközönként meghatározhatja a szerver elérhetőségét a szerverek állandó pingelése révén, és képes kihagyni a nem élő szervereket.

Ezen túlmenően a megszakító mintát is alkalmazza a kiszolgálók kiszűrésére meghatározott feltételek alapján.

A megszakító minta minimalizálja a kiszolgáló meghibásodásának a teljesítményre gyakorolt ​​hatását azáltal, hogy gyorsan elutasítja a meghibásodott kiszolgálóhoz érkező kérelmet, időtúllépés várása nélkül. A tulajdonság megadásával letilthatjuk ezt a megszakítót niws.loadbalancer.availabilityFilteringRule.filterCircuitTripped nak nek hamis.

Amikor az összes kiszolgáló nem működik, így a kiszolgáló nem áll rendelkezésre a kérés kiszolgálására pingUrl () kudarcot vall, és kivételt kapunk java.lang.IllegalStateException üzenettel "Nincs elérhető példány a kérelem kiszolgálására".

8. Következtetés

Ebben a cikkben a Netflix Ribbon API-t és annak megvalósítását ismertettük egy egyszerű mintaalkalmazásban.

A fent leírt példa teljes forráskódja megtalálható a GitHub adattáron.


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