Практикум по сбоям и контрактам

Восстановление состояния и границы доставки

Курс для инженеров, которые разбирают последствия сбоя: откуда база начинает повтор журнала, при каких условиях узел получает голос на выборах лидера и когда доставка «не более одного раза» вообще допустима.

Средний уровень50 минут3 модуля6 вопросов
После курса

Что вы сможете сделать

  1. Отделять позицию REDO контрольной точки от записи контрольной точки и фиксации транзакции.
  2. Фильтровать голоса и восстанавливать состояние узла перед выбором лидера Raft.
  3. Принимать контракт доставки только при явной допустимости потери и запрете повторной выдачи.
Модуль 1 из 3

Модуль 1. Контрольная точка и начало REDO

При восстановлении важно отделять служебную позицию REDO от самой записи контрольной точки и от фиксации транзакции.

  • Запись последней контрольной точки содержит служебную позицию REDO; после сбоя восстановление использует указанное ею известное начало, а запись контрольной точки остаётся отдельным объектом.

  • Фиксация транзакции не требует отдельной контрольной точки: надёжно сохранённый WAL допускает отложенную запись страниц данных.

  • Выбор позиции REDO и вопрос о сохранности фиксации связаны восстановлением, но описывают разные факты контрольной точки и WAL.

Модуль 2 из 3

Модуль 2. Голоса, состояние и свежесть журнала

Безопасный выбор лидера требует считать подходящие голоса в одном сроке, вернуть устойчивое состояние после перезапуска и сравнить журналы по правилам Raft.

  • Кандидат становится лидером после большинства голосов в новом сроке, а один сервер не голосует более одного раза за срок.

  • После перезапуска сохранённые currentTerm и votedFor возвращают ограничение одного голоса до обработки следующего выборного RPC.

  • Свежесть журнала определяется сначала сроком последней записи, а при равенстве сроков — индексом или длиной журнала.

  • Подсчёт большинства, восстановление состояния и сравнение журнала отвечают на разные вопросы одного выборного протокола.

Модуль 3 из 3

Модуль 3. Когда подходит доставка не более одного раза

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

  • Доставка не более одного раза допускает потерю, но не повторную выдачу одного сообщения в заявленной области действия.

  • При фиксации позиции до обработки сбой между этими действиями может оставить сообщение необработанным и потерянным.

  • Пригодность контракта проверяют по допустимости потери и запрету повторной выдачи, а не по обещанию успешной обработки ровно один раз.

Финишная прямая

Проверьте инженерное мышление

Вопросы проверяют не память на аббревиатуры, а умение не делать лишних выводов.

01После сбоя последняя запись контрольной точки содержит служебную позицию, с которой должен начинаться REDO; WAL и накопитель доступны. Как выбрать начало восстановления, сохранив различие между контрольной точкой и фиксацией транзакции?
02В полном кластере Raft с фиксированным составом один кандидат запрашивает голос в одном сроке. От одного узла пришёл повторный ответ; другой узел дал голос этому кандидату в том же сроке, третий — другому кандидату в том же сроке, а ещё один ответ относится к прежнему сроку. Как подготовить подсчёт перед проверкой большинства?
03Узел Raft перезапускается после сбоя. До остановки currentTerm, votedFor и журнал были сохранены в устойчивом хранилище, а релевантный журнал не повреждён. Что сделать до обработки первого RequestVote или AppendEntries?
04При проверке RequestVote два кандидата имеют разные последние записи. У одного срок последней записи новее, но журнал короче; у другого срок старее, но журнал длиннее. При прочих равных какое сравнение определяет свежесть журнала?
05Команда обрабатывает независимые обновления телеметрии. В её заявленном контракте допускается потеря отдельного сообщения и запрещена повторная выдача. Потребитель сначала фиксирует позицию, а потом выполняет обработку. После сбоя между этими шагами какой вывод верен при выборе доставки?
06В PostgreSQL предлагают перед каждой фиксацией сначала записывать отдельную контрольную точку и сбрасывать все изменённые страницы. WAL, необходимый для фиксации, надёжно сохраняется. Как оценить это требование?

Следующий шаг

Сформулируйте задачу и уточните требования к своей системе.

Подготовить состав проекта

Откроется черновик вопроса. Отправьте его, когда будете готовы.

Проверяемая база

Источники курса

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

  • Официальная документация

    PostgreSQL 18 Documentation: Write-Ahead Logging

    PostgreSQL Global Development Group · PostgreSQL 18, Chapter 28.3

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

    Открыть первоисточник
  • Официальная документация

    PostgreSQL 18 Documentation: 28.5 WAL Configuration

    PostgreSQL Global Development Group · PostgreSQL 18, Chapter 28.5

    Отдельная страница PostgreSQL 18, раздел 28.5: описывает сброс изменённых страниц, запись контрольной точки и позиции REDO, а также компромисс частоты контрольных точек между нагрузкой ввода-вывода и объёмом восстановления.

    Открыть первоисточник
  • Первичная публикация

    In Search of an Understandable Consensus Algorithm (Extended Version)

    Stanford University / USENIX · Ongaro and Ousterhout, USENIX ATC 2014 extended paper

    Первичное описание Raft: leader election, replicated log, commit majority и safety.

    Открыть первоисточник
  • Официальная документация

    Apache Kafka 4.0 Design

    Apache Software Foundation · Apache Kafka 4.0 documentation

    Определяет log ordering, producer idempotence, delivery semantics и scope exactly-once processing.

    Открыть первоисточник
Сообщить об ошибке

Опишите проблему — постараемся исправить как можно скорее.

Спасибо!

Получили ваше сообщение.
Подтвердите действие