Перейти к содержанию

CAP Теорема

В распределенных системах есть три компромиссных по отношению друг к другу свойства: согласованность, доступность и терпимость к разделению. При отказе удается сохранить только два из них.

  • Согласованность (Consistency) - при обращении к нескольким узлам будет получен один и тот же ответ.
  • Доступность (Availability) - каждый запрос, полученный работающим узлом в системе должен приводить к ответу.
  • Терпимость к разделению (Partition tolerance) - способность системы справляться с тем, что установить связь между ее частями порой становится невозможно.

Note that the following examples do not cover all possible scenarios. Consider the following caption:

attachments/CAP Теорема.png

Пример CP:

attachments/CAP Теорема-1.png

В данном примере система считается partition tolerance, потому что ее узлы продолжают принимать запросы, несмотря на разделение. Система остается consistency, поскольку ответ на запрос возвращают только узлы, которые сохраняют связь с мастером, и только мастер обрабатывает все запросы на запись. Система не обладает availability, поскольку группа узлов, потерявшая связь, с мастером не отвечает на запросы.

Partition tolerance означает, что система продолжает функционировать, несмотря на пропажу связи между ее частями. Речь идет не о наличии механизмов для “исправления” последствий такого разделения, а о терпимости к нему, т. е. о продолжении работы, каждой части независимо.

Пример AP:

attachments/CAP Теорема-2.png

При условии что наша система Partition tolerance мы можем достигать Availability разными путями, например:

  • ведомые узлы отвечают на запросы теми данными, что у них есть. Независимо от того, смогли ли они связаться с мастером
  • ведомые узлы в отколовшейся группе выбирают нового мастера
  • кластер изначально не имеет мастера
    Availability достигается, поскольку все запросы получают ответ, но при этом система теряет Consistency, поскольку потенциально разделенные группы узлов могут иметь разные состояния.

Пример CA:

attachments/CAP Теорема-3.png

Если к системе не предъявляется требование Partition tolerance, то мы можем просто запрещать отвечать на запросы узлы, потерявшие связь с мастером.
При этом Consistency и Availability сохраняются, поскольку все работающие узлы (если таковые имеются) имеют одинаковое состояние и все полученные запросы (если таковые имеются) получат ответ - отключенные узлы не получают запросов.

Отношение разных БД к CAP теореме

500

Критика CAP теоремы

Считается, что для реального мира CAP теорема подходит слабо, так как слишком сильно все упрощает. В реальности в рамках одно приложения может существовать несколько разных операций с различными характеристиками согласованности данных. При этом каждая операция может менять свои характеристики в зависимости от настроек системы. Подробнее об этом можно узнать в статье Martin Kleppmann: Забудьте САР теорему как более не актуальную / Хабр.

Ссылки