Микросервисы со Spring Boot. Часть 4. Использование Ribbon для балансировки нагрузки

от автора

Это часть 4 серии о микросервисных архитектурах, в которой мы сосредоточимся на использовании Ribbon для балансировки нагрузки.

Это статья входит в серию статей «Микросервисы со Spring Boot»:

В этой серии статей вы познакомитесь с концепцией микросервисов и узнаете, как создавать микросервисы с помощью Spring Boot и Spring Cloud.

Это руководство поможет вам изучить основы микросервисных архитектур. Мы также начнем рассматривать базовую реализацию микросервиса со Spring Boot.

Мы создадим пару микросервисов и заставим их общаться друг с другом с помощью сервера имен Eureka (Eureka Naming Server) и Ribbon для балансировки нагрузки на стороне клиента.

В этом туториале мы продолжим рассказ о том, как использовать Ribbon в качестве балансировщика нагрузки в проекте Spring Boot микросервисов.

Вы изучите:

  • Что нужно для балансировки нагрузки?
  • Что такое Ribbon?
  • Как добавить Ribbon в проект Spring Boot?
  • Как включить и настроить Ribbon для балансировки нагрузки?

Обзор микросервисов

В предыдущих двух частях мы создали микросервисы и установили связь между ними.

GET to http://localhost:8100/currency-converter-feign/from/EUR/to/INR/quantity/10000

{   id: 10002,   from: "EUR",   to: "INR",   conversionMultiple: 75,   quantity: 10000,   totalCalculatedAmount: 750000,   port: 8000, }

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

Мы создали два микросервиса и установили связь между ними.

Однако мы захардкодили URL для FS в компоненте CCS, CurrencyExchangeServiceProxy.

@FeignClient(name="forex-service" url="localhost:8000") public interface CurrencyExchangeServiceProxy {   @GetMapping("/currency-exchange/from/{from}/to/{to}")   public CurrencyConversionBean retrieveExchangeValue     (@PathVariable("from") String from, @PathVariable("to") String to); }

Это означает, что при запуске новых экземпляров Forex сервис у нас нет возможности распределить нагрузку на них.

В этой части давайте теперь включим распределение нагрузки на стороне клиента с помощью Ribbon.

Вам понадобятся:

  • Maven 3.0+ — ваш инструмент для сборки
  • Ваш любимый IDE. Мы используем Eclipse.
  • JDK 1.8+

Готовый проект Maven с примерами кода

В Github репозитории есть все примеры кода.

Включение Ribbon

Добавьте Ribbon зависимость в pom.xml:

    <dependency>       <groupId>org.springframework.cloud</groupId>       <artifactId>spring-cloud-starter-ribbon</artifactId>     </dependency>

Включите RibbonClient в CurrencyExchangeServiceProxy:

@FeignClient(name="forex-service") @RibbonClient(name="forex-service") public interface CurrencyExchangeServiceProxy { 

Настройте экземпляры в application.properties:

forex-service.ribbon.listOfServers=localhost:8000,localhost:8001

Запустите сервис Forex на 8001

На предыдущем шаге мы настроили Ribbon для распределения нагрузки по экземплярам. Однако у нас нет ни одного экземпляра Forex Service, работающего на 8001.

Мы можем запустить его, настроив конфигурацию запуска, как показано на рисунке ниже:

Ribbon в действии

В настоящее время у нас есть следующие сервисы:

  • Конвертер валют микросервис (CCS) на 8100
  • Два экземпляра микросервиса Forex на 8000 и 8001

Теперь вы увидите, что запросы к CCS будут распределяться между двумя экземплярами микросервиса Forex через Ribbon.

Запрос 1

GET to http://localhost:8100/currency-converter-feign/from/EUR/to/INR/quantity/10000

Запрос 2

GET to http://localhost:8100/currency-converter-feign/from/EUR/to/INR/quantity/10000

Вы можете заметить, что номера портов в двух ответах различны.

Резюме

Мы создали два микросервиса и установили связь между ними.

Мы используем Ribbon для распределения нагрузки между двумя экземплярами сервиса Forex.

Однако мы жестко кодируем URL обоих экземпляров FS в CCS. Это означает, что каждый раз, когда появляется новый экземпляр FS, нам нужно будет изменить конфигурацию CCS. Это не круто.

В следующей части мы будем использовать Eureka Naming Server для решения этой проблемы.

ссылка на оригинал статьи https://habr.com/ru/post/485608/