Перш ніж заглиблюватися в дебри Eureka, давайте спробуємо відповісти на питання: чим погано просто вручну задавати адреси мікросервісів?
Уявіть, що мікросервіси — це не статичні будівлі з фіксованою адресою, а таксопарк. Машини (сервіси) постійно виходять на маршрут, ламаються, замінюються новими і змінюють своє місцеперебування. Тепер спробуйте обслуговувати клієнтів, якщо у вас немає диспетчера — доведеться щоразу вручну шукати й записувати нові координати машин.
У світі мікросервісів таким "диспетчером" і є Service Discovery. Він автоматично відстежує, які сервіси доступні, де вони знаходяться і куди потрібно надсилати запити. Eureka — одна з популярних реалізацій цієї системи.
Проблеми статичної конфігурації:
- Збільшення ризику помилок. Якщо вам потрібно вручну оновлювати адреси всіх мікросервісів, то висока ймовірність випадково щось поламати. Особливо якщо ви використовуєте десятки (а то й сотні) мікросервісів.
- Ускладнення масштабування. При додаванні нового інстансу мікросервісу потрібно оновлювати конфігурацію інших мікросервісів, які з ним взаємодіють.
- Довгий час реакції на зміни. Якщо адреса якогось сервісу змінилася, потрібні ручні дії для внесення правок. Це гальмує процес доставки нових версій.
Service Discovery вирішує ці проблеми, дозволяючи мікросервісам автоматично знаходити один одного без необхідності ручного налаштування. Його основна ідея — централізоване керування адресами і метаданими сервісів.
Як працює Service Discovery?
Компоненти Service Discovery:
- Service Registry (реєстр сервісів): центральна база даних, де зберігаються адреси (і інші метадані) всіх доступних мікросервісів.
- Service Provider (постачальник сервісів): мікросервіс, який реєструється в Service Registry.
- Service Consumer (споживач сервісів): мікросервіс, який запитує адреси інших сервісів з Service Registry, щоб взаємодіяти з ними.
Приклад циклу роботи Service Discovery:
- Реєстрація: Коли мікросервіс запускається, він реєструється в реєстрі Service Registry, вказуючи свою адресу (зазвичай IP і порт) і інші параметри.
- Heartbeat (сигнали життєдіяльності): Мікросервіс періодично надсилає heartbeat-повідомлення в реєстр, щоб повідомити, що він все ще живий.
- Виявлення: Інший мікросервіс (споживач) отримує адресу зареєстрованого сервісу, запитуючи її з реєстру.
- Скасування реєстрації: Якщо мікросервіс помирає (або його інстанс завершується), його запис видаляється з реєстру.
Eureka
Тепер, коли ми розуміємо концепцію Service Discovery, можна перейти до одного з найпопулярніших і легко інтегрованих інструментів — Eureka. Це бібліотека Netflix, яка стала Open Source і є частиною Spring Cloud.
Переваги Eureka:
- Проста інтеграція з Spring Boot. Ви можете легко додати Eureka у ваш проект, просто підключивши відповідні залежності.
- Підтримка динамічної реєстрації і виявлення сервісів. Eureka полегшує масштабованість і відмовостійкість додатків.
- Підтримка схеми CAP (Consistency, Availability, Partition-tolerance). Eureka можна налаштувати так, щоб вона більше фокусувалася на доступності (Availability), що робить її ідеальним вибором для мікросервісів.
- Моніторинг і управління через Dashboard. Ви можете бачити зареєстровані сервіси, їх поточний стан і метрики через веб-інтерфейс.
Основні компоненти Eureka
- Eureka Server:
- Центральний компонент у системі Service Discovery, що зберігає інформацію про всі зареєстровані сервіси.
- Є централізованою базою даних для адрес мікросервісів.
- Відповідає за обробку реєстрацій і heartbeat-повідомлень.
- Eureka Client:
- Бібліотека, яка підключається до ваших мікросервісів, щоб вони могли реєструватися в Eureka Server.
- Також відповідає за отримання адрес інших сервісів з Eureka Server.
- Dashboard:
- Веб-інтерфейс для моніторингу Eureka Server. Показує зареєстровані сервіси, їх стан (UP/DOWN), логи і адреси.
Взаємодія компонентів
+------------------+ Registration +------------------+
| Service A |------------------------->| Eureka Server |
| (Eureka Client) | Service Discovery | |
+------------------+<-------------------------+------------------+
+------------------+
| Service B |
| (Eureka Client) |
+------------------+
Приклад: Запуск Eureka Server
Перш ніж використовувати Service Discovery, ми повинні запустити Eureka Server. Для цього виконаємо такі кроки:
- Додавання залежності у
pom.xml<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> - Анотація @EnableEurekaServer
У класі
Applicationдодаємо анотацію для активації Eureka Server:@SpringBootApplication @EnableEurekaServer public class EurekaServerApplication { public static void main(String[] args) { SpringApplication.run(EurekaServerApplication.class, args); } }
- Налаштування
application.ymlСтворюємо файл
application.ymlу папціresources:server: port: 8761 # порт Eureka Server eureka: client: register-with-eureka: false # Eureka Server сам себе не реєструє fetch-registry: false # Eureka Server не запитує реєстр instance: hostname: localhost # Основний хост
- Запуск застосунку
Тепер можна запустити застосунок, і сервер Eureka буде доступний за адресою
http://localhost:8761.
Приклад: Реєстрація мікросервісу в Eureka Server
Після запуску сервера налаштуємо клієнта для реєстрації в ньому.
- Додавання залежності
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> - Налаштування клієнта
Додамо в
application.ymlналаштування для підключення до Eureka Server:eureka: client: service-url: defaultZone: http://localhost:8761/eureka/ # URL Eureka Server instance: prefer-ip-address: true # Реєструвати IP замість імені хоста
- Анотація @EnableEurekaClient
Додамо анотацію в основний клас:
@SpringBootApplication @EnableEurekaClient public class ServiceAApplication { public static void main(String[] args) { SpringApplication.run(ServiceAApplication.class, args); } }
Перевірка
Запустіть спочатку Eureka Server, потім Eureka Client (ваш мікросервіс). Перейдіть за адресою http://localhost:8761, щоб побачити, що ваш клієнт зареєструвався в системі. Там ви побачите ім'я сервісу, його статус і адресу.
Переваги і виклики
Використання Eureka значно спрощує керування мікросервісами в динамічному середовищі, але варто враховувати навантаження на сервер і необхідність надійної роботи heartbeat-повідомлень. Це потужний інструмент, який допомагає зробити системи більш гнучкими і масштабованими.
Тепер, коли ви знаєте, як працює Service Discovery, і навіть вмієте налаштовувати Eureka Server і Eureka Client, ви готові створювати більш складні мікросервісні застосунки з автоматичним виявленням сервісів.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ