Статьи

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

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

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

Микросервисы с Spring Boot

Ты выучишь:

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

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

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

Перейдите по адресу http: // localhost: 8100 / конвертер валют-feign / от / EUR / до / INR / количество / 10000

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

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

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

Однако мы жестко запрограммировали 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 Service у нас нет возможности распределить нагрузку на них.

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

Инструменты вам понадобятся:

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

Завершите проект Maven с примерами кода

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

Включение ленты

Добавьте эту зависимость от ленты в 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

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

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

Лента в действии

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

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

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

Запрос 1

Перейдите по адресу http: // localhost: 8100 / конвертер валют-feign / от / EUR / до / INR / количество / 10000

Запрос 2

Перейдите по адресу http: // localhost: 8100 / конвертер валют-feign / от / EUR / до / INR / количество / 10000

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

Резюме

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

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

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

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