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

Обновлено: 3 мая 2026 г. в 06:53

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

эксперт

Как Jepsen проверяет заявленные гарантии распределённых систем: история операций, Nemesis, сетевые разделения, линеаризуемость, сериализуемость и реальные аномалии.

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

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

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

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

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

Помогает проверять гарантии до инцидентов, а не полагаться только на обещания поставщика.

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

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

Аргументация на интервью

Усиливает ответы практикой: как проверять линеаризуемость и сериализуемость в реальной системе.

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

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

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

Jepsen.io

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

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

Проект Jepsen связывает , , и с тем, что система делает в реальности, а не только обещает в документации.

Проверка строится вокруг , , и . Компонент вносит : , падения процессов и .

Jepsen — независимый проект анализа и тестирования распределённых систем, созданный Кайлом Кингсбери, известным как Aphyr. Он выявил критические ошибки в десятках популярных баз данных и стал практическим стандартом проверки заявленных гарантий консистентности.

Фундамент

Протокол TCP

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

Читать обзор

Что такое Jepsen?

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

Jepsen — Clojure-библиотека для тестирования распределённых систем. Она создаёт нагрузку, вносит сетевые разделения, завершает процессы, сдвигает часы и проверяет, соблюдаются ли заявленные гарантии.

ClojureОткрытый кодТестирование как чёрного ящика

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

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

MongoDBPostgreSQLCassandraetcd+40 других

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

CAP теорема

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

Читать обзор

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

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

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

Общий язык для гарантий

Проект выстроил понятную иерархию моделей консистентности и убрал путаницу между уровнями изоляции транзакций в СУБД и линеаризуемостью распределённых операций.

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

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

Источник

Jepsen: Consistency Models

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

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

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

Jepsen собрал иерархию моделей консистентности и показал, где сходятся две разные традиции: изоляция транзакций в реляционных СУБД и линеаризуемость операций в распределённых системах.

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

Две ветки: сериализуемость транзакций и линеаризуемость распределённых операций

Источник: Jepsen.io
Строгая сериализ.
Сериализуемость
Линеаризуемость
Повторяемое чтение
Изоляция снимка
Последовательная
Стабильность курсора
Атомарный вид
Причинная
Чтение подтвержд.
PRAM
Чтение неподтв.
Запись после чтения
Монотонные чтения
Монотонные записи
Свои записи
Изоляция транзакций
Распределённые чтения/записи
Недоступна при разделении

При сетевом разделении узлы могут остановить операции, чтобы сохранить корректность.

Доступна при закреплении

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

Доступна на исправных узлах

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

Ключевая мысль

Сериализуемость пришла из мира транзакционных СУБД. Линеаризуемость описывает атомарные чтения и записи в распределённых системах. Они сходятся на вершине в строгой сериализуемости — самой строгой модели консистентности.

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

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

PACELC теорема

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

Читать обзор

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

Сериализуемость транзакций

Эта ветка приходит из мира реляционных СУБД и описывает уровни изоляции транзакций: от чтения неподтверждённых данных до сериализуемого выполнения.

Фокус:

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

Линеаризуемость операций

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

Фокус:

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

Строгая сериализуемость = линеаризуемость + сериализуемость

На вершине иерархии находится строгая сериализуемость. Она совмещает обе модели: транзакции выполняются сериализуемо и при этом соблюдают реальный порядок операций. Системы вроде Google Spanner приближаются к этому через TrueTime.

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

Линеаризуемость

Недоступна при разделении сети

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

Сериализуемость

Недоступна при разделении сети

Транзакции выполняются так, будто идут последовательно в некотором порядке. Этот порядок не обязан совпадать с реальным временем. Самый строгий уровень изоляции SQL.

Причинная консистентность

Доступна при закреплении клиента

Причинно связанные операции видны в правильном порядке. Если событие A произошло до B, система не должна показывать B без его причины. Достижима в AP-системах.

Согласованность в конечном итоге

Доступна на исправных узлах

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

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

СистемаЗаявлениеРеальностьСтатус
MongoDBДолговечные записиПотеря подтверждённых записейИсправлено
CassandraАтомарность LWTПотерянные и дублирующиеся операцииИсправлено
Redis ClusterКонсистентностьПотеря данных без сетевого сбояТак устроено
etcdЛинеаризуемостьПодтверждено ✓Проверено
CockroachDBСериализуемостьПодтверждено ✓Проверено
TiDBИзоляция снимкаНайдены аномалииИсправлено

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

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

1

Подготовка

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

2

Нагрузка

Чтение, запись и операция сравнения-замены (CAS)

3

Nemesis

Разделения сети, остановки процессов и сдвиги часов

4

История

Запись всех вызовов, ответов и ошибок

5

Проверка

Сравнение истории с выбранной моделью

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

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

1. Не верьте обещаниям без проверки

Строгая консистентность, модель ACID и линеаризуемость — это точные гарантии, а не рекламные формулировки. Проверяйте отчёты Jepsen и документацию поставщика на конкретные ограничения.

2. Понимайте цену модели

Чем строже модель консистентности, тем выше цена: недоступность во время сетевого разделения по теореме CAP или рост задержки по теореме PACELC. Модель выбирают под требования приложения.

3. Тестируйте систему под отказами

Корректность проверяется не в идеальном окружении, а во время сбоев. Используйте инструменты хаос-инжиниринга, включая Jepsen, Chaos Monkey и Toxiproxy, чтобы увидеть фактическое поведение системы.

4. Отличайте изоляцию от консистентности

Сериализуемая изоляция в СУБД не равна линеаризуемой консистентности распределённой системы. Первое описывает транзакции, второе — отдельные операции. Для полной корректности нужны обе стороны: строгая сериализуемость.

Что изучить дальше

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

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

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

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