Skip to content

Instantly share code, notes, and snippets.

@Barolina
Last active May 27, 2022 13:29
Show Gist options
  • Save Barolina/e9ae993d07ebab8862e3c956696b978c to your computer and use it in GitHub Desktop.
Save Barolina/e9ae993d07ebab8862e3c956696b978c to your computer and use it in GitHub Desktop.
ASID - CAP - BASE-CQRS

Еще раз про ACID vs CAP vs BASE


ACID ( БД )


Атомарность (Atomic)

Позволяет объединить независимые операции в одну рабочую единицу, далее транзакция

Пример: рабочая единица= оплата товара состоит из независимых операций (списать зачислить зарезервировать товар)

Либо все операции применялись - Либо ни одной

Консистентность (Consistency)

Соблюдены все ограничения накладываемые на данные моделью данных ( уникальность, какие значения может принимать )

Бизнесовая согласованность данных:

Пример: сколько списалось средств со счета, столько должно и зачислится на счет продавца Пример: таблица хранится сведения в виде дерева ( ребенок - родитель), согласованность в данном случае отражает, что ребенок не может быть старше родителя и, что пол выражен двумя типами ( мужской или женский )

Как правило это регулируется триггерами, ограничениями бд или правилами до и после выполнения транзакции( проверка )

Изоляция (Isolation)

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

Долговечность

Если транзакция - была прервана внешними ситуациями ( отключили свет ..) должна быть возможность ее воспроизвести. Другими словами, все транзакции, которые предполагают успешное завершение должны успешно изменить состояние системы.

Успешно планируемые транзакции не должны быть отменены в результате какого сбоя.


CAP (Распределенные системы)


Консистенция (Consistency) - Целостность

Информация во всех системах ( репликах в том числе и в кэше), после выполнения транзакции, должна быть одинакова (То есть согласованность - линеаризуется, в отличии от ACID )

Пример: добавили товар в корзину, после обновления страницы, товара должен и остаться

Доступность (Availability)

Сервис всегда отвечает, а не отвечает 500. Каждая операция должна быть завершена положительным ответом.

Устойчив к сбоям сети ( Partition tolerance)

Транзакция должна быть завершена, даже если один из узлов(компонентов системы) недоступен.


BASE (eventual consistency) - возможная согласованность


Описание в примерах по использованию https://queue.acm.org/detail.cfm?id=1394128


CQRS - архитектурный стиль, в котором операции чтения отделены от операций записи:


кратко:

  • сигнал - операция чтения
  • команд - операция записи

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment