Eventual consistency, CAP и PACELC

↑ 8.3 Микросервисы и распределённые системы · ← Предыдущая · → Следующая

Желательно~3 мин чтенияУровень: senior

Зачем это на собесе

Теоретическая основа распределённых систем: что можно гарантировать при сбоях и сетевых разделениях.

Объяснение

CAP-теорема: при сетевом разделении (Partition) распределённая система должна выбрать между согласованностью (Consistency) и доступностью (Availability). Разделения в сети неизбежны, поэтому реальный выбор — CP или AP при сбое.

ТипПоведение при разделенииПримеры
CPотказывает в части запросов, сохраняя согласованностьZooKeeper, etcd, Consul, HBase, MongoDB (по настройкам), PostgreSQL с синхронной репликацией
APпродолжает отвечать, возможны расхожденияCassandra, DynamoDB (по умолчанию), Riak

PACELC: если есть разделение (P) — выбираем A или C; иначе (Else) — компромисс между задержкой (Latency) и согласованностью (Consistency). Даже без сбоев строгая согласованность стоит задержки репликации.

Модели согласованности:

МодельГарантия
Линеаризуемость (strong)операции выглядят мгновенными, единый порядок
Sequential / Causalсохраняется порядок причинно-следственных связей
Read-your-writesклиент видит свои записи
Monotonic readsне «откатывается» назад при повторных чтениях
Eventual consistencyпри отсутствии новых изменений все реплики со временем сходятся

Практика:

  • Чтение с реплик даёт устаревшие данные (replication lag): критичные чтения — с лидера.
  • Конфликты записи: last-write-wins, векторные часы, CRDT, слияние на бизнес-уровне.
  • Кворумы: R + W > N даёт согласованное чтение.
  • UI с оптимистичными обновлениями и понятными состояниями («обрабатывается»).

Нюансы и подводные камни

  • CAP не про «выбери два из трёх» постоянно, а про поведение при разделении.
  • «Consistency» в CAP ≠ «Consistency» в ACID.
  • Eventual consistency не значит «когда-нибудь и как-нибудь»: определите допустимую задержку и метрику лага.
  • Часы разных серверов расходятся: не полагайтесь на wall-clock для порядка.

Практика

  1. Классифицируйте используемые вами БД и брокеры по CAP/PACELC.
  2. Воспроизведите read-your-writes проблему с репликой и решите её.
  3. Опишите допустимую задержку согласованности для разных сущностей системы.

Вопросы с ответами

Связанные темы