Data engineering
Event sourcing: тест с множественным выбором
Шесть вопросов через весь юнит. Каждый отражает решение, которое ты принимаешь, проектируя или эксплуатируя event-sourced систему — не определение для пересказа, а компромисс, который надо взвесить, когда лог это истина, а всё остальное производно.
Убедись, что можешь связать append-only лог, projection, replay, snapshot, версионирование и GDPR — синтез, к которому вёл урок, на той глубине, где решения реально кусаются.
Коллега утверждает: «мы и так публикуем доменные события в Kafka после каждой записи в БД, значит мы event-sourced». Почему это, скорее всего, неверно?
Почему projection (read-модели) безопасно считать одноразовыми и что это даёт операционно?
Пользователь жмёт «Сохранить», ты добавляешь событие, потом редиректишь на список из projection — и его изменения там нет. В чём корневая причина и правильный фикс?
Загрузка одного агрегата сворачивает 4 миллиона событий и слишком медленна. Ты добавляешь snapshot. От какого одного режима отказа защищается сеньор?
OrderPlaced получает обязательное поле currency. У миллионов исторических OrderPlaced его нет. Каков стандартный подход?
Пользователь реализует право на забвение по GDPR; его PII вшита в сотни неизменяемых событий. Что реально шипит сеньор?
Сквозная линия юнита — одна инверсия и её следствия: append-only лог это источник истины, текущее состояние это свёртка, всё прочее производно. Projection это одноразовые read-модели, пересобираемые через replay, поэтому чтения eventually consistent. Snapshot ограничивают стоимость replay, но молча дрейфуют без защиты. Версионирование вечно — старые формы живут всегда, поэтому делаешь upcast, а не переписывание. А GDPR поверх неизменяемого лога решается crypto-shredding с реальной юридической оговоркой. Каждый ответ сводится к одному правилу: никогда не мутируй лог; выводи, проигрывай и преобразуй вокруг него.