Архитектура

Event Sourcing на практике: event store, проекции, снапшоты, replay

Event Sourcing на практике: event store, проекции, снапшоты, replay

Концепцию Event Sourcing легко полюбить и трудно эксплуатировать: где хранить события (EventStoreDB vs Kafka vs Postgres), как строить и перестраивать проекции (read models), зачем снапшоты и как их делать, как реплеить историю, что такое upcasting при эволюции событий, оптимистичный конкаренси-контроль через expected version — и как жить с append-only, когда приходит GDPR-запрос на удаление

Надёжность распределённых систем: карта

Надёжность распределённых систем: карта

Навигатор по надёжности распределённых систем: консенсус, согласованность, атомарность и транзакции, гарантии доставки сообщений и устойчивость под нагрузкой — как это связано и в каком порядке разбираться

Гарантии доставки и идемпотентность: как получить effectively-once

Гарантии доставки и идемпотентность: как получить effectively-once

Вся событийная архитектура держится на одной связке, которую редко проговаривают вслух: at-least-once доставка + идемпотентный консьюмер = effectively-once. Разбираем, почему сквозной exactly-once недостижим в принципе, чем at-least-once отличается от at-most-once, как сделать консьюмер идемпотентным (ключи идемпотентности, dedup-хранилище, естественная идемпотентность, окно дедупа) и где эта связка уже работает в серии — в outbox, saga и проекциях

Досрочное погашение и архитектурные решения: почему ранняя коррекция курса обходится дешевле

Досрочное погашение и архитектурные решения: почему ранняя коррекция курса обходится дешевле

Аннуитетный кредит как модель технического долга. Интерактивный калькулятор, реальные ставки ЦБ РФ и архитектурная аналогия: чем раньше вы меняете курс – тем дешевле это стоит

Что кладём в событие: notification vs event-carried state transfer

Что кладём в событие: notification vs event-carried state transfer

Самое базовое решение событийной архитектуры — что положить в событие: тонкое уведомление (просто «заказ изменился», ID) или толстое событие с полным состоянием. Первое слабо связывает, но провоцирует «GET-storm» обратно на источник; второе автономно, но раздувает payload, устаревает и тащит связанность по данным. Разбираем два паттерна из таксономии Фаулера, их компромиссы (связанность ↔ автономность ↔ staleness), версионирование нагрузки, приватность в событии и когда что выбирать

Хореография vs оркестрация: кто знает бизнес-процесс

Хореография vs оркестрация: кто знает бизнес-процесс

Многошаговый процесс между сервисами координируют двумя способами: хореография — сервисы реагируют на события, единого дирижёра нет, поток эмерджентный; оркестрация — центральный координатор явно ведёт шаги и обрабатывает отказы. Разница не в технологии, а в том, ГДЕ живёт знание о процессе: размазано по сервисам или собрано в одном месте. Разбираем компромиссы, антипаттерны (event-спагетти vs god-оркестратор), когда что и почему реальные системы почти всегда гибрид