Манитон Docs

Событийно-ориентированный дизайн

Паттерны Kafka RPC, Outbox Pattern и Request Correlation

Событийно-ориентированный дизайн

Платформа Манитон построена на принципах асинхронного взаимодействия. Основной шиной данных является Kafka. Это позволяет достичь высокой масштабируемости, отказоустойчивости и строгого аудита всех действий.

1. Паттерн Kafka RPC (Request-Reply)

Для межсервисного взаимодействия мы используем Kafka вместо традиционного HTTP/gRPC. Это позволяет сервисам оставаться доступными даже при временном падении смежных модулей.

Loading diagram...

Преимущества:

  • Backpressure: Если сервис перегружен, сообщения просто копятся в Kafka.
  • Retryability: Гарантированная доставка команд.
  • Traceability: Вся история запросов сохраняется в логах Kafka.

2. Гарантированная доставка (Outbox Pattern)

Для исключения ситуаций, когда данные в БД обновились, а событие в Kafka не ушло (или наоборот), мы используем Transactional Outbox.

  1. Сервис открывает транзакцию в PostgreSQL.
  2. Обновляет бизнес-таблицы (например, identity_users).
  3. Записывает событие в служебную таблицу outbox_events.
  4. Транзакция фиксируется.
  5. Фоновый процесс (Outbox Relay) читает таблицу и публикует сообщения в Kafka.
Loading diagram...

3. Сквозная трассировка (Request Correlation)

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

  • request_id: Уникальный ID внешнего запроса.
  • correlation_id: Связывает все асинхронные цепочки действий (например: CreatePayment -> FiatDeposited -> CfaMinted).
  • idempotency_key: Ключ для предотвращения повторных операций.

4. Контракты прежде всего (Protobuf First)

Все сообщения в Kafka строго типизированы. Мы используем Protobuf и инструмент Buf для обеспечения обратной совместимости.

  • Envelope: Все события оборачиваются в EventEnvelope (соответствует стандарту CloudEvents).
  • Versioning: Номера полей никогда не меняются, новые поля добавляются как опциональные.

On this page