CAP-теорема утверждает, что в любой распределенной системе невозможно одновременно гарантировать три свойства: согласованность (Consistency), доступность (Availability) и устойчивость к разделению (Partition Tolerance). При проектировании распределенной системы приходится жертвовать одним из этих свойств.
Свойства:
- Согласованность (Consistency): Все узлы видят одни и те же данные в один и тот же момент времени. После записи данных, они сразу становятся доступны для чтения на всех узлах.
- Доступность (Availability): Система всегда доступна для чтения и записи. Каждый запрос к не вышедшему из строя узлу получает корректный ответ.
- Устойчивость к разделению (Partition Tolerance): Система продолжает работать, несмотря на временные сетевые сбои, которые приводят к разделению системы на изолированные сегменты.
Применение:
CAP-теорема помогает при выборе типа распределенной системы или базы данных в зависимости от приоритетов:
- Системы CP: Приоритет ставят на согласованность и устойчивость к разделению. При наличии сетевого разделения система может стать недоступной для записи, чтобы гарантировать согласованность данных. Примеры: ZooKeeper, etcd, классические реляционные базы данных с репликацией (в некоторых конфигурациях).
python
- Системы AP: Приоритет ставят на доступность и устойчивость к разделению. При сетевом разделении система остается доступной, но может возникнуть временная рассогласованность данных. Противоречия разрешаются после восстановления связи. Примеры: Cassandra, Couchbase, большинство NoSQL баз данных с eventual consistency.
python
- Системы CA: Приоритет ставят на согласованность и доступность, но не могут гарантировать работу при сетевых разделениях. Такие системы обычно строятся в сетях без разделений, что в реальных распределенных системах практически невозможно. По сути, большинство систем вынуждены выбирать между CP и AP, так как устойчивость к разделению является фундаментальным требованием в WAN (Wide Area Network) средах.
Выбор между CP и AP зависит от требований к системе: для критически важных данных, где потеря согласованности недопустима (например, банковские транзакции), предпочтительны CP-системы. Для систем, где приоритет отдается непрерывной доступности и возможна временная рассогласованность (например, рекомендательные сервисы, социальные сети), подходят AP-системы.