Рубрики
Без рубрики

Пример балансировки нагрузки с Зулем и Эврикой

Посмотрите, как балансирует нагрузка с Netflix Зуул выглядит.

Автор оригинала: baeldung.

1. Обзор

В этой статье мы посмотрим, как балансировка нагрузки работает с Зулем и Эврикой.

Мы будем маршрут запросы на REST службы обнаружили весеннего облака Эврика через Куул Прокси .

2. Первоначальная настройка

Нам нужно настроить Сервер/клиент сервера Eureka как показано в статье Весеннее облако Netflix-Эврика .

3. Настройка Зул

Зуул, среди многих других вещей, получает из мест службы Эврика и делает сервер стороне балансировки нагрузки.

3.1. Конфигурация Maven

Во-первых, мы добавим Куул Сервер и Зависимость Эврики к нашему пом.xml:


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


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

3.2. Связь с Эврикой

Во-вторых, мы добавим необходимые свойства в application.properts файл:

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

Здесь мы говорим Зуул зарегистрироваться в качестве услуги в Эврике и запустить на порт 8762.

Далее мы будем реализовывать основной класс с @EnableZuulProxy и @EnableDiscoveryClient. @EnableZuulProxy указывает на это как сервер и @EnableDiscoveryClient указывает на это как клиент Эврика:

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

Мы наготовим наш браузер на http://localhost:8762/routes . Это должно все маршруты, доступные для Куул которые обнаруживаются эврика:

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

Теперь мы будем общаться с клиентом Eureka, используя полученный маршрут «Зуул Прокси». Указывая наш браузер на http://localhost:8762/spring-cloud-eureka-client/greeting должны генерировать ответ что-то вроде:

Hello from 'SPRING-CLOUD-EUREKA-CLIENT with Port Number 8081'!

4. Балансировка нагрузки с Зулем

Когда Зул получает запрос, он забирает одно из доступных физических мест и направляет запросы в фактический экземпляр службы. Весь процесс кэширования местоположения экземпляров службы и перемотки запроса в реальное местоположение предоставляется из коробки без необходимости дополнительных конфигураций.

Здесь мы можем увидеть, как Зуул инкапсулирует три различных экземпляра одной и той же службы:

Внутренне Зуул использует Ленту Netflix для проверки всех экземпляров сервиса от обнаружения сервиса (Eureka Server).

Давайте наблюдать за этим поведением, когда несколько экземпляров приведены.

4.1. Регистрация нескольких инстанций

Начнем с запуска двух экземпляров (8081 и 8082 порта).

После того, как все экземпляры вверх, мы можем наблюдать в журналах, что физическое расположение экземпляров зарегистрированы в DynamicServerListLoadBalancer и маршрут отображается на Куул Контролер который заботится о переготовки запросов в фактический экземпляр:

Mapped URL path [/spring-cloud-eureka-client/**] onto handler of type [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 initialized: 
  DynamicServerListLoadBalancer:{NFLoadBalancer:name=spring-cloud-eureka-client,
  current list of Servers=[0.0.0.0:8081, 0.0.0.0:8082],
  Load balancer stats=Zone stats: {defaultzone=[Zone:defaultzone;	Instance count:2;	
  Active connections count: 0;	Circuit breaker tripped count: 0;	
  Active connections per server: 0.0;]},
  Server stats: 
    [[Server:0.0.0.0:8080;	Zone:defaultZone;......],
    [Server:0.0.0.0:8081;	Zone:defaultZone; ......],

Примечание: журналы были отформатированы для лучшей читаемости.

4.2. Пример балансировки нагрузки

Давайте перейдите наш браузер, чтобы http://localhost:8762/spring-cloud-eureka-client/greeting несколько раз.

Каждый раз мы должны видеть несколько иной результат:

Hello from 'SPRING-CLOUD-EUREKA-CLIENT with Port Number 8081'!
Hello from 'SPRING-CLOUD-EUREKA-CLIENT with Port Number 8082'!
Hello from 'SPRING-CLOUD-EUREKA-CLIENT with Port Number 8081'!

Каждый запрос, полученный Зулем, направляется в другой экземпляр в круглом виде.

Если мы заверим другой экземпляр и зарегистрируем его в Эврике, Зул зарегистрирует его автоматически и начнет переаведать запросы на него:

Hello from 'SPRING-CLOUD-EUREKA-CLIENT with Port Number 8083'!

Мы также можем изменить стратегию балансировки нагрузки Зуула на любую другую стратегию Netflix Ribbon – подробнее об этом можно найти в нашей статье Ribbon.

5. Заключение

Как мы видели, Зуул предоставляет единый URL для всех экземпляров Службы отдыха и загружает балансировку для перемотки запросов в один из экземпляров в круглой моде Robin.

Как всегда, полный код этой статьи можно найти более на GitHub .