Позволяет объединить независимые операции в одну рабочую единицу, далее транзакция
Пример: рабочая единица= оплата товара состоит из независимых операций (списать зачислить зарезервировать товар)
Либо все операции применялись - Либо ни одной
Соблюдены все ограничения накладываемые на данные моделью данных ( уникальность, какие значения может принимать )
Бизнесовая согласованность данных:
Пример: сколько списалось средств со счета, столько должно и зачислится на счет продавца Пример: таблица хранится сведения в виде дерева ( ребенок - родитель), согласованность в данном случае отражает, что ребенок не может быть старше родителя и, что пол выражен двумя типами ( мужской или женский )
Как правило это регулируется триггерами, ограничениями бд или правилами до и после выполнения транзакции( проверка )
Невозможность вмешаться другим транзакциям в выполняемую, для возможности откатить в случае несоблюдения консистентности
Если транзакция - была прервана внешними ситуациями ( отключили свет ..) должна быть возможность ее воспроизвести. Другими словами, все транзакции, которые предполагают успешное завершение должны успешно изменить состояние системы.
Успешно планируемые транзакции не должны быть отменены в результате какого сбоя.
Информация во всех системах ( репликах в том числе и в кэше), после выполнения транзакции, должна быть одинакова (То есть согласованность - линеаризуется, в отличии от ACID )
Пример: добавили товар в корзину, после обновления страницы, товара должен и остаться
Сервис всегда отвечает, а не отвечает 500. Каждая операция должна быть завершена положительным ответом.
Транзакция должна быть завершена, даже если один из узлов(компонентов системы) недоступен.
Описание в примерах по использованию https://queue.acm.org/detail.cfm?id=1394128
CQRS - архитектурный стиль, в котором операции чтения отделены от операций записи:
кратко:
- сигнал - операция чтения
- команд - операция записи