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 .