Оригинал
Telegram: book_cube
Оригинальный пост с разбором PACELC теоремы.
CAP теорема объясняет поведение системы во время сетевых сбоев. Но что происходит, когда всё работает нормально? Теорема PACELC расширяет CAP и описывает компромиссы распределённых систем в штатном режиме работы.
Связанная глава
CAP теорема
Фундаментальное ограничение распределённых систем.
Формулировка теоремы
if P then (A or C) else (L or C)
Формула PACELC
Если произошло разделение сети, система выбирает между:
В штатном режиме система выбирает между:
Фундамент
HTTP протокол
Задержка на уровне протокола влияет на компромисс L vs C.
Зачем нужна PACELC?
CAP теорема не объясняет, почему системы вроде Amazon Dynamo или Cassandra выбирают eventual consistency. Ведь сетевые разделения — редкость. Настоящая причина:
Ключевой инсайт
Eventual consistency используется не только на случай аварий, но и для снижения задержек в повседневной работе. Это и есть выбор «L over C» в части «Else» теоремы PACELC.
Классификация систем
PACELC даёт четыре категории систем в зависимости от их выбора в каждой ситуации:
Подробный разбор категорий
PA/EL — Скорость превыше всего
Системы этой категории жертвуют строгой консистентностью ради скорости и безотказности. При partition выбирают доступность, в обычном режиме — минимальные задержки.
PC/EC — Консистентность любой ценой
Всегда выбирают консистентность. При partition могут отказывать в обслуживании, в штатном режиме готовы терпеть высокие задержки ради согласованности.
PA/EC — Гибридный подход
При сбоях сохраняют доступность, но в штатном режиме стремятся обеспечить согласованность. Компромисс между надёжностью и корректностью.
PC/EL — Строгость при сбоях, скорость в норме
При partition выбирают консистентность (могут отказывать), но в обычном режиме работают максимально быстро, допуская временную рассогласованность.
История
Теорема предложена Даниэлем Абади (Daniel Abadi) в статье "Consistency Tradeoffs in Modern Distributed Database System Design".
Визуализация Trade-off
Latency vs Consistency Trade-off
Интерактивный график показывает позиционирование распределённых систем
Системы в левом нижнем углу приоритизируют скорость ответа, допуская временную рассогласованность данных между репликами.
Системы в правом верхнем углу гарантируют согласованность, но платят за это повышенными задержками из-за синхронизации.
Disclaimer: Позиции систем на графике — это качественные оценки, а не точные измерения. Реальные характеристики зависят от конфигурации, нагрузки, версии и сетевых условий.
Классификация PACELC основана на статье Daniel Abadi "Consistency Tradeoffs in Modern Distributed Database System Design" (2012) и общепринятой индустриальной классификации.
Источники классификации
| База данных | Категория | Источник |
|---|---|---|
Cassandra | PA/EL | Apache Docs |
DynamoDB | PA/EL | AWS Docs |
Riak | PA/EL | Riak Blog |
CouchDB | PA/EL | CouchDB Docs |
Redis Cluster | PA/EL | Redis Docs |
Voldemort | PA/EL | Voldemort Design |
ScyllaDB | PA/EL | ScyllaDB Docs |
MongoDB | PA/EC | MongoDB Docs |
Cosmos DB | PA/EC | Azure Docs |
Firebase RTDB | PA/EC | Firebase Docs |
PNUTS | PC/EL | VLDB Paper |
HBase | PC/EL | HBase Book |
FoundationDB | PC/EL | FDB Docs |
VoltDB | PC/EC | VoltDB Docs |
Spanner | PC/EC | Google Cloud |
CockroachDB | PC/EC | CRDB Docs |
YugabyteDB | PC/EC | YugabyteDB Docs |
TiDB | PC/EC | TiDB Docs |
PostgreSQL | PC/EC | PostgreSQL Docs |
MySQL Cluster | PC/EC | MySQL Docs |
Megastore | PC/EC | Google Research |
Подробнее
Jepsen и модели консистентности
Полная иерархия моделей консистентности от проекта Jepsen.
Модели консистентности: полная картина
PACELC говорит о выборе между Latency и Consistency, но что именно понимается под "консистентностью"? Проект Jepsen создал полную иерархию моделей, показывающую как транзакционная изоляция (RDBMS) и линеаризуемость (распределённые системы) сходятся на вершине.
Jepsen и модели консистентности
Иерархия моделей консистентности, Serializable vs Linearizable, тестирование распределённых систем
Ключевые выводы
- PACELC объясняет выбор eventual consistency в системах типа Dynamo — это не только про аварии
- Latency vs Consistency — ключевой trade-off для высоконагруженных систем в штатном режиме
- Большинство NoSQL баз — PA/EL, большинство традиционных СУБД — PC/EC
- Выбор категории зависит от бизнес-требований: финансы требуют PC/EC, социальные сети — PA/EL
