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

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

Ответ

Микросервисы взаимодействуют через два основных паттерна: синхронное и асинхронное общение.

1. Синхронное взаимодействие (HTTP/REST, gRPC)

Используется, когда требуется немедленный ответ.

  • REST/HTTP API — стандартный подход, основанный на JSON/XML. Простота, но больше накладных расходов.
    import requests
    # Запрос к сервису пользователей
    response = requests.get('http://user-service/api/v1/users/123', timeout=5)
    user_data = response.json()
  • gRPC — высокопроизводительный RPC-фреймворк от Google, использует бинарный протокол Protocol Buffers.
    // Определение сервиса в .proto-файле
    service ProductService {
    rpc GetProduct (ProductId) returns (Product);
    }

2. Асинхронное взаимодействие (Message Brokers)

Используется для декаплингования сервисов и повышения отказоустойчивости.

  • Брокеры сообщений (RabbitMQ, Apache Kafka): Сервис-отправитель публикует событие в очередь/топик, не ожидая немедленной обработки.
    from kafka import KafkaProducer
    # Сервис заказов публикует событие "заказ создан"
    producer = KafkaProducer(bootstrap_servers='kafka-broker:9092')
    producer.send('order-created', key=b'order_456', value=order_data_json)

Выбор технологии зависит от требований к задержке, надежности доставки, порядку сообщений и сложности инфраструктуры.