tgoop.com/java_fillthegaps/508
Last Update:
Понятия в БД, часть 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, и сервера синхронизируются раз в час. Может быть и наоборот, и вообще в любых сочетаниях✨
BY Java: fill the gaps
Share with your friend now:
tgoop.com/java_fillthegaps/508