Size: a a a

Software Design/Architecture/Zen

2021 June 14

СП

Сергей Предводителев... in Software Design/Architecture/Zen
Непонятно как реализовывать.

Например, в application будет:

$this->transactionManager->begin();

try {
 $this->XRepository->save($x);
 $this->YRepository->save($y);

 $this->transactionManager->commit();
} catch (Exception $e) {
 $this->transactionManager->rollback();
 throw $e;
}


Как сделать реализацию TransactionManager, если мы не знаем какие конкретно репозитории будут использованы... Или запускать во всех хранилищах транзакции?
источник

ST

Serguei Tarassov in Software Design/Architecture/Zen
Само слово "транзакция" пришло в программирование из бизнеса в 1950-х годах, потому что нужно было поддерживать атомарность финансовых транзакций. Реализация может быть на каком угодно уровне
источник

ST

Serguei Tarassov in Software Design/Architecture/Zen
Тебе имеет смысл почитать спецификации OTS (object transactional service), все это было известно и 25 лет назад, проблема в невозможности реализовать гарантированные распределенные транзакции. Сейчас вот пытаются блокчейн к этому прикрутить.
источник

V

Viktor in Software Design/Architecture/Zen
А что, если у вас будет 2 разных бд и первая откатится, а вторая нет?
источник

СП

Сергей Предводителев... in Software Design/Architecture/Zen
незнаю
источник

VS

Vlad Sobenko in Software Design/Architecture/Zen
Ну в теории можно передвать репы или сущности в Tr manager, а там уже можно выйти на то какие репы\сущности в каких базах лежат.
источник

SP

Sergey Protko in Software Design/Architecture/Zen
блокчейн решает проблемы не распределенных транзакций а распределение ответственности - что бы нельзя было скомпромитировать систему из одной точки.
источник

SP

Sergey Protko in Software Design/Architecture/Zen
для распределенных транзакций придумали саги - как один из вариантов.
источник

SP

Sergey Protko in Software Design/Architecture/Zen
источник

SP

Sergey Protko in Software Design/Architecture/Zen
Будет повод с COBRA поразбираться
источник

SP

Sergey Protko in Software Design/Architecture/Zen
выглядит к слову этот OTS похожим на саги.
источник

SP

Sergey Protko in Software Design/Architecture/Zen
а не, просто двухфазный коммит
источник

ST

Serguei Tarassov in Software Design/Architecture/Zen
А еще раньше пытались решать задачу византийских генералов и даже нашли теоретические пределы невозможности реализации
источник

SP

Sergey Protko in Software Design/Architecture/Zen
а еще раньше решали halt problem и доказали что ее невозможно решить.

Проблема генералов в практическом смысле решается идемпотентностью операций (ретраи) и таймаутами. Это покрывает реальные кейсы.
источник

ST

Serguei Tarassov in Software Design/Architecture/Zen
В "практическом смысле" и двухфазный коммит как-то работает
источник

SP

Sergey Protko in Software Design/Architecture/Zen
работает, синхронно но работает. В этом его плюс и минус одновременно.
источник

SP

Sergey Protko in Software Design/Architecture/Zen
у саг например минус - сложность отладки на сложных взаимодействиях
источник

SP

Sergey Protko in Software Design/Architecture/Zen
но у человека выше проблема чуть другого толка. у него нет распределенных транзакций и просто надо разобраться как и где этими транзакциями управлять
источник

SP

Sergey Protko in Software Design/Architecture/Zen
реализации репозиториев существуют на том же уровне что и твой этот менеджер транзакций. Мы можем считать что у них есть общий unit of work. репозиторий достал что-то для операции - поместил в unit of work. Транзакшен менеджер коммитит изменения - запускает синк стэйта для агрегатов внутри unit of work. Так во всяком случае большинство этих хибернейтов работает.
источник

SP

Sergey Protko in Software Design/Architecture/Zen
дальше вопрос насколько сложно это все сделать и т.д.
источник