有谁知道银行的跨行转帐是怎么保证交易的原子性和一致性?

最近在看《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帐号存款。


我没有任何银行项目经验,当然这都是我的想象和假设 :D
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值