advanced
Outbox pattern
Persist state changes и outgoing messages atomically в одном service, затем relay messages safely с retry и deduplication.
Outbox pattern записывает domain changes и исходящие сообщения в одной local database transaction, затем relay process публикует в broker. Избегает dual-write races: БД commit без message или наоборот.
Компромисс: дополнительная таблица, relay lag и deduplication у consumers — но сильная надёжность в границах сервиса.
На интервью: сравните outbox с наивным «save then publish»; объясните relay failure handling и ordering guarantees.
Типовые ошибки: publish до commit; relay без backoff; consumers не idempotent.
Чеклист:
- Outbox rows в той же transaction, что domain writes.
- Надёжный relay с retries и metrics.
- Помечайте published rows и безопасно prune.
- Парьте с idempotent consumers или inbox.