Что скрывает CAP-теорема: PACELC простыми словами
Все знают CAP-теорему: при сетевых сбоях приходится выбирать между доступностью и консистентностью. Но вот проблема: в реальности сбои случаются не так часто. Большую часть времени система работает нормально. И здесь CAP молчит. Что происходит, когда сеть не падает? Какие компромиссы мы делаем тогда? Ответ даёт теорема PACELC
⚠ Проблемы теоремы CAP
CAP теорема говорит нам о том, что при сетевом разделении (Partitioning), мы можем выбрать одно из двух свойств:
- 🟢 доступность (Availability) — система всегда отвечает на запросы, даже если данные неполные или устаревшие;
- 🔵 консистентность (Consistency) — все запросы к различным узлам возвращают либо актуальные данные, либо не возвращают вообще.
Теорема CAP рассматривает поведение системы во время сбоев. В реальных системах большую часть времени нет сетевого разделения. И в этих случаях нам также нужно искать компромиссы при проектировании.
Основная критика теоремы CAP:
- Упрощение — теорема предлагает выбирать только два свойства из трех и не учитывает сложные сценарии — частичные сбои или задержки.
- Бинарность — предлагает выбирать только между A и C. Хотя на практике, многие системы реализованы по модели слабой согласованности (например, eventual consistency).
- Не учитываются задержки — в современных системах это является критически важным параметром.
- Игнорирование поведения в штатных условиях — большую часть времени системы функционируют без сетевых проблем и выбор между доступностью (A) и консистентностью (С) присутствует всегда.
🧩 Теорема PACELC
Чтобы устранить недостатки теоремы CAP, был предложен более расширенный подход — PACELC. Она добавляет анализ поведения системы в отсутствии сетевого разделения, добавляя фактор задержки — Latency.
В отличие от теоремы CAP, PACELC добавляет описание поведения системы в нормальных условиях — в отсутствия сетевого разделения.
PACELC утверждает:
- 🚨 в условиях сетевого разделения (Partitioning), система должна выбирать между доступностью (Availability) и консистентностью (Consistency);
- ✅ в остальных случаях (Else) система сталкивается с выбором между низкой задержкой (Latency) и консистентностью данных (Consistency).
ELC — это ключевое дополнение, которое отражает реальные проблемы, с которыми сталкиваются при проектировании высокопроизводительных систем.
🗂 Какие бывают PACELС системы
PACELC позволяет классифицировать системы в двух режимах, в зависимости от условий и поведения, по четырем комбинациям:
PA/EL — в условиях сетевого разделения (P) выбирается доступность, в штатном режиме — низкую задержку. Пример: Apache Cassandra — предлагает высокую доступность, жертвуя строгой консистентностью.
PC/EC — при разделении выбирается консистентность (C), в обычном режиме также консистентность. Пример: Apache ZooKeeper — реализует консистентность в ущерб задержкам и доступности при сбоях.
PA/EC — в условиях сетевого сбоя реализуется доступность, но в нормальном режиме обеспечивается консистентность. Пример: MongoDB — в жертву приносится задержки ради консистентности при нормальной работе.
PC/EL — в условиях сетевого разделения выбирается консистентность, но в штатном режиме оптимизируют задержки. Очень редкий вид систем, условно можно предположить что Couchbase реализует этот тип.
🔎 Критика теоремы PACELC
Несмотря на преимущества и более широкий выбор компромиссов по сравнению с теоремой CAP, PACELC также подвергается критики, как и любая модель.
- Теорема по-прежнему упрощает реальность. И предполагает, что уровни рассматриваемых свойств бинарны. Например, конечная согласованность не может быть описана в рамках PACELC.
- Не учитываются другие важные аспекты проектирования — масштабируемость, стоимость хранения и энергопотребление, сложность реализации.
- Как и CAP, PACELC может ввести в заблуждение, создавая ощущение, что все распределенные системы должны четко классифицироваться только по 4 комбинациям.
- "Else" (E) — не всегда понятна, так как граница между штатным режимом и сетевым разделением может быть размытой и неявной (например, высокая задержка может выглядеть как сетевое разделение).
✅ Краткий вывод
PACELC — важное дополнение и расширение теоремы CAP. Она дает более полную и реалистичную модель для анализа и проектирования распределенных систем. Она помогает лучше понять поведение современных систем. Но вместе с тем она имеет свои ограничения и должна применяться с пониманием конкретных требований, а не как строгое руководство.
Подписывайся на мой канал в telegram