Eventual consistency, CAP и PACELC
↑ 8.3 Микросервисы и распределённые системы · ← Предыдущая · → Следующая
Зачем это на собесе
Теоретическая основа распределённых систем: что можно гарантировать при сбоях и сетевых разделениях.
Объяснение
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 для порядка.
Практика
- Классифицируйте используемые вами БД и брокеры по CAP/PACELC.
- Воспроизведите read-your-writes проблему с репликой и решите её.
- Опишите допустимую задержку согласованности для разных сущностей системы.
Вопросы с ответами
Что говорит CAP-теорема?
При сетевом разделении нельзя одновременно гарантировать и согласованность, и доступность.
Что добавляет PACELC?
Даже без разделения есть компромисс между задержкой и согласованностью.
Что такое eventual consistency?
Реплики сходятся к одному состоянию со временем, если новых изменений нет.