CAP-теорема (теорема Брюера) является основополагающим принципом в распределенных системах и базах данных. Теорема утверждает, что в распределенной системе невозможно одновременно обеспечить три следующих свойства:
- C (Consistency – Согласованность):
- Все узлы в системе видят одни и те же данные одновременно. Если один узел внес изменение в данные, другие узлы тут же видят это изменение.
- A (Availability – Доступность):
- Каждый запрос к системе завершается успешно без ошибок, даже в условиях отказа узлов. Всегда есть отклик на запрос.
- P (Partition Tolerance – Устойчивость к разделению):
- Система продолжает функционировать даже в условиях разделения (потери связи) между узлами. Разделение может произойти из-за отказов сети.
CAP-теорема утверждает, что в случае разделения сети (P) вынуждены выбирать между согласованностью (C) и доступностью (A). Невозможно обеспечить оба эти свойства одновременно в условиях разделения.
Если система стремится к согласованности, она может быть менее доступной в условиях разделения, так как все узлы должны видеть одни и те же данные. Если система стремится к доступности, она может позволить разным узлам иметь разные данные в условиях разделения, но это может привести к несогласованным данным.
Многие распределенные системы и базы данных выбирают компромисс между этими свойствами, и такие системы иногда описывают как CA, CP или AP в зависимости от того, на какие из трех свойств они делают упор.