Прямой ответ
Eventual consistency — модель согласованности, при которой данные становятся согласованными со временем (consistency — «eventual consistency» — consistency — incident — «со временем согласуются» — consistency), зачем: доступность в распределенных системах (consistency — «доступность важнее согласованности» — consistency — incident — «доступность» — consistency — postgres — «AP системы» — consistency — CAP); модели согласованности (consistency — «модели» — consistency): (1) Strong consistency (consistency — «сильная согласованность» — consistency — incident — «все чтения видят последнюю запись» — consistency — postgres — «линеаризуемость» — consistency — CAP — «CP системы» — consistency — «ZooKeeper, etcd» — consistency); (2) Eventual consistency (consistency — «eventual consistency» — consistency — incident — «со временем согласуются» — consistency — postgres — «AP системы» — consistency — CAP — «Cassandra, DynamoDB» — consistency — Cassandra — «eventual» — consistency); (3) Causal consistency (consistency — «причинная согласованность» — consistency — incident — «причинно-следственные связи» — consistency — postgres — «слабее strong» — consistency — CAP — «COPS, Eiger» — consistency — «причинные связи» — consistency); (4) Read-your-writes consistency (consistency — «чтение своих записей» — consistency — incident — «свои записи видны» — consistency — postgres — «сильнее eventual» — consistency — CAP — «Cassandra» — consistency — Cassandra — «read-your-writes» — consistency); когда выбирать (consistency): Strong (consistency — «когда важна согласованность» — consistency — incident — «согласованность критична» — consistency — postgres — «финансы» — consistency — CAP — «CP» — consistency), Eventual (consistency — «когда важна доступность» — consistency — incident — «доступность критична» — consistency — postgres — «соцсети» — consistency — CAP — «AP» — consistency — Cassandra); антипаттерны: игнорировать модель (consistency — «игнорировать согласованность» — consistency — incident — «проблемы» — consistency — postgres — «понимать модель» — consistency), неправильный выбор (consistency — «неправильная модель» — consistency — incident — «проблемы» — consistency — postgres — «правильная модель» — consistency).
Практика: модели согласованности
Strong consistency (consistency — ZooKeeper (consistency — «ZooKeeper — strong» — consistency — postgres — «сильная согласованность» — consistency — incident — «линеаризуемость» — consistency — CAP); Eventual consistency (consistency — Cassandra (consistency — «Cassandra — eventual» — consistency — postgres — «eventual» — consistency — incident — «со временем» — consistency — CAP — Cassandra); Уровни согласованности (consistency — Cassandra (consistency — CONSISTENCY QUORUM (consistency — «уровень согласованности» — consistency — postgres — «уровни» — consistency — incident — «выбор уровня» — consistency — Cassandra); Выбор (consistency — по задаче (consistency — «выбор по задаче» — consistency — postgres — «выбор» — consistency — incident — «по задаче» — consistency — CAP).
Практический сценарий: выбор модели согласованности
Контекст: распределенная система (postgres — нужно выбрать (incident — consistency), боль: компромисс (consistency — «согласованность vs доступность» — consistency — incident — «компромисс» — consistency — postgres); решение — eventual consistency: (1) анализ (consistency — что важнее (consistency — «согласованность или доступность» — consistency — postgres — «анализ» — consistency — incident); (2) strong (consistency — если важна согласованность (consistency — «ZooKeeper» — consistency — postgres — «strong» — consistency — CAP); (3) eventual (consistency — если важна доступность (consistency — «Cassandra» — consistency — postgres — «eventual» — consistency — CAP — Cassandra); (4) реализация (consistency — выбор системы (consistency — «выбор системы» — consistency — postgres — «реализация» — consistency — incident); результат: выбор сделан (consistency — «strong или eventual» — consistency — incident — «компромисс понятен» — consistency — postgres — «система выбрана» — consistency); вывод: eventual consistency решили задачу (понимание моделей — consistency — ADR — «игнорировать модель» — антипаттерн — postgres — понимать модель — consistency — техдолг).
FAQ
Что такое eventual consistency и какие модели согласованности существуют? Eventual consistency (consistency — модель согласованности (consistency — «eventual consistency» — consistency — incident — «со временем согласуются» — consistency — postgres); модели (consistency): Strong (consistency — «сильная согласованность» — consistency — incident — «все чтения видят последнюю запись» — consistency — postgres — CAP), Eventual (consistency — «eventual consistency» — consistency — incident — «со временем согласуются» — consistency — postgres — CAP — Cassandra), Causal (consistency — «причинная согласованность» — consistency — incident — «причинно-следственные связи» — consistency — postgres — CAP), Read-your-writes (consistency — «чтение своих записей» — consistency — incident — «свои записи видны» — consistency — postgres — CAP — Cassandra); «игнорировать модель» — антипаттерн (проблемы — postgres — понимать модель — consistency — ADR — техдолг).
Как выбрать между strong и eventual consistency? Выбор (consistency — по задаче (consistency — «выбор по задаче» — consistency — incident — «по задаче» — consistency — postgres); как: strong (consistency — «когда важна согласованность» — consistency — incident — «согласованность критична» — consistency — postgres — «финансы» — consistency — CAP), eventual (consistency — «когда важна доступность» — consistency — incident — «доступность критична» — consistency — postgres — «соцсети» — consistency — CAP — Cassandra); «неправильный выбор» — антипаттерн (проблемы — postgres — правильный выбор — consistency — ADR — техдолг).
Как eventual consistency реализуется в Cassandra?
Реализация (consistency — в Cassandra (consistency — «реализация» — consistency — incident — «реализация» — consistency — postgres — Cassandra); как: репликация (consistency — «данные реплицируются» — consistency — incident — «репликация» — consistency — postgres — «реплики» — consistency — Cassandra), уровни согласованности (consistency — CONSISTENCY QUORUM (consistency — «уровни» — consistency — postgres — «уровни» — consistency — incident — «выбор уровня» — consistency — Cassandra), anti-entropy repair (consistency — «исправление несогласованности» — consistency — incident — «repair» — consistency — postgres — «со временем» — consistency — Cassandra); «игнорировать реализацию» — антипаттерн (проблемы — postgres — понимать реализацию — consistency — ADR — техдолг).
Какие проблемы возникают при eventual consistency и как их решать?
Проблемы (consistency — устаревшие данные (consistency — «устаревшие данные» — consistency — incident — «устаревшие» — consistency — postgres — CAP), конфликты (consistency — «конфликты записи» — consistency — incident — «конфликты» — consistency — postgres — CAP — Cassandra); как решать: выбор уровня (consistency — CONSISTENCY QUORUM (consistency — «уровень согласованности» — consistency — postgres — «уровни» — consistency — incident — «выбор уровня» — consistency — Cassandra), разрешение конфликтов (consistency — «last write wins» — consistency — incident — «конфликты» — consistency — postgres — «разрешение» — consistency — Cassandra), приложение (consistency — «приложение обрабатывает» — consistency — incident — «приложение» — consistency — postgres — «обработка» — consistency — CAP); «игнорировать проблемы» — антипаттерн (проблемы — postgres — решать проблемы — consistency — ADR — техдолг).
Источники: Wikipedia (eventual consistency), Cassandra docs, Martin Fowler (patterns) — ссылки в шапке.