Event Sourcing за CRUD приложение
Внедрихме event sourcing за базово CRUD приложение, защото "е правилният начин." Прекарахме 6 месеца в инфраструктура вместо функционалности.
Изискванията на приложението:
- Управление на потребители CRUD
- 500 дневни потребители
- Без изисквания за одит
- Без нужда от пътуване във времето
- Стандартна бизнес логика
Какво изградихме:
- Event store (Kafka + PostgreSQL)
- Система за възпроизвеждане на събития
- Проекции (read models)
- Snapshotting
- Версионирани събития
- Saga оркестрация
Прекарано време:
- Инфраструктура: 4 месеца
- Дизайн на event схема: 1 месец
- Дебъгване на eventual consistency: 1 месец
- Реални бизнес функционалности: 2 седмици
Какво ни трябваше:
class User:
def update(self, data):
self.name = data.name
self.email = data.email
db.save(self)
Кога event sourcing има смисъл:
- Регулаторни изисквания за одитна следа
- Финансови транзакции
- Дебъгване с пътуване във времето
- Сложен домейн с много преходи на състояния
Урок: Event sourcing е мощен. Също е скъп. Съобразете сложността с изискванията.