The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Гарантия консистентности двух и более состояний
Статья

  • описывает проблему гарантии полноты и неизбыточности при последовательной установке двух состояний;
  • выдвигает гипотезу о невозможности разрешения проблемы без участия состояний (без идемпотентности состояний);
  • предлагает Общее решение. Задача
  • Поток T должен установить два состояния S1 и S2.
  • S1 и S2 возвращают синхронный ответ при успехе сохранения и не более.
  • Требуется гарантировать полноту и не избыточность установки состояний. Проблема
  • Поток Т выполняет запись в S1.
  • При провале поток Т возвращает отказ.
  • При успехе поток Т должен выполнить запись в S2.
  • Начиная с этого момента возникает проблема неопределенности при ошибке установки S2 или крахе потока Т, состояние S1 уже установлено, а S2 не установлено; однозначно не определен результат исполнения потока T; повторный вызов потока Т не разрешит ситуацию. Гипотеза Не существует решения при котором поток Т гарантирует полноту и неизбыточность установки двух состояний, при том что состояния возвращают исключительно синхронный ответ о результате сохранения. Никакие механизмы со стороны Т не могут разрешить указанную проблему без идемпотентности S1. Варианты решения
  • Состояние S1 должно быть идемпотентным например: защита от дублированного получения данных; возможность оповещения T по его инициативе о результатах сохранения.
  • T должен обладать возможностью повтора установки состояний при отказе. Общее решение гарантии консистентности состояний Ниже перечислены рассматриваемые виды состояний:
  • S - (simple state) простое состояние без поддержки транзакций и идемпотентности, например: внешние сервисы; базы без идемпотентных проверок, с триггерами или автокоммитом; журналирование.
  • I - (idempotent state) - состояние с поддержкой идемпотентности: базы данных; сервисы; файлы.
  • T - (transact state) - состояния, поддерживающие транзакционную целостность: базы данных TSQL. Возможные комбинации Далее приведены возможные комбинации последовательной установки состояний в синхронном потоке, гарантия итоговой консистентности для различных вариантов и последствия сбоя в потоке между установкой состояний. Обязательным условием является повтор вызова потока при отказе на любой стадии. Пример: Поток получает сообщение из очереди, которая гарантирует повторяемость. Вызов потока из UI не гарантирует повторяемость события, так как пользователь получив ошибку, может не выполнить повторное действие. SS
  • Гарантия консистентности: нет
  • Пример: Push сообщения в очередь; Write в журнал
  • Последствия: Накопление дублей сообщений в очереди SI
  • Гарантия консистентности: нет
  • Пример: Commit сообщения очереди; Идемпотентный вызов сервиса
  • Последствия: Отсутствие гарантии вызова сервиса ST
  • Гарантия консистентности: нет
  • Пример: Commit сообщения очереди; Insert в базу
  • Последствия: Накопление дублей сообщений в очереди IS
  • Гарантия консистентности: да
  • Пример: Insert с предпроверкой в базу; Commit сообщения очереди
  • Последствия: Многократные попытки Insert II
  • Гарантия консистентности: да
  • Пример: Insert с предпроверкой в базу; Update с предпроверкой в базу
  • Последствия: Многократные попытки Insert IT
  • Гарантия консистентности: да
  • Пример: Вызов внешнего сервиса; Запись в базу
  • Последствия: Многократный вызов внешнего сервиса TS
  • Гарантия консистентности: нет
  • Пример: Insert в базу; Push в очередь
  • Последствия: Накопление дублей в БД TI
  • Гарантия консистентности: нет
  • Пример: Insert в базу; Запись с предпроверкой в базу
  • Последствия: Накопление дублей в БД TT
  • Гарантия консистентности: да
  • Пример: Insert в базу; Запись в базу в одной транзакции
  • Последствия: Полный откат транзакции Общие правила гарантии сохранения состояний Повторяемость вызова при любом отказе в потоке И идемпотентность предыдущего изменения состояния ИЛИ изменение всех состояний в единой транзакции. Ccылки статья на github
  •  
    11.10.2024 , Автор: johnthesmith
    Ключи: thread, transaction, lock / Лицензия: CC-BY
    Раздел:    Корень / Программисту и web-разработчику / Системы контроля версий и управления исходными текстами

    Обсуждение [ RSS ]
  • 1.1, Аноним (1), 12:16, 22/10/2024 [ответить]  
  • +/
    Напоминает оксюморон, мозможно, требует корректировки терминов и/или лучшего разъяснения, что имеет в виду автор.

    Идемпотентность - способность возвращать тот же результат при повторных вызовах, вроде реентерабельности функций.
    "Состояние" (в программировании) - как раз то, что нарушает реентерабельность/идемпотентность.

    Видеть эти два слова вместе, да ещё и говорить об "идемпотентности состояния". Напоминает оксюморон...

     
     
  • 2.2, Илья (??), 08:34, 23/10/2024 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Ещё бы знать, что такое оксюморон. Это же реп какой-то гавённый?
     
     
  • 3.5, Аноним (-), 16:44, 26/10/2024 Скрыто ботом-модератором     [к модератору]
  • +1 +/
     

  • 1.3, Анонон (?), 17:58, 25/10/2024 [ответить]  
  • +/
    Ну это понятно, код в студию
     
  • 1.4, Cupeeb (?), 11:48, 26/10/2024 [ответить]  
  • +1 +/
    Судя по выводам для TT гарантия консистентности должна стоять - ДА
     
     
  • 2.6, stillswamp (ok), 00:31, 27/10/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Верная правка. Спасибо.
     

  • 1.7, Аноним (7), 02:10, 01/11/2024 [ответить]  
  • +/
    CAP theorem
     


     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру