170 похожих чатов

Есть например сайт типа Кинопоиска. Там есть система биллинга, к которой

подключены разные интеграции (apple, google, оплата по карте).
Система, которая отвечает за список контента.

Как такое через микросервисы представить?

Допустим, разобьем на биллинг, интеграции и контент.

По пути бизнес-логики подписки нам нужно будет взаимодействовать между сервисами, т.е. завести подписку в биллинге, дождаться оплаты в интеграции, поменить в биллинге заказ как выполенный, а потом открыть контент пользователю.

Для этого потребуется довольно сложная система синхронизации, которая бы учитывала отказ на каждом шагу.

17 ответов

16 просмотров

У меня не хватит экспертизы в этой области чтобы выделить связные контекст к сожалению

Aleksandr-Razumov Автор вопроса
Igor Kuznetsov
У меня не хватит экспертизы в этой области чтобы в...

Там можно выделить агрегаты, но придется их все трогать в процессе заказа

Aleksandr Razumov
Там можно выделить агрегаты, но придется их все тр...

Да в этом кейсе без распределенной транзакции не обойтись, хотя по сути можно развязать логику на уровне интерфейса (топорно), чтобы он ходил в разные сервисы на бэке

Aleksandr-Razumov Автор вопроса
Igor Kuznetsov
Да в этом кейсе без распределенной транзакции не о...

Тогда клиент будет ответственный за консистентность

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

Aleksandr-Razumov Автор вопроса
Andrei 🦉 Sergeev
В вашем кейсе есть разные типы данных, к которым п...

Так нужна система которая гарантированно откроет контент, я не против eventual consistency

Aleksandr Razumov
Так нужна система которая гарантированно откроет к...

ну для этого не нужна распределенная транзакция и в принципе какие то сложные алгоритмы и все спокойно решается в рамках микросервисной архитектуры, которая еще даст большую гибкость и масштабируемость

Aleksandr Razumov
Слишком общие слова

ну какой пример такие и слова, в вашем примере вообще ничего сложного нет:)

Aleksandr Razumov
Это только на первый взгляд

Ну везде есть подводные камни, просто есть целые классы задач на порядок сложнее

Aleksandr Razumov
Например?

Задачи где реально требуется распределенная транзакция

Aleksandr-Razumov Автор вопроса
Andrei 🦉 Sergeev
Задачи где реально требуется распределенная транза...

Например если контент не получается открыть, нужно откатить оплату.

Aleksandr Razumov
Например если контент не получается открыть, нужно...

ну если только загонять открытие контента в одну транзакцию с оплатой и возвратом, по мне это выстрел себе в ногу)

Aleksandr-Razumov Автор вопроса
Andrei 🦉 Sergeev
ну если только загонять открытие контента в одну т...

Альтернатива это всякие компенсационные транзакции и прочие весёлости

А в чем принципиальное отличие от монолитной архитектуры? Вот у вас транзаха пошла, поехала оплата в банк, и прога упала(проц сгорел). Платеж ушел, транзаха незакоммичена

Похожие вопросы

Обсуждают сегодня

30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Карта сайта