Что предоставляет Chronacta

Приложению на Event Sourcing нужно не только место для записи JSON. Нужны упорядоченные потоки, проверка конкурентной записи, надёжное чтение и сохранение позиции обработки потребителей.

Chronacta предоставляет эти механизмы через сетевой API. Приложение определяет, какие события создавать; Chronacta сохраняет их и предоставляет для последующей обработки.

Потоки, версии и схемы

Каждый поток содержит упорядоченную последовательность событий и имеет версию. Проверка ожидаемой версии отклоняет запись, основанную на устаревшем состоянии потока. Ключ идемпотентности позволяет повторить тот же запрос без добавления дубликата в пределах контракта идемпотентности API.

Глобальные позиции позволяют читать события из разных потоков. Подписки доставляют события потребителям, а проекции строят модели чтения. Реестр схем проверяет содержимое событий по зарегистрированным определениям JSON Schema.

В приложении на DDD с Event Sourcing поток обычно хранит события одного экземпляра агрегата. Агрегат обеспечивает соблюдение инвариантов, а версия потока помогает не допустить записи параллельных решений, принятых на устаревшем состоянии.

Команда
Решение
Событие
Хранилище событий
Проекция
Приходит команда → приложение применяет правила и порождает события домена → хранилище событий добавляет их в поток → проекции строят моделей чтения, которые запрашивает интерфейс.

Обработка команд и запросов

Обработчик команды загружает агрегат через репозиторий, вызывает его поведение и сохраняет полученные события. Репозиторий может восстанавливать агрегат из потока и добавлять новые события с прочитанной версией.

В архитектуре CQRS обработчики запросов используют модели чтения, подготовленные под их задачи. Проекции заполняют эти модели, обрабатывая события. Модели чтения могут находиться в памяти приложения, реляционной базе или другом подходящем хранилище.

Проекция — это преобразование, а модель чтения — его результат. Изменение логики проекции может потребовать пересборки модели чтения. Оно не меняет ранее записанные события и не исправляет автоматически ошибки обработки команд.

Границы продукта

Chronacta не выполняет произвольные реляционные запросы. Для соединения таблиц, поиска и аналитики по производным данным используйте подходящую базу данных.

Chronacta не является прямой заменой Kafka или NATS. Хранилище событий и брокер сообщений могут дополнять друг друга в одной архитектуре.

Chronacta не реализует ваши агрегаты, обработчики команд и инварианты предметной области. Это инфраструктурный компонент, а не каркас приложения.

Вы разворачиваете и обслуживаете сервер. Chronacta предназначен для одного узла; Enterprise добавляет возможности высокой доступности и дополнительные средства эксплуатации.

Приложение
Хранилище событий
Postgres
NATS / Kafka
Хранилище событий хранит историю событий домена, которую приложение считает источником истины. Postgres и шины сообщений остаются внешними потребителями или транспортом.

Интеграция между контекстами

Явно определяйте владельцев потоков и контрактов событий. Ограниченный контекст отвечает за свою модель предметной области; другим контекстам не следует зависеть от каждого её внутреннего события.

Подписчик может преобразовывать события домена в интеграционные события для другого ограниченного контекста. Postgres может хранить модели чтения, а NATS или Kafka — распространять интеграционные события, когда нужен внешний транспорт.

Длительные процессы координируйте в компонентах приложения, например в менеджерах процессов. Chronacta хранит и доставляет события, но не определяет ход бизнес-процесса.

От разработки к эксплуатации

Начните с одного агрегата, обработчика команды и проекции. Проверьте успешную запись, конфликты версий, повторные запросы и пересборку модели чтения.

Перед вводом в эксплуатацию определите процедуры резервного копирования и восстановления, возобновления работы потребителей, контроля доступа, мониторинга и изменения схем событий.

Выбирайте Chronacta или Enterprise с учётом измеренной нагрузки и требований к доступности, интеграции с системой аутентификации, восстановлению и администрированию.