私の質問がこのサイトに適していて、広すぎないことを願っていますが、次のアーキテクチャの設計に問題があります。
私は2つのサイトを持っています。サイト 1 は、ユーザー間のクレジットの転送を担当します。サイト 2 は、これらのユーザーに、サイト 1 で所有するクレジットで支払うことができるサービス/製品を提供する責任があります。
サイト 1 で 1000 クレジットを持っているとします。サイト 2 で 50 クレジットのサービス/製品があり、ユーザーがサイト 1 で所有しているクレジットの量でそれを購入したいと考えています。
どちらのサイトも REST と通信します。したがって、たとえば、ユーザーがサービス/製品を購入したい場合、サイト 2 はその要求を準備し、それをサイト 1 に送信します。サイト 1 は取引を行い、取引が成功したことをサイト 2 に確認します (たとえば、ユーザーはサービス/製品に対して十分なクレジットを持っていました)。これらのクレジットは宛先に正常に転送されました)
ここがトリッキーな部分です。サイト 1 には、次のロジックがあります。
Begin transaction
update user set credits -= 50 where id = 1
update user set credits += 50 where id = 2
REST CALL (Site 2) Success
Site 2 response - OK, commit transaction
Commit
REST は別のサイトへの呼び出しであるため、トランザクションが完了するまでに時間がかかる場合があります。その間、トランザクションに対してテーブル全体がロックされていますか、それともユーザー 1 とユーザー 2 の行がロックされていますか? これは私のロジックを実装する適切な方法ですか? 何か不足していますか?
前もって感謝します。