Service Discovery: автоматическое обнаружения сервисов

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

Доработка функционала всех микросервисов будет происходить на основе кода предыдущих уроков ветки spring_cloud.

В микросервисной архитектуре каждый сервис может динамически менять своё расположение (например, IP-адрес или порт), а также может меняться количество запущенных экземпляров. Важно иметь механизм, который позволяет обновлять и распространять эту информацию среди всех взаимодействующих между собой элементов системы. Предположим, что наше приложение развернуто в prod-среде, в которой каждый микросервис поднят в нескольких экземплярах. Сейчас, например, в конфигурации Menu Aggregate Service прописано только по одному URL для связи с Menu Service и Review Service, что фактически лишает нас возможности работать с другими экземплярами этих сервисов. В этой ситуации на помощь приходит паттерн Service Discovery, который решает проблему, абстрагируя клиентов микросервисов от их фактического расположения в сети. Теперь вместо использования конкретных URL или IP адресов клиенты пользуются абстрактными идентификаторами микросервисов, зарегистрировавшихся в Service Discovery, а запросы маршрутизируются к разным экземплярам этих микросервисов с использованием балансировщика нагрузки. Информация о том, какие экземпляры "здоровы", как правило, кешируется клиентами локально, чтобы не перегружать сеть при каждом запросе. Данные в кеше обновляются по заданному интервалу. Когда экземпляр микросервиса по какой-либо причине становится "нездоров", он автоматически исключается из списка доступных для клиентов, и запросы более не отправляются к нему. Также сам сервер, на котором запущен Service Discovery, может быть развернут в нескольких экземплярах, чтобы не стать единой точкой отказа. В этом случае информация о микросервисах, регистрирующихся в нем, реплицируется между всеми инстансами Service Discovery. Рассмотрим диаграмму взаимодействия Menu Aggregate Service с Review Service и Menu Service, когда используется Service Discovery:
  1. Поднимаются несколько экземпляров Service Discovery
  2. Каждый экземпляр микросервисов регистрируется в Service Discovery, при этом идентификаторы экземпляров одного и того же микросервиса совпадают, отличаются лишь их IP адреса и порты.
  3. Menu Aggregate Service получает от Service Discovery информацию обо всех экземплярах Menu Service и Review Service и кеширует ее локально.
  4. Menu Aggregate Service обращается к Review Service и Menu Service с помощью балансировщика нагрузки, который согласно своему алгоритму выбирает экземпляр, куда отправить HTTP-запрос.
service discovery
В проекте используется наиболее распространенная среди экосистемы Spring Boot реализация паттерна Service Discovery - Spring Cloud Netflix Eureka Service Discovery Библиотека состоит из двух частей: Eureka Server и Eureka Client.

Доступ после оплаты курса


Развертываем Eureka Server

  • Микросервис Discovery Service (Netflix Eureka)
  • ДЗ: интеграция с Config Server

Настраиваем Eureka Client в микросервисах

  • Конфигурируем Menu Service
  • Контейнеризируем Menu Service
  • Настраиваем Orders Service
  • ДЗ: настраиваем и контейнеризируем Review Service
  • Настраиваем и контейнеризируем Menu Aggregate Service

Eureka Server API

Обновление Docker Deployment всех микросервисов


На этом урок по интеграции Service Discovery окончен. В следующем занятии мы разберем паттерн Gateway Server.
Занятие 10: Gateway Service I
Контакты: Григорий Кислин
E-mail: admin@javaops.ru
ОГРНИП: 317784700063201 | ИНН: 782581076920

Cайт-партнер: topjava.ru
Поделиться:
Москва Санкт-Петербург Киев Минск Харьков Новосибирск Львов Нижний Новгород Алматы Одесса Днепр Краснодар Екатеринбург Самара Ростов-на-Дону Днепропетровск Казань Воронеж Челябинск Пермь Гомель Владивосток Астана Томск Саратов Гродно Уфа Калининград Николаев Запорожье Ярославль Омск Кемерово Белгород Брест Ташкент Херсон Ижевск Чебоксары Караганда Волгоград Балашиха Йошкар-Ола Киров Барнаул Калуга Иркутск Магнитогорск Донецк Монреаль Warszawa Los Angeles Винница Сыктывкар Тюмень Рига Кишинев Бишкек Владимир Красноярск Ульяновск Жуковский Тольятти Тверь Вологда Улан-удэ Сочи Иваново Мариуполь Пенза Краков Сумы Подольск Тула Рязань Хабаровск Helsinki Могилев Haifa Полтава Сургут Новокузнецк Березники San Francisco Иннополис Tel Aviv Ереван Тернополь Ставрополь Кривой рог Северодвинск Витебск Астрахань

AltStyle によって変換されたページ (->オリジナル) /