Это часть 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 для решения этой проблемы.