Size: a a a

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

2020 April 27

MG

Maksim Gorshenin in Архитектура ИТ-решений
если я правильно понял, то CreateObject(id) - всегда идемпотентен, для него есть около костыль в виде GenerateId - который либо возвращает произвольный идентификатор с его регистрацией во внутренней логике, либо один и тот же идентификтор при выполнении каких-то условий, получается что сага создания объекта не идемпотентна, если часть этого процесса может возвращать разный результат
источник

RT

Roman Tsirulnikov in Архитектура ИТ-решений
Phil Delgyado
Коллеги, а есть умное название для условия "не строгой идемпотентности"  - того, что нужно для распределенных систем.
Например, createObject использовать нельзя, так как при его повторе будет сделана копия.
Но если разнести createObject на два метода: generateId и createObject(id), то каждый из них по отдельности уже можно безопасно повторять.
Но generateId - не идемпотентен, хотя и безопасен. Есть ли правильное слово для подобных требований к методам?
двухфазность,
двухфазная операция
источник

MG

Maksim Gorshenin in Архитектура ИТ-решений
и не совсем понятно, почему из-за проблем с сетью или с репликацией вообще нужны костыли, CreateObject(Id) - идемпотентен, значит если запрос не дошел до сервиса, то его легко повторить, если ответ не вернулся - легко повторить, идемпотентность же, если объект создан не на всех экземплярах хранилища - значит он имеет статус, накладывающий ограничения на его использование до момента синхронизации
То есть остается идемпотентность но не синхронность)
источник

DK

Daria Kaftan in Архитектура ИТ-решений
что-то мне это напоминает const функции в С++.
источник

DK

Daria Kaftan in Архитектура ИТ-решений
generateId потому безопасен, что не имеет связей с "небезопасными" методами. Что-то типа замкнутности.
источник

PD

Phil Delgyado in Архитектура ИТ-решений
Maksim Gorshenin
и не совсем понятно, почему из-за проблем с сетью или с репликацией вообще нужны костыли, CreateObject(Id) - идемпотентен, значит если запрос не дошел до сервиса, то его легко повторить, если ответ не вернулся - легко повторить, идемпотентность же, если объект создан не на всех экземплярах хранилища - значит он имеет статус, накладывающий ограничения на его использование до момента синхронизации
То есть остается идемпотентность но не синхронность)
CreateObject(id) - да, идемпотентен. А вот generateId - нет, про него и вопрос.
источник

PD

Phil Delgyado in Архитектура ИТ-решений
Roman Tsirulnikov
двухфазность,
двухфазная операция
Вот какие ограничения на фазы в двуфазной операции? Есть умное слово?
источник

MG

Maksim Gorshenin in Архитектура ИТ-решений
идемпотентный процесс с недетермининованным параметром?)
источник

PD

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

PD

Phil Delgyado in Архитектура ИТ-решений
Это как раз про то, что идемпотентность, как я понимаю, сохраняется при аггрегации вызовов.
А вот такая "безопасность" - вообще говоря нет.
источник

PD

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

RT

Roman Tsirulnikov in Архитектура ИТ-решений
Phil Delgyado
Вот какие ограничения на фазы в двуфазной операции? Есть умное слово?
Первая фаза stateless, вторая фаза совершает действие.
Первая фаза может проверять аргументы и создавать какой-нибудь временный контекст.

Первую фазу можно безопасно повторять потому что она не совершает действий, даже создание контекста будет временное, данные будут очищены
Вторую фазу можно безопасно повторять потому что она гарантированно совершается в рамках контекста
источник

GK

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

GK

Gennadiy Kruglov in Архитектура ИТ-решений
Иными словами, нет предмета для обсуждения.
источник

PD

Phil Delgyado in Архитектура ИТ-решений
Roman Tsirulnikov
Первая фаза stateless, вторая фаза совершает действие.
Первая фаза может проверять аргументы и создавать какой-нибудь временный контекст.

Первую фазу можно безопасно повторять потому что она не совершает действий, даже создание контекста будет временное, данные будут очищены
Вторую фазу можно безопасно повторять потому что она гарантированно совершается в рамках контекста
Первая не stateless, там меняется какой-то серверный счетчик типа identity. Просто не опасно меняется.
источник

PD

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

GK

Gennadiy Kruglov in Архитектура ИТ-решений
Phil Delgyado
Ну, идемпотентность - не про консистентность, как мне кажется, а именно про безопасность повтора.
А зачем нужна безопасность повтора?
источник

PD

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

GK

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

GK

Gennadiy Kruglov in Архитектура ИТ-решений
BASE
источник