Это часть 4 серии о микросервисных архитектурах, в которой мы сосредоточимся на использовании Ribbon для балансировки нагрузки.
Это статья входит в серию статей «Микросервисы со Spring Boot»:
В этой серии статей вы познакомитесь с концепцией микросервисов и узнаете, как создавать микросервисы с помощью Spring Boot и Spring Cloud.
Это руководство поможет вам изучить основы микросервисных архитектур. Мы также начнем рассматривать базовую реализацию микросервиса со Spring Boot.
Мы создадим пару микросервисов и заставим их общаться друг с другом с помощью сервера имен Eureka (Eureka Naming Server) и Ribbon для балансировки нагрузки на стороне клиента.
В этом туториале мы продолжим рассказ о том, как использовать Ribbon в качестве балансировщика нагрузки в проекте Spring Boot микросервисов.
В предыдущих двух частях мы создали микросервисы и установили связь между ними.
Когда мы запустим вышеуказанный сервис, вы увидите, что запрос также отправляется на Forex сервис. Это классно!
Мы создали два микросервиса и установили связь между ними.
Однако мы захардкодили URL для FS в компоненте CCS, CurrencyExchangeServiceProxy.
Это означает, что при запуске новых экземпляров Forex сервис у нас нет возможности распределить нагрузку на них.
В этой части давайте теперь включим распределение нагрузки на стороне клиента с помощью Ribbon.
Добавьте Ribbon зависимость в pom.xml:
Включите RibbonClient в CurrencyExchangeServiceProxy:
Настройте экземпляры в application.properties:
На предыдущем шаге мы настроили Ribbon для распределения нагрузки по экземплярам. Однако у нас нет ни одного экземпляра Forex Service, работающего на 8001.
Мы можем запустить его, настроив конфигурацию запуска, как показано на рисунке ниже:
В настоящее время у нас есть следующие сервисы:
Теперь вы увидите, что запросы к CCS будут распределяться между двумя экземплярами микросервиса Forex через Ribbon.
Вы можете заметить, что номера портов в двух ответах различны.
Мы создали два микросервиса и установили связь между ними.
Мы используем Ribbon для распределения нагрузки между двумя экземплярами сервиса Forex.
Однако мы жестко кодируем URL обоих экземпляров FS в CCS. Это означает, что каждый раз, когда появляется новый экземпляр FS, нам нужно будет изменить конфигурацию CCS. Это не круто.
В следующей части мы будем использовать Eureka Naming Server для решения этой проблемы.
Это статья входит в серию статей «Микросервисы со Spring Boot»:
- Часть 1. Начало работы с архитектурой микросервисов
- Часть 2. Создание микросервиса Forex
- Часть 3. Создание микросервиса конвертации валют
- Часть 4. Использование Ribbon для балансировки нагрузки
- Часть 5. Использование сервера имен Eureka
В этой серии статей вы познакомитесь с концепцией микросервисов и узнаете, как создавать микросервисы с помощью 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 для решения этой проблемы.