Какие основные способы взаимодействия между микросервисами?

«Какие основные способы взаимодействия между микросервисами?» — вопрос из категории Архитектура, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Взаимодействие в микросервисной архитектуре строится на сетевых вызовах. Основные паттерны делятся на синхронные и асинхронные.

1. Синхронное взаимодействие (запрос-ответ)

Сервис-потребитель отправляет запрос и ожидает немедленного ответа. Чаще всего используется HTTP/REST или gRPC.

Пример REST-вызова (Python):

import requests

# Запрос к сервису пользователей
response = requests.get(
    'http://user-service:8080/api/users/123',
    headers={'Authorization': 'Bearer <token>'}
)
user_data = response.json() if response.ok else None

Проблемы: Создаёт жёсткую временную связь. При падении или медленной работе целевого сервиса потребитель также может "зависнуть".

2. Асинхронное взаимодействие (через сообщения)

Сервисы обмениваются событиями через брокер сообщений (RabbitMQ, Apache Kafka, AWS SQS), не блокируя друг друга.

Паттерн "Издатель-Подписчик":

  1. Сервис-издатель отправляет событие (например, OrderCreated) в очередь/топик.
  2. Брокер доставляет это событие всем заинтересованным сервисам-подписчикам.
  3. Подписчики обрабатывают событие независимо.

Преимущества: Повышает отказоустойчивость, развязывает сервисы, позволяет буферизировать нагрузку.

Вспомогательные компоненты архитектуры:

  • API Gateway: Единая точка входа для клиентов. Маршрутизирует запросы, занимается аутентификацией, кэшированием, балансировкой нагрузки.
  • Service Discovery (обнаружение сервисов): Позволяет сервисам динамически находить друг друга в условиях меняющихся адресов (например, Consul, Eureka, Kubernetes Services).
  • Circuit Breaker (предохранитель): Паттерн для предотвращения каскадных сбоев. При множественных ошибках вызовов "разрывает цепь" и временно блокирует запросы к проблемному сервису.

Ключевые вызовы: Управление распределёнными транзакциями (Saga), обеспечение согласованности данных (eventual consistency), мониторинг и трассировка запросов (OpenTelemetry, Jaeger).