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

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

Jepsen и модели консистентности

expert

Проект тестирования распределённых систем: иерархия моделей консистентности, Serializable vs Linearizable, известные находки.

Jepsen полезен тем, что проверяет не обещания системы, а ее поведение под реальными отказами. Для распределенных систем это и есть момент истины.

В реальной работе глава помогает формулировать проверяемые consistency-свойства для конкретного workload и перестает позволять команде слепо доверять vendor claims там, где цена ошибки слишком высока.

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

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

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

Помогает строить валидацию гарантий до инцидентов, а не полагаться только на vendor claims.

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

Показывает, как формулировать проверяемые consistency-свойства для конкретного workload.

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

Усиливает ответы практикой: как тестировать linearizability/serializability в реальной системе.

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

Выявляет несоответствие между заявленными и фактическими гарантиями под отказами сети.

Официальный сайт

Jepsen.io

Проект тестирования распределённых систем на корректность.

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

Jepsen — это независимый проект анализа и тестирования распределённых систем, созданный Кайлом Кингсбери (Kyle Kingsbury, aka "Aphyr"). Проект выявил критические ошибки в десятках популярных баз данных и стал де-факто стандартом проверки заявлений вендоров о консистентности.

Фундамент

TCP протокол

Jepsen моделирует сетевые сбои и разделения на транспортном уровне.

Читать обзор

Что такое Jepsen?

Инструмент тестирования

Jepsen — это Clojure-библиотека для тестирования распределённых систем. Она генерирует нагрузку, вносит сбои (network partitions, process crashes, clock skew) и проверяет, соблюдаются ли заявленные гарантии.

ClojureOpen SourceBlack-box testing

Серия отчётов

Каждый анализ публикуется как детальный отчёт: настройки тестирования, обнаруженные аномалии, реакция вендора. Отчёты стали обязательным чтением для архитекторов распределённых систем.

MongoDBPostgreSQLCassandraetcd+40 других

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

CAP теорема

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

Читать обзор

Почему Jepsen важен?

Разоблачение маркетинговых заявлений

Многие базы данных заявляют о "strong consistency" или "ACID", но на практике не выполняют эти гарантии. Jepsen выявил, что MongoDB теряла подтверждённые записи, RethinkDB допускала dirty reads, а Redis Cluster мог потерять данные даже без сбоев.

Стандартизация терминологии

Проект создал чёткую иерархию моделей консистентности, устранив путаницу между терминами из мира RDBMS (isolation levels) и распределённых систем (linearizability).

Улучшение качества систем

После публикации отчётов вендоры исправляют баги. Например, CockroachDB, TiDB и YugabyteDB активно работали с Jepsen для достижения реальной сериализуемости.

Источник

Jepsen: Consistency Models

Интерактивная диаграмма моделей консистентности.

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

Иерархия моделей консистентности

Jepsen создал полную иерархию моделей консистентности, показывающую как транзакционная изоляция (RDBMS) и линеаризуемость (распределённые системы) сходятся на вершине.

Иерархия моделей консистентности

Две параллельные ветки: Serializable (RDBMS) и Linearizable (distributed systems)

Источник: Jepsen.io
Strict Serializable
Serializable
Linearizable
Repeatable Read
Snapshot Isolation
Sequential
Cursor Stability
Monotonic Atomic View
Causal
Read Committed
PRAM
Read Uncommitted
Writes Follow Reads
Monotonic Reads
Monotonic Writes
Read Your Writes
RDBMS Isolation
Distributed R/W
Unavailable

Недоступна при сетевых сбоях. Узлы приостанавливают операции для обеспечения безопасности.

Sticky Available

Доступна на исправных узлах, если клиенты работают с теми же серверами.

Total Available

Доступна на всех исправных узлах, даже при полном отказе сети.

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

Serializable — из мира транзакционных СУБД (изоляция транзакций). Linearizable — из мира распределённых систем (атомарные операции чтения/записи). Они сходятся на вершине в Strict Serializable — самой строгой модели консистентности.

О Jepsen: Jepsen проводит хардкорные тесты распределённых баз данных на устойчивость к сбоям и корректность гарантий консистентности. Многие популярные системы (Cassandra, MongoDB, CockroachDB, Redis) проходили через анализ Jepsen.

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

PACELC теорема

Компромиссы между задержкой и консистентностью.

Читать обзор

Две ветки консистентности

Serializable (RDBMS)

Происходит из мира реляционных СУБД. Описывает уровни изоляции транзакций: Read Uncommitted → Read Committed → Repeatable Read → Serializable.

Фокус:

Как транзакции взаимодействуют друг с другом. Какие аномалии допускаются (dirty reads, phantom reads и т.д.)

Linearizable (Distributed)

Происходит из мира распределённых систем. Описывает атомарность операцийчтения и записи на нескольких узлах.

Фокус:

Выглядит ли распределённая система как один узел? Операции мгновенны и атомарны в глобальном времени.

Strict Serializable = Linearizable + Serializable

На вершине иерархии — Strict Serializable. Это комбинация обеих моделей: транзакции выполняются сериализуемо И в реальном времени (linearizability). Системы вроде Google Spanner достигают этого через TrueTime.

Ключевые модели консистентности

Linearizable

Unavailable during partition

Каждая операция выглядит мгновенной между вызовом и ответом. Все наблюдатели видят одну и ту же последовательность операций. Самая строгая модель для одиночных операций.

Serializable

Unavailable during partition

Транзакции выполняются как будто последовательно в каком-то порядке. Но этот порядок может не соответствовать реальному времени! Высший уровень изоляции в SQL.

Causal Consistency

Sticky Available

Причинно-связанные операции видны в правильном порядке. Если A → B (A случилось до B), все видят их в этом порядке. Достижима в AP-системах.

Eventual Consistency

Total Available

При отсутствии новых записей все реплики в конечном итоге сойдутся к одному значению. Не даёт гарантий о том, что вы прочитаете в конкретный момент. Самая слабая полезная модель.

Известные находки Jepsen

СистемаЗаявлениеРеальностьСтатус
MongoDBDurable writesПотеря подтверждённых записейFixed
CassandraLWT atomicityПотерянные и дублирующиеся операцииFixed
Redis ClusterConsistencyПотеря данных без сбоев сетиBy design
etcdLinearizableПодтверждено ✓Verified
CockroachDBSerializableПодтверждено ✓Verified
TiDBSnapshot IsolationAnomalies foundFixed

Полный список отчётов: jepsen.io/analyses

Как работает тестирование Jepsen

1

Setup

Развёртывание кластера на N узлах

2

Generate

Генерация операций (read, write, CAS)

3

Nemesis

Внесение сбоев (partitions, kills, clock skew)

4

Record

Запись истории всех операций

5

Check

Проверка: соответствует ли история модели?

Nemesis — ключевой компонент. Он имитирует реальные сбои: разрывает сеть между узлами, убивает процессы, сдвигает часы. Если система заявляет linearizability, она должна выдержать все эти сценарии.

Практические выводы

1. Не верьте маркетингу

"Strongly consistent", "ACID", "linearizable" — это конкретные термины с точными определениями. Проверяйте отчёты Jepsen или документацию вендора на предмет конкретных гарантий и известных ограничений.

2. Понимайте trade-offs

Более строгие модели консистентности имеют цену: недоступность во время сбоев (CAP) или высокие задержки (PACELC). Выбирайте модель исходя из требований приложения.

3. Тестируйте в условиях сбоев

Корректность системы проверяется не в идеальных условиях, а при сбоях. Используйте chaos engineering инструменты (Jepsen, Chaos Monkey, Toxiproxy) для проверки поведения вашей системы.

4. Отличайте isolation от consistency

Serializable isolation (RDBMS) ≠ Linearizable consistency (distributed). Первое про транзакции, второе про отдельные операции. Для полной корректности нужны оба: Strict Serializable.

Ресурсы для изучения

Jepsen — ваш союзник

Перед выбором базы данных для критичной системы — проверьте отчёты Jepsen. Если системы нет в списке, это не значит, что она надёжна — это значит, что её никто публично не проверял. Отсутствие доказательств багов ≠ доказательство отсутствия багов.

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

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