有谁知道银行的跨行转帐是怎么保证交易的原子性和一致性?
程序员文章站
2022-06-03 18:18:22
...
最近在看《Java Transaction Design Strategies》,想到了对事务要求比较严格的银行间转帐这种事务,夸行转帐是怎么保证事务的原子性和一致性呢?首先我能想到的就是使用JTA,用两阶段提交,可是仔细一想,发现还是不能完整保证:
假设转帐步骤如下:
begin jta transaction
从A行A用户扣款 -->命名为A操作
往B行B用户存款 -->命名为B操作
commit or rollback
由于使用了两阶段提交,所以提交事务时,将发生
prepared commit A
prepared commit B
commit A
commit B
假如在prepared都没有任何问题,然后commit A成功,commitB时发生网络故障,失败,然后试图rollback A,发现与A数据库服务器网络也在这一瞬间发生故障,那就造成了从A扣款成功,但没能往B帐号存款。
我没有任何银行项目经验,当然这都是我的想象和假设
假设转帐步骤如下:
begin jta transaction
从A行A用户扣款 -->命名为A操作
往B行B用户存款 -->命名为B操作
commit or rollback
由于使用了两阶段提交,所以提交事务时,将发生
prepared commit A
prepared commit B
commit A
commit B
假如在prepared都没有任何问题,然后commit A成功,commitB时发生网络故障,失败,然后试图rollback A,发现与A数据库服务器网络也在这一瞬间发生故障,那就造成了从A扣款成功,但没能往B帐号存款。
我没有任何银行项目经验,当然这都是我的想象和假设
上一篇: 大专生自学大数据到找到工作的心得
下一篇: 说实话也会付出代价