Информация об изменениях

Сообщение Re[37]: Помогите правильно спроектировать микросервисное при от 17.02.2026 14:28

Изменено 17.02.2026 14:33 ·

Re[37]: Помогите правильно спроектировать микросервисное при
Здравствуйте, Sinclair, Вы писали:

S>·>Я не предлагаю менять постановку задачи, а менять реализацию. Если нам нужен AoN режим (all-or-nothing) мы просто реализуем откат зарезервированных позиций при отмене зарезервированного (частично или нет, неважно) заказа.

S>·>Суть в том, что размер транзакции разумно ограничен, а не зависит от размера заказа.
S>К сожалению, у этого подхода есть семантические последствия.
S>Например, если два пользователя заказали товары А и Б, причём первый успел зарезервировать последний А, а второй успел зарезервировать последний Б, то в ACID один из них получит отказ, а другой заберёт всё.
S>А в вашем подходе оба заказа будут откачены, и мы получим двух недовольных кастомеров плюс непроданный товар на складе.
Так обычная сортировка по идентификатору товара — типичный приём обхода взаимоблокировок. Ну или retry логика.

S>·>Я согласен, что это требует бОльших усилий. Но если изначально закладываться на МСА-подход и понятие workflow уже есть, это практически бесплатно.

S>·>А в случае если у нас был изначально монолит, то дело плохо, конечно. Распилить код, рассчитывающий на acid-транзакции ничем неограниченной сложности — очень трудозатратно.
S>·>Это уже шаг второй — как именно workflow будет реагировать на событие "item resevation failed" — инициировать отмену AoN или переходить в Partial Fill Negotiation.
S>Ну с моей точки зрения делить транзакцию на ещё более мелкие гранулы, чем по границам (микро)сервисов — уже оверкилл, если только это не обосновывается бизнес-необходимостью.
Я, наверное, испорчен hft и прочим. Как-то само собой разумеющееся — атомарная транзакция должна быть минимальной.

S>Кстати, современные маркетплейсы типа Озона, емнип, при оформлении заказа запросто делят его на части типа "это уже зарезервировали, а вот это внезапно кончилось — мы переложили его обратно в корзину. Сообщить вам, когда оно появится в продаже"?

Угу. Оно. Partial Negotiation. Как такое уложить в мегатразнакцию
begin transaction;
update stock
update stock
commit transaction;
мне неясно.
Re[37]: Помогите правильно спроектировать микросервисное при
Здравствуйте, Sinclair, Вы писали:

S>·>Я не предлагаю менять постановку задачи, а менять реализацию. Если нам нужен AoN режим (all-or-nothing) мы просто реализуем откат зарезервированных позиций при отмене зарезервированного (частично или нет, неважно) заказа.

S>·>Суть в том, что размер транзакции разумно ограничен, а не зависит от размера заказа.
S>К сожалению, у этого подхода есть семантические последствия.
S>Например, если два пользователя заказали товары А и Б, причём первый успел зарезервировать последний А, а второй успел зарезервировать последний Б, то в ACID один из них получит отказ, а другой заберёт всё.
S>А в вашем подходе оба заказа будут откачены, и мы получим двух недовольных кастомеров плюс непроданный товар на складе.
Так обычная сортировка по идентификатору товара — типичный приём обхода взаимоблокировок. Это, кстати, must have и при формировании твоей мегатранзакции.
Ну или retry логика.

S>·>Я согласен, что это требует бОльших усилий. Но если изначально закладываться на МСА-подход и понятие workflow уже есть, это практически бесплатно.

S>·>А в случае если у нас был изначально монолит, то дело плохо, конечно. Распилить код, рассчитывающий на acid-транзакции ничем неограниченной сложности — очень трудозатратно.
S>·>Это уже шаг второй — как именно workflow будет реагировать на событие "item resevation failed" — инициировать отмену AoN или переходить в Partial Fill Negotiation.
S>Ну с моей точки зрения делить транзакцию на ещё более мелкие гранулы, чем по границам (микро)сервисов — уже оверкилл, если только это не обосновывается бизнес-необходимостью.
Я, наверное, испорчен hft и прочим. Как-то само собой разумеющееся — атомарная транзакция должна быть минимальной.

S>Кстати, современные маркетплейсы типа Озона, емнип, при оформлении заказа запросто делят его на части типа "это уже зарезервировали, а вот это внезапно кончилось — мы переложили его обратно в корзину. Сообщить вам, когда оно появится в продаже"?

Угу. Оно. Partial Negotiation. Как такое уложить в мегатразнакцию
begin transaction;
update stock
update stock
commit transaction;
мне неясно.