Граф знанийНастройки

Обновлено: 25 марта 2026 г. в 03:00

PACELC теорема

hard

Расширение CAP: компромиссы между задержкой и консистентностью в штатном режиме. Классификация систем: PA/EL, PC/EC, PA/EC, PC/EL.

CAP отвечает на вопрос про отказ, а PACELC про обычную жизнь системы. Именно это делает ее по-настоящему полезной: большую часть времени платят не за partition, а за повседневный баланс между задержкой и консистентностью.

В реальной работе глава помогает разделить политику steady-state и аварийного режима, чтобы не принимать одно и то же решение и для нормального пути, и для сети, которая уже начала ломаться.

В интервью и архитектурных обсуждениях она дает более зрелый язык: можно говорить о tail latency, вероятности конфликтов, цене reconciliation и о том, почему система медленная не только в аварии, но и в штатной работе.

Практическая польза главы

Практика проектирования

Расширяет CAP-подход в штатный режим: помогает выбрать рабочий баланс latency и consistency.

Качество решений

Позволяет проектировать отдельные policy для steady-state и для аварийных сценариев.

Interview-аргументация

Усиливает ответы сравнением L/C-стратегий и причин, почему одна стратегия лучше в данном контексте.

Риски и компромиссы

Фиксирует цену выбора: tail-latency, вероятность конфликтов и сложность reconciliation.

Оригинал

Telegram: book_cube

Оригинальный пост с разбором PACELC теоремы.

Перейти на сайт

CAP теорема объясняет поведение системы во время сетевых сбоев. Но что происходит, когда всё работает нормально? Теорема PACELC расширяет CAP и описывает компромиссы распределённых систем в штатном режиме работы.

Связанная глава

CAP теорема

Фундаментальное ограничение распределённых систем.

Читать обзор

Формулировка теоремы

if P then (A or C) else (L or C)

Формула PACELC

if P (Partition)

Если произошло разделение сети, система выбирает между:

A — AvailabilityилиC — Consistency
else E (Normal operation)

В штатном режиме система выбирает между:

L — LatencyилиC — Consistency

Фундамент

HTTP протокол

Задержка на уровне протокола влияет на компромисс L vs C.

Читать обзор

Зачем нужна PACELC?

CAP теорема не объясняет, почему системы вроде Amazon Dynamo или Cassandra выбирают eventual consistency. Ведь сетевые разделения — редкость. Настоящая причина:

Ключевой инсайт

Eventual consistency используется не только на случай аварий, но и для снижения задержек в повседневной работе. Это и есть выбор «L over C» в части «Else» теоремы PACELC.

Классификация систем

PACELC даёт четыре категории систем в зависимости от их выбора в каждой ситуации:

AAvailability
CConsistency
LLow Latency
PPartition

Подробный разбор категорий

PA/EL — Скорость превыше всего

Системы этой категории жертвуют строгой консистентностью ради скорости и безотказности. При partition выбирают доступность, в обычном режиме — минимальные задержки.

CassandraDynamoDBRiakCouchDB

PC/EC — Консистентность любой ценой

Всегда выбирают консистентность. При partition могут отказывать в обслуживании, в штатном режиме готовы терпеть высокие задержки ради согласованности.

VoltDBMegastoreGoogle Spanner

PA/EC — Гибридный подход

При сбоях сохраняют доступность, но в штатном режиме стремятся обеспечить согласованность. Компромисс между надёжностью и корректностью.

MongoDB (default)

PC/EL — Строгость при сбоях, скорость в норме

При partition выбирают консистентность (могут отказывать), но в обычном режиме работают максимально быстро, допуская временную рассогласованность.

PNUTS

История

2010

Теорема предложена Даниэлем Абади (Daniel Abadi) в статье "Consistency Tradeoffs in Modern Distributed Database System Design".

Визуализация Trade-off

Latency vs Consistency Trade-off

Интерактивный график показывает позиционирование распределённых систем

Низкая задержка
Высокая задержка
Строгая консистентность
Eventual
PC/EC зона
PA/EL зона
Низкая задержка (EL)

Системы в левом нижнем углу приоритизируют скорость ответа, допуская временную рассогласованность данных между репликами.

Строгая консистентность (EC)

Системы в правом верхнем углу гарантируют согласованность, но платят за это повышенными задержками из-за синхронизации.

Low Latency
trade-off
Strong Consistency

Disclaimer: Позиции систем на графике — это качественные оценки, а не точные измерения. Реальные характеристики зависят от конфигурации, нагрузки, версии и сетевых условий.

Классификация PACELC основана на статье Daniel Abadi "Consistency Tradeoffs in Modern Distributed Database System Design" (2012) и общепринятой индустриальной классификации.

Источники классификации

База данныхКатегорияИсточник
Cassandra
PA/ELApache Docs
DynamoDB
PA/ELAWS Docs
Riak
PA/ELRiak Blog
CouchDB
PA/ELCouchDB Docs
Redis Cluster
PA/ELRedis Docs
Voldemort
PA/ELVoldemort Design
ScyllaDB
PA/ELScyllaDB Docs
MongoDB
PA/ECMongoDB Docs
Cosmos DB
PA/ECAzure Docs
Firebase RTDB
PA/ECFirebase Docs
PNUTS
PC/ELVLDB Paper
HBase
PC/ELHBase Book
FoundationDB
PC/ELFDB Docs
VoltDB
PC/ECVoltDB Docs
Spanner
PC/ECGoogle Cloud
CockroachDB
PC/ECCRDB Docs
YugabyteDB
PC/ECYugabyteDB Docs
TiDB
PC/ECTiDB Docs
PostgreSQL
PC/ECPostgreSQL Docs
MySQL Cluster
PC/ECMySQL Docs
Megastore
PC/ECGoogle 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

Связанные главы

Чтобы отмечать прохождение, включи трекинг в Настройки