CAP Теорема
В распределенных системах есть три компромиссных по отношению друг к другу свойства: согласованность, доступность и терпимость к разделению. При отказе удается сохранить только два из них.
- Согласованность (Consistency) - при обращении к нескольким узлам будет получен один и тот же ответ.
- Доступность (Availability) - каждый запрос, полученный работающим узлом в системе должен приводить к ответу.
- Терпимость к разделению (Partition tolerance) - способность системы справляться с тем, что установить связь между ее частями порой становится невозможно.
Note that the following examples do not cover all possible scenarios. Consider the following caption:
Пример CP:
В данном примере система считается partition tolerance, потому что ее узлы продолжают принимать запросы, несмотря на разделение. Система остается consistency, поскольку ответ на запрос возвращают только узлы, которые сохраняют связь с мастером, и только мастер обрабатывает все запросы на запись. Система не обладает availability, поскольку группа узлов, потерявшая связь, с мастером не отвечает на запросы.
Partition tolerance означает, что система продолжает функционировать, несмотря на пропажу связи между ее частями. Речь идет не о наличии механизмов для “исправления” последствий такого разделения, а о терпимости к нему, т. е. о продолжении работы, каждой части независимо.
Пример AP:
При условии что наша система Partition tolerance мы можем достигать Availability разными путями, например:
- ведомые узлы отвечают на запросы теми данными, что у них есть. Независимо от того, смогли ли они связаться с мастером
- ведомые узлы в отколовшейся группе выбирают нового мастера
- кластер изначально не имеет мастера
Availability достигается, поскольку все запросы получают ответ, но при этом система теряет Consistency, поскольку потенциально разделенные группы узлов могут иметь разные состояния.
Пример CA:
Если к системе не предъявляется требование Partition tolerance, то мы можем просто запрещать отвечать на запросы узлы, потерявшие связь с мастером.
При этом Consistency и Availability сохраняются, поскольку все работающие узлы (если таковые имеются) имеют одинаковое состояние и все полученные запросы (если таковые имеются) получат ответ - отключенные узлы не получают запросов.
Отношение разных БД к CAP теореме¶
Критика CAP теоремы¶
Считается, что для реального мира CAP теорема подходит слабо, так как слишком сильно все упрощает. В реальности в рамках одно приложения может существовать несколько разных операций с различными характеристиками согласованности данных. При этом каждая операция может менять свои характеристики в зависимости от настроек системы. Подробнее об этом можно узнать в статье Martin Kleppmann: Забудьте САР теорему как более не актуальную / Хабр.