Хранение событий с Chronacta
Chronacta — хранилище событий
При хранении событий источником истины становится история значимых изменений: текущее состояние можно восстановить, проверить и воспроизвести. Такой подход можно реализовать вручную — на SQL или в коде приложения — либо взять специализированную базу данных, например Chronacta или KurrentDB. В DDDesigner встроена поддержка Chronacta: по модели с событиями можно сразу получить готовые файлы интеграции.
Что такое Chronacta
Chronacta — серверная база данных для хранения событий. Она сохраняет историю изменений в неизменяемом журнале, организованном в потоки, и предоставляет сетевой API для записи, чтения, подписок, проекций и администрирования.
В отличие от обычной базы текущего состояния, Chronacta сохраняет путь, которым система пришла к результату. Это делает историю доступной для аудита, повторной обработки и восстановления состояния после сбоев или миграций.
- Это не реляционная база: нет произвольных JOIN и UPDATE строк
- Это не замена Kafka или NATS: Chronacta — надёжный журнал с версиями, брокеры по-прежнему отвечают за доставку сообщений
- Это не хранилище «только текущего состояния»: состояние выводится из истории событий
Хранение событий и CRUD
В CRUD строка перезаписывается, и старые значения теряются без отдельного аудита. При хранении событий источник истины — последовательность фактов. Текущее состояние восстанавливают, читая поток и применяя доменную логику или проекцию.
Chronacta хранит и доставляет события. Бизнес-правила агрегата живут в вашем сервисе: Chronacta знает идентификатор потока, тип события и данные, а не что такое «заказ».
- Неизменяемость: уже записанное событие не правят — исправление оформляют новым событием
- Записи только добавляются; историю можно запрашивать на момент времени и проигрывать заново
- Запись и чтение разделены: пишут в журнал, читают через проекции или сам поток
Понятия DDD → Chronacta
Domain-Driven Design и хранение событий — разные идеи, которые часто используют вместе. DDD — про язык и границы; хранение событий — про способ зафиксировать состояние.
- Доменное событие → запись в поток: тип события и данные в JSON
- Экземпляр агрегата → обычно один поток (например order-42)
- Репозиторий → загрузка — чтение потока и свёртка; сохранение — запись с ожидаемой версией
- Ограниченный контекст → префиксы имён потоков, отдельные сервисы, при необходимости — раздельные пути для арендаторов
Сравнение инструментов для хранения событий
| Критерий | Без отдельного сервера | Chronacta | KurrentDB |
|---|---|---|---|
| Что нужно запускать | Ваше приложение + обычно PostgreSQL/SQL-таблицы или библиотека внутри процесса | Сервер Chronacta (и при необходимости коннектор для моделей чтения в Postgres) | Кластер KurrentDB или Kurrent Cloud |
| Источник истины | Потоки, таблицы, конкуренцию и срок хранения вы проектируете сами | Неизменяемые потоки: записи только добавляются; у потока есть версия и общая позиция в журнале | Встроенные неизменяемые потоки событий с версиями |
| Защита от одновременных записей | Проверку версии и конфликтов вы реализуете сами — поверх SQL или библиотеки | При записи сервер сам проверяет ожидаемую версию потока | При записи сервер сам проверяет ожидаемую версию |
| Подписки | Опрос, LISTEN/NOTIFY, исходящие сообщения или отдельная шина | Краткоживущие и постоянные подписки; контрольные точки хранятся на сервере | Подписки с догоном истории и постоянные подписки встроены в продукт |
| Проекции / модели чтения | Обработчики и SQL-миграции пишете сами | Проекции на сервере (CEL, встроенные, Starlark), обработчики в приложении и проектор в Postgres по schema.yaml | Встроенный движок проекций; внешние модели чтения — через подписки |
| Схемы и контракты | Соглашения в коде или свой реестр | Реестр JSON-схем с версионированием | Типизация событий и экосистема вокруг контрактов |
| Зрелость эксплуатации и экосистема | Полностью зависит от практик вашей команды | Более новый продукт; бесплатная версия для разработчиков; командная строка, админка, метрики, при необходимости — отказоустойчивый кластер | Зрелый продукт (ранее EventStoreDB); широкая документация, клиенты, управляемое облако |
| Связь с DDDesigner | Моделируете агрегаты, события и проекции; адаптеры хранилища пишете сами | Схемы, манифесты, адаптеры и проекции в Postgres | Отдельной генерации под KurrentDB пока нет: модель в DDDesigner, хранилище подключаете вручную |
| Когда подходит | Простой домен, привычная эксплуатация SQL или изучение хранения событий в одном сервисе | Нужно отдельное хранилище событий, бесплатная версия для разработчиков и готовая интеграция из DDDesigner | Нужна проверенная специализированная платформа, клиенты для разных языков или управляемое облако |
Сравнение опирается на открытую документацию продуктов по состоянию на 2026 год. Chronacta и KurrentDB развиваются независимо — перед производственным выбором сверяйтесь с официальными материалами. Обзор подготовлен DDDesigner и не спонсируется Kurrent.
Как выбрать между тремя подходами
Без отдельного сервера проще эксплуатация: вы остаётесь в PostgreSQL или в библиотеке внутри процесса, но сами отвечаете за конкуренцию, подписки, повторную обработку и политику хранения. Часто этого достаточно для первого сервиса, где состояние хранится событиями.
Chronacta даёт специализированное хранилище: постоянные подписки, реестр схем, проекции на сервере и проектор в Postgres. Встроенная поддержка в DDDesigner помогает сгенерировать интеграцию.
KurrentDB (ранее EventStoreDB) — зрелая специализированная база с большой экосистемой и управляемым облаком. Выбирайте её, когда нужна эта операционная зрелость и вы готовы подключать клиенты самостоятельно, без готового пути Chronacta в DDDesigner.
Проекции в Chronacta
Chronacta поддерживает несколько способов построения моделей чтения. Когда в генерации выбран Chronacta, DDDesigner сопоставляет ваши проекции с этими способами.
- Простые присвоения полей → манифесты проекций на сервере (CEL и встроенные выражения)
- Сложные обработчики → постоянные подписки и фоновые процессы в вашем сервисе
- Проекция в Postgres → внешняя модель чтения через schema.yaml, sqlgen и коннектор (источник истины — Chronacta)
Встроенная поддержка Chronacta в DDDesigner
В DDDesigner можно моделировать агрегаты, команды, события и проекции в одном месте, а затем сгенерировать артефакты для подключения этой модели к Chronacta.
Встроенная интеграция создаёт JSON-схемы, манифесты проекций, адаптеры хранилища, заготовки подписок и артефакты моделей чтения в Postgres, если они нужны проекции. Доменные правила остаются в приложении, где им и место.
Частые вопросы
Нужен ли Chronacta, чтобы проектировать хранение событий в DDDesigner?
Нет. Хранение событий можно реализовать вручную или с помощью специализированной базы данных. В DDDesigner встроена поддержка Chronacta, но модель можно использовать и с другим хранилищем.
Чем Chronacta отличается от хранения событий в PostgreSQL?
На PostgreSQL вы сами (или с помощью библиотеки) реализуете журнал, подписки и проекции. В Chronacta всё это уже реализовано в виде отдельного сервера: потоки, конкуренция, постоянные подписки, реестр схем и быстрые проекции (в том числе для Postgres).
Чем Chronacta отличается от KurrentDB?
Оба — специализированные хранилища событий с потоками, проверкой версий и подписками. У KurrentDB более длинная производственная история и управляемое облако. Chronacta — специализированное хранилище с бесплатной версией для разработчиков и готовой интеграцией с DDDesigner.
Можно ли использовать Chronacta бесплатно?
Да. Есть бесплатная версия для разработчиков — для локальной разработки и оценки. Развертывание и лицензирование для высоконагруженных проектов описано в документации Chronacta.
DDDesigner
Спроектируйте хранение событий с помощью DDDesigner
Моделируйте агрегаты, события и проекции визуально. Используйте встроенную поддержку Chronacta для генерации интеграции или подключите собственное хранилище событий.
Начать