К основному содержимому
ВШЭ · Лекция 07

Транзакции между сервисами

Как сохранить бизнес-инвариант при конкуренции и частичном выполнении?

Распределённые системы · ВШЭ · 07

Содержание слайдов

  1. 1. Транзакции между сервисами

    Как сохранить бизнес-инвариант при конкуренции и частичном выполнении?

  2. 2. Резервирование защищает бизнес-инвариант

    Две задачи претендуют на один ресурс.

  3. 3. В стенде атомарность заканчивается в etcd

    Один Txn связывает ключи создания задачи.

  4. 4. Атомарность не выбирает порядок конкурентов

    Неделимая фиксация ещё может нарушить общий инвариант.

  5. 5. Название уровня требует конкретной истории

    Сравниваем наблюдения, а не слова поставщика.

  6. 6. Две записи могут затереть одно увеличение

    Чтение и изменение разделены во времени.

  7. 7. Сравнение версии защищает принятое решение

    Изменение разрешено только для прочитанного состояния.

  8. 8. Согласованный снимок может быть недостаточен

    Одинаковое прошлое не объединяет независимые записи.

  9. 9. Разные строки могут нарушить одно ограничение

    Каждая транзакция права относительно своего снимка.

  10. 10. Сериализуемость допускает отказ и повтор

    Система отвергает несовместимую конкурентную историю.

  11. 11. Общий инвариант подсказывает границу данных

    Совместное решение дешевле внутри одной транзакции.

  12. 12. 2PC разделяет подготовку и решение

    Готовность участника ещё не означает commit.

  13. 13. Prepared сохраняет обязанность после перезапуска

    Участник фиксирует достаточно состояния для решения.

  14. 14. Решение должно пережить повторную доставку

    Commit или abort сохраняется до уведомления участников.

  15. 15. Тайм-аут prepared не разрешает отмену

    Решение мог получить другой участник.

  16. 16. Paxos и 2PC имеют разные обязанности

    Репликация решения не объединяет бизнес-границы автоматически.

  17. 17. Сага делает промежуточные результаты явными

    Локальные фиксации становятся видны до завершения процесса.

  18. 18. Компенсация сохраняет чужую работу

    Отмена резерва не восстанавливает старый снимок.

  19. 19. Неопределённость получает собственный статус

    Пользователь должен видеть допустимое промежуточное состояние.

  20. 20. Две отдельные записи оставляют окно потери

    База и брокер не разделяют один commit.

  21. 21. Outbox фиксирует намерение вместе с задачей

    Публикация становится восстанавливаемой работой.

  22. 22. Подтверждение брокера тоже может потеряться

    Relay повторит событие с тем же eventId.

  23. 23. Каждый сбой оставляет известный путь продолжения

    Проверяем долговечное состояние на границах.

  24. 24. Исправьте резерв и доставку намерения

    Докажите инвариант на двух конкурентных попытках.

    Найти write skew

    Выбрать атомарную границу

    Разобрать потерянный ответ

  25. 25. Гарантия начинается с границы инварианта

    Выбирайте механизм по допустимому промежуточному состоянию.

  26. 26. Решения для нашего сервиса

    Показать нарушение инварианта конкурентной историей.

    Различить локальную транзакцию, 2PC и сагу.

    Объяснить устойчивое намерение и повторную публикацию.