К основному содержимому
Распределённые системы · Лекция 07

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    Теперь SQL: те же вопросы, другая модель хранения.

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

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

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

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

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

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

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

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

  13. 13. Подготовка сохраняет обязанность после перезапуска

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

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

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

  15. 15. Тайм-аут после подготовки не разрешает отмену

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

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

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

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

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

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

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

  19. 19. Промежуточное состояние получает собственный статус

    Потерянный ответ не равен ни успеху, ни отмене.

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

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

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

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

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

    Ретранслятор повторит событие с тем же eventId.

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

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

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

    Лимит 1, оба чтения count=0, quota mod_revision=17: докажите инвариант.

    Найти write skew

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

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

    Отличить компенсацию от отката

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

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

  26. 26. После лекции вы сможете

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

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

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