Size: a a a

Архитектура ИТ-решений

2020 April 27

PD

Phil Delgyado in Архитектура ИТ-решений
Вот конечный результат тут при повторе пары и не будет консистентным, только при повторе каждого метода отдельно.
источник

GK

Gennadiy Kruglov in Архитектура ИТ-решений
Phil Delgyado
Вот конечный результат тут при повторе пары и не будет консистентным, только при повторе каждого метода отдельно.
Значит неправильно выбран способ достижения консистентности. @romanvt описал как достичь консистентности в конкретном случае
источник

PD

Phil Delgyado in Архитектура ИТ-решений
Мы с Романом говорим ровно об одном и том же. Но двухфазный процесс защищает только от повтора каждой из фаз, но не обеспечивает консистентность при повторе всего процесса целиком (именно из--за неидемпотентности generateId)
источник

PD

Phil Delgyado in Архитектура ИТ-решений
При отсутствии внешних уникальных ключей сделать createObject идемпотентным вообще не возможно.
источник

EN

Evgeniy Nikonorov in Архитектура ИТ-решений
GenerateId(seed) Ж)
источник

PD

Phil Delgyado in Архитектура ИТ-решений
Так он все равно не идемпонтентен.
источник

PD

Phil Delgyado in Архитектура ИТ-решений
Реально консистентность. конечно, реализуется через какое-то сохранение фаз длинного процесса во внешнем надежном хранилище. Но требованя к фазам все равно надо как-то определить, а вот как корректно - я и в задумчивости )
источник

RT

Roman Tsirulnikov in Архитектура ИТ-решений
Phil Delgyado
Мы с Романом говорим ровно об одном и том же. Но двухфазный процесс защищает только от повтора каждой из фаз, но не обеспечивает консистентность при повторе всего процесса целиком (именно из--за неидемпотентности generateId)
Мы сейчас делаем процессы “многоходовки”, такой процесс проходит пакет шагов в рамках обшего контекста.
Таким образом контекст определяет процесс целиком.
источник

PD

Phil Delgyado in Архитектура ИТ-решений
Угу, и мы так же.
Но у тебя пара "генерация номера контекста" и "прохождение процесса" не идемпотентна.
источник

PD

Phil Delgyado in Архитектура ИТ-решений
Т.е. если запрос на создание контекста прилетит еще раз - то будет дублирование.
источник

PD

Phil Delgyado in Архитектура ИТ-решений
А если у тебя для createObject(id) этот id хранится в контексте - это не делает все идемпотентным, это просто добавляет еще один неидемпотентный шаг generateContext()
источник

RT

Roman Tsirulnikov in Архитектура ИТ-решений
так как создание контекста не совершает значимых операций, то мы им пренебрегаем. Неидемпотентен - ну и пусть, ничего от этого не сломается. “Пустой” контекст будет автоматически удален.
источник

GK

Gennadiy Kruglov in Архитектура ИТ-решений
Phil Delgyado
Мы с Романом говорим ровно об одном и том же. Но двухфазный процесс защищает только от повтора каждой из фаз, но не обеспечивает консистентность при повторе всего процесса целиком (именно из--за неидемпотентности generateId)
Всё, теперь понял
источник

PD

Phil Delgyado in Архитектура ИТ-решений
Roman Tsirulnikov
так как создание контекста не совершает значимых операций, то мы им пренебрегаем. Неидемпотентен - ну и пусть, ничего от этого не сломается. “Пустой” контекст будет автоматически удален.
Не столько принебрегаете, сколько избавляетесь от создания дублирующих процессов как-то еще.
Ну, там лимитом на нажатие пользователем кнопок и т.п.
источник

PD

Phil Delgyado in Архитектура ИТ-решений
Т.е. если клиент дважды нажал кнопочку или replay сделан до создания и запуска контекста - то дублирование будет.
источник

PD

Phil Delgyado in Архитектура ИТ-решений
Но разделить на createContextId и processData (id) - рабочее решение, так как createContext быстрый и понятный.
источник

GK

Gennadiy Kruglov in Архитектура ИТ-решений
Обычно метод Create (POST) неидемпонетный, то есть создание чего-либо в принципе довольно трудно сделать идемпотентным и прежде всего потому, что ещё нет id (который в последствии будет корелляционным). То есть проверки уже нужно делать по всем данным, по которым однозначно можно идентифицировать объект
источник

GK

Gennadiy Kruglov in Архитектура ИТ-решений
Иными словами, нужно озадачиться отсутствием дублей, что в принципе нелёгкая как логически так и по прозводительности задача (нужно сравнивать с множеством уже созданных объектов). Дубли удобно чистить пакетно автоматически или вручную, в том числе руками самого пользователя
источник

IV

Igor Voronin in Архитектура ИТ-решений
Gennadiy Kruglov
Обычно метод Create (POST) неидемпонетный, то есть создание чего-либо в принципе довольно трудно сделать идемпотентным и прежде всего потому, что ещё нет id (который в последствии будет корелляционным). То есть проверки уже нужно делать по всем данным, по которым однозначно можно идентифицировать объект
Внешний идентификатор решает проблему, например GUID. Ну или проверка по уникальным данным. Например, отпечатки пальцев :)
источник

GK

Gennadiy Kruglov in Архитектура ИТ-решений
Igor Voronin
Внешний идентификатор решает проблему, например GUID. Ну или проверка по уникальным данным. Например, отпечатки пальцев :)
Как решает?
источник