Понятия в БД, часть 3. CAP, BASE, PACELC



Аббревиатура ACID появилась в 1983 году и относилась тогда к реляционным БД небольшого размера. В 2023 БД уже большие и распределённые. С ними связаны три понятия — CAP теорема, BASE и PACELC теорема. С ними и разберёмся в этом посте.



CAP теорема говорит, что распределённая система может обеспечить не больше двух гарантий из трёх:



🔸 Consistency — при каждом чтении читается последнее значение. Неважно, один сервер в системе или тысяча. Эта определение целостности отличается от определения в ACID



🔸 Availability — каждый запрос возвращает ответ



🔸 Partition tolerance — система продолжает работать несмотря на задержки в связи серверов и отказ некоторых из них



Речь идёт о распределённых системах, так что без Partition tolerance никак. Если во время запроса пропала связь между серверами, придётся делать выбор:



🤔 Отменить запрос. Это упор на консистенси — доступность снижается, зато ответ будет точным. Такие системы условно называют CP системами

🤔 Выполнить запрос без учёта данных с отвалившихся серверов. Такие системы часто называют AP системы



У целостности и доступности тоже есть градации:



▫️Доступность считается высокой от 90% до 99.999999%

▫️У целостности 15+ различных моделей



100% гарантий никто не даёт, и деление систем на СР и АР довольно условное. У большинства БД и брокеров можно настроить баланс между доступностью и целостностью для разных ситуаций.



Расширением CAP теоремы является теорема PACELC:



🔹 Если связь между серверами нарушается, придётся выбирать между целостностью данных и доступностью. Об этом говорится в CAP

🔹 При нормальной работе встаёт выбор между низкими задержками (Latency) и целостностью (Consistency). Чем чаще синхронизируются сервера, тем выше задержки и целостность данных



И ACID, и CAP теорема обещают больше, чем есть на деле. Более честен акроним BASE:



▪️ Basically Available — некоторые сервера могут быть недоступны, но в целом система работает

▪️ Soft state — некоторые данные могут не сразу попасть на другие сервера

▪️ Eventual consistency — но однажды точно попадут



Неопределённость, слабые гарантии — всё это реалии разработки распределённых систем.



Теперь ответ на вопрос перед постом. Термин "целостность" по-разному трактуется в ACID и CAP теореме. Грубо говоря:

▫️ ACID consistency — в данных нет аномалий

▫️ CAP consistency — данные на всех серверах одинаковые



Может быть ситуация, когда в БД выставлен уровень Serializable и отличная целостность по ACID, но так себе целостность по CAP, и сервера синхронизируются раз в час. Может быть и наоборот, и вообще в любых сочетаниях