Архитектура приложения
Общие принципы
- Каждый микросервис имеет собственную базу данных.
- Обмен данными между сервисами — только через сообщения в Kafka.
- Все финансовые операции — идемпотентны и атомарны на уровне базы данных.
- Согласованность между сервисами достигается через eventual consistency.
Микросервисы
Orders Service
- Хранит данные о заказах в таблице
orders.
- Использует Transactional Outbox (
order_outbox) для надёжной публикации события OrderCreated.
- Подписывается на события
PaymentProcessed для обновления статуса заказа.
Payments Service
- Хранит данные о счетах (
account), платежах (payments) и событиях (payment_inbox, payment_outbox).
- Обрабатывает событие
OrderCreated из Kafka.
- Выполняет атомарное списание средств с проверкой баланса.
- Публикует результат обработки как
PaymentProcessed.
Гарантии
- Exactly-once semantics: деньги списываются не более одного раза за заказ.
- Отказоустойчивость: при падении сервиса обработка продолжится после восстановления.
- Параллельная безопасность: конкурентные операции над счётом не приводят к неконсистентности баланса.