CAP теорема говорит: в распределённой системе невозможно одновременно гарантировать все три свойства — Consistency (все узлы видят одни данные), Availability (каждый запрос получает ответ), Partition tolerance (система работает при разрыве сети между узлами).
Partition tolerance обязателен в реальных системах — сеть всегда может порваться. Поэтому выбор сводится к CP или AP:
- CP (Consistency + Partition tolerance): при сетевом разрыве система отказывает в обслуживании, но не врёт. Пример: PostgreSQL с синхронной репликацией, etcd, ZooKeeper.
- AP (Availability + Partition tolerance): при сетевом разрыве система отвечает, но данные могут быть устаревшими. Пример: Cassandra, DynamoDB, DNS.