Консенсус и координация
Как сменить лидера, сохранив подтверждённую историю?
Содержание слайдов
1. Консенсус и координация
Как сменить лидера, сохранив подтверждённую историю?
2. Два узла могут считать себя лидерами
Безопасность нельзя основывать только на локальном убеждении.
3. Одинаковый журнал задаёт одинаковые переходы
Детерминированные автоматы применяют команды по порядку.
4. Term монотонно отделяет попытки лидерства
Больший term заставляет узел отказаться от старой роли.
5. Для пяти участников большинство равно трём
Любые два большинства фиксированного состава пересекаются.
6. Выборы требуют большинства голосов в одном term
Тайм-аут запускает попытку, а не объявляет смерть.
7. Свежесть сравнивает последний term раньше длины
При равных последних term сравнивают последний index.
8. Index задаёт позицию, term — происхождение записи
Команда и два числа имеют разные роли.
9. AppendEntries начинает с проверки общего префикса
Follower проверяет prevLogIndex и prevLogTerm.
10. Голос и журнал сохраняются до зависимого ответа
После перезапуска узел не должен забыть обязательства.
11. Лидер считает большинство для записи своего term
После фиксации применяют весь предшествующий префикс по порядку.
12. Старый term нельзя фиксировать одним подсчётом копий
Figure 8 показывает допустимую перезапись такого хвоста.
13. Зафиксированная новая запись закрепляет старый префикс
No-op текущего term тоже является записью журнала.
14. Большинство может выбрать лидера без меньшинства
A,B изолированы от C,D,E.
15. Старый лидер не должен выдавать строгий ответ из памяти
Он мог не узнать о новой фиксации большинства.
16. Вернувшийся узел заменяет только конфликтующий хвост
Больший term снимает старые полномочия.
17. Принять, выбрать и узнать — разные события
Paxos делает эти границы явными.
18. FLP ограничивает универсальное завершение
Детерминированность; асинхронность; надёжная доставка; один возможный crash-stop.
19. Для продвижения обмен должен успевать до новых выборов
broadcastTime ≪ electionTimeout ≪ MTBF — ориентир статьи.
20. Сохранённый журнал не узнаёт намерение клиента сам
Потеря ответа требует того же ключа операции.
21. Ресурс сам проверяет поколение владельца
Получить lock недостаточно, чтобы остановить старый запрос.
22. Поздний старый токен отклоняется после нового
Учебные поколения: A=41, B=42.
23. Незафиксированный X может уступить место Y
X находится только на A,B; Y фиксируется на C,D,E.
24. Определите фиксацию, чтение и судьбу хвоста
Пять узлов, общий index1, разделение A,B | C,D,E.
25. Стенд проверяет данные, доступность и восстановление отдельно
Три узла etcd дают разделение 2/1.
Подтверждённые задачи сохранены
Меньшинство не фиксирует записи
Режим чтения указан
Отставший узел догнал
26. Решения для нашего сервиса
Определить фиксацию записи с учётом term.
Проследить выборы и восстановление конфликтующего хвоста.
Разделить консенсус журнала и защиту внешнего ресурса.