有谁知道银行的跨行转帐是怎么保证交易的原子性和一致性?
最近在看《JavaTransactionDesignStrategies》,想到了对事务要求比较严格的银行间转帐这种事务,夸行转帐是怎么保证事务的原子性和一致性呢?首先我能想到的就是使用JTA,用两阶段提交,可是仔细一想,发现还是不能完整保证:
假设转帐步骤如下:
beginjtatransaction
从A行A用户扣款-->命名为A操作
往B行B用户存款-->命名为B操作
commitorrollback
由于使用了两阶段提交,所以提交事务时,将发生
preparedcommitA
preparedcommitB
commitA
commitB
假如在prepared都没有任何问题,然后commitA成功,commitB时发生网络故障,失败,然后试图rollbackA,发现与A数据库服务器网络也在这一瞬间发生故障,那就造成了从A扣款成功,但没能往B帐号存款。
我没有任何银行项目经验,当然这都是我的想象和假设
相关推荐
chaicheng0 2011-05-08
Icevivian 2020-11-13
yatou0 2020-10-29
潜心修行独立思考 2020-06-18
xxzz 2020-04-23
actuaryzx 2020-04-22
servicehot 2020-04-20
sanshamo 2020-04-19
zjjoy0 2020-04-17
zhangll00 2019-12-20
开发之路 2019-12-22
nan00zzu 2019-12-19
hacker0ne 2019-12-16
zhongdididi 2019-12-03
CodingNotes 2019-12-02
量化研究中心 2019-11-27
tft0 2019-11-28
clprosperity 2019-11-19