Теорема CAP (Consistency, Availability, Partition Tolerance) утверждает, что в распределенной системе одновременно может быть обеспечено только два из трех свойств:
- Согласованность (Consistency): Все узлы видят одни и те же данные в одно и то же время. Если данные изменены на одном узле, это изменение немедленно отражается на всех остальных.
- Доступность (Availability): Система гарантирует, что каждый запрос получает ответ (неошибочный). Любой рабочий узел может обрабатывать запросы.
- Устойчивость к разделению (Partition Tolerance): Система продолжает работать, даже если из-за сетевых проблем происходит разделение на несколько изолированных кластеров, и узлы не могут общаться друг с другом.
При сетевом разделении (Partition Tolerance), система вынуждена выбирать между согласованностью и доступностью:
- CP система: Предпочитает Consistent (Согласованность) перед Available (Доступность). Во время разделения система может стать недоступной, чтобы гарантировать, что все узлы, которые доступны, видят согласованные данные. Запросы на запись могут быть отклонены.
- AP система: Предпочитает Available (Доступность) перед Consistent (Согласованность). Во время разделения система остается доступной, но данные могут быть несогласованными между разделами. После разрешения разделения данные должны быть синхронизированы.
- CA система: Теоретически существует, но не может существовать в условиях реальной сети, где разделения неизбежны. В распределенной системе всегда приходится учитывать Partition Tolerance.
Теорема CAP не утверждает, что систему нельзя сделать одновременно согласованной и доступной в нормальных условиях без разделений. Она применима именно в момент сетевого разделения.
При выборе между Consistent и Available в условиях Partition Tolerance, решение зависит от требований к системе:
- Банковские системы, где важна точность данных, часто выбирают CP.
- Системы социальных сетей или интернет-магазинов, где важна непрерывная доступность, даже при некоторой задержке в синхронизации данных, часто выбирают AP.