`
balaschen
  • 浏览: 192222 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

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

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


我没有任何银行项目经验,当然这都是我的想象和假设
分享到:
评论
41 楼 langds 2007-05-14  
PS:银行会定期地进行扎账,这个扎账过程很复杂且耗时,一般需要一个晚上的时间系统才能结算完一个分行的数量.
通过扎账就可以发现系统的借贷不平问题.
40 楼 langds 2007-05-14  
银行的交易处理都不会用到我们常说的事务.银行里的大多交易是跨多个系统和数据库处理的,因此光靠一般的事务是解决不了问题的.
简单说来,银行对交易的原子保证一般是通过"冲正"来处理,
对于跨行或批量数据交易,都是通过文件批量传送,并加上冲正和对账.这样交差验证后错误率就降低了,如果有错,会在第二天以后通知客户,或退帐.
而这些环节里有一个非常重要的东东:流水. 如交易流水,帐户变更流水等.在人工处理里就全靠这些流水来处理.
比如,你在ATM机上取钱时,如果帐被划走了,但钱没有吐出来,那银行在夜间对账时就会借贷不平,然后再通过查询流水便可以找到出问题的账户.
39 楼 balaschen 2007-05-14  
很想知道银行是怎么对帐的,难道面对那一大驼数据一行一行的对?
38 楼 ray_linn 2007-05-13  
温柔一刀 写道
貌似银行的系统都是不健全的
有次在招行取款,账户钱扣除了,但是等了好久就是不见钱出来
我又怕走人了等会钱又出来了
等了十分钟没出来我确定是它的系统出问题了
打电话反馈情况后让我等待处理结果
大概一个星期之后钱又回来了
连个道歉之类的话都没有,完全是不把客户当客户,认为出现这种情况是正常的


ATM取款就经常是卡纸,从银行风险最小化意愿来说

事务边界只是,借<你帐户存款>贷<银行现金帐户>,这个事务完成无误之后
才发指令给ATM的传动机构点钞,出钞....一但有问题,不会有任何事务回滚.

一但出错,就必须人工一笔笔去对帐,然后用红蓝传票冲回.

37 楼 温柔一刀 2007-05-13  
貌似银行的系统都是不健全的
有次在招行取款,账户钱扣除了,但是等了好久就是不见钱出来
我又怕走人了等会钱又出来了
等了十分钟没出来我确定是它的系统出问题了
打电话反馈情况后让我等待处理结果
大概一个星期之后钱又回来了
连个道歉之类的话都没有,完全是不把客户当客户,认为出现这种情况是正常的
36 楼 lutabo 2007-05-11  
银行与银行之间转账,通过人民银行清算中心,每天会对账(总账,明细账)






35 楼 lutabo 2007-05-11  
qingyujingyu427 写道
我有两个同事,都曾经从中国银行的ATM机取钱,结果卡上的钱扣了,可是钱没出来。
都是等银行对完帐以后,然后再还给他们。
连本行都没保证,别说跨行了,只是失误率比较低吧。


"中国银行的ATM"问题比较多,我碰过两次(第一次取200,第二次取3000)

"中国银行"快上新系统了,新系统3亿人民币

34 楼 过儿oO 2007-05-11  
正常应该是通过线程,因为涉及到同时请求问题,或者是断电,服务器突然重起等问题,这样把这些数据是先放在一个临时的表中,那么如果成功了,才通过银行接口请求页面,输入正确的信息,通过银行服务器的验证后,银行会请求开始向它发出请求的那一端的一个页面,只有请求成功才会执行真正的数据操作。而开始存的那个表就相当于一个线程信息的log,由于种种原因有可能出现其他一些情况,那么可以通过这个信息表来核对到底是成功否,表中可以根据需要设置一些标志位。一些标志位的应用可以解决一些问题。
33 楼 ray_linn 2007-05-11  
sorphi 写道
ray_linn 写道
MS 大部分人没学过会计.....

...
银行甲和银行乙之间再结算(再一借一贷), 原子的 --- 这里还是简化版的.
...
三段原子交易,中间就是以银行的信用作为保证的.



这个帖子讨论的不就是第二段,是否能够原子操作吗,到底能吗?


不能, 这中间还有人行或中心的数据库,

而且银行和银行之间,可以以银行信用做担保,不会出现扣了银行甲的钱,银行乙不认帐的情况....帐上多出钱来也是很麻烦的事情...马上得加班找原因的.
32 楼 balaschen 2007-05-11  
sorphi 写道
ray_linn 写道
MS 大部分人没学过会计.....

...
银行甲和银行乙之间再结算(再一借一贷), 原子的 --- 这里还是简化版的.
...
三段原子交易,中间就是以银行的信用作为保证的.



这个帖子讨论的不就是第二段,是否能够原子操作吗,到底能吗?

不能,所以各银行间需要对帐
31 楼 sorphi 2007-05-11  
ray_linn 写道
MS 大部分人没学过会计.....

...
银行甲和银行乙之间再结算(再一借一贷), 原子的 --- 这里还是简化版的.
...
三段原子交易,中间就是以银行的信用作为保证的.



这个帖子讨论的不就是第二段,是否能够原子操作吗,到底能吗?
30 楼 ray_linn 2007-05-11  
balaschen 写道
ray_linn 写道


先扣你的钱,划到银行甲帐上(一借一贷), 原子的
银行甲和银行乙之间再结算(再一借一贷), 原子的
银行乙入帐,银行乙再划到我的帐上.(再一借一贷).原子的



确实不懂会计,不过,理想情况下,当然希望这三段操作是在同一个全局事务下受保护的,因为我个人的经验在ATM上转帐是即时到帐的,我发这个帖子,讨论的也正是这个意思。原先以为银行的系统会提供全局事务,很想知道是怎么干的,经过讨论,对银行很失望啊


你可以想象中间有个MQ就可以...所以全局的事务根本没必要.
29 楼 ray_linn 2007-05-11  
balaschen 写道
ray_linn 写道


先扣你的钱,划到银行甲帐上(一借一贷), 原子的
银行甲和银行乙之间再结算(再一借一贷), 原子的
银行乙入帐,银行乙再划到我的帐上.(再一借一贷).原子的



确实不懂会计,不过,理想情况下,当然希望这三段操作是在同一个全局事务下受保护的,因为我个人的经验在ATM上转帐是即时到帐的,我发这个帖子,讨论的也正是这个意思。原先以为银行的系统会提供全局事务,很想知道是怎么干的,经过讨论,对银行很失望啊


这怎么可能, 想太多了, 银行本身就是信用机构,银行有个术语叫交换,还有术语叫天地对接...此外银行也不单只有ATM转帐,很多时候比如支票,传票本身也必须到了才可以入帐.

ATM只是交换时间短暂一点,支票就是交换时间长一点而已.
28 楼 抛出异常的爱 2007-05-11  
全局。。。。我认为上帝能作到吧。。
现阶段人类水平还到不了那样子。
27 楼 balaschen 2007-05-11  
ray_linn 写道


先扣你的钱,划到银行甲帐上(一借一贷), 原子的
银行甲和银行乙之间再结算(再一借一贷), 原子的
银行乙入帐,银行乙再划到我的帐上.(再一借一贷).原子的



确实不懂会计,不过,理想情况下,当然希望这三段操作是在同一个全局事务下受保护的,因为我个人的经验在ATM上转帐是即时到帐的,我发这个帖子,讨论的也正是这个意思。原先以为银行的系统会提供全局事务,很想知道是怎么干的,经过讨论,对银行很失望啊
26 楼 ray_linn 2007-05-10  
MS 大部分人没学过会计.....

跨行能借A行帐号,贷B行帐号么, 那A行和B行的帐目怎么能平?!!!

Transacation是发生在本行的资产类帐号和资产负债类帐号之间,
资产负债类帐号是用来做结算用的,一般银行隔一段时间,就把资产负债类提交至人民银行,人民银行再各行之间结算....

异地的话也是如此,先横后直.

异地同行实时,也是和这个道理类似.

先扣你的钱,划到银行甲帐上(一借一贷), 原子的
银行甲和银行乙之间再结算(再一借一贷), 原子的 --- 这里还是简化版的.
银行乙入帐,银行乙再划到我的帐上.(再一借一贷).原子的

这样才能完全符合会计基本准则.

三段原子交易,中间就是以银行的信用作为保证的.

25 楼 ray_linn 2007-05-10  
qingyujingyu427 写道
我有两个同事,都曾经从中国银行的ATM机取钱,结果卡上的钱扣了,可是钱没出来。
都是等银行对完帐以后,然后再还给他们。
连本行都没保证,别说跨行了,只是失误率比较低吧。



钱没出来这不是Transaction的问题,交易已发生,却在出钱的时候卡纸了,完全只是个机械问题.
24 楼 charon 2007-05-10  
当年我在ATM上异地取款(招商银行),钱没取到,卡上的数额却扣了,到窗口去问,说过n个工作日自己会回来,太滥了。正好赶上黄金周,一个多星期天后才看到。这个事情我碰到过好几次,有次是银证转账,钱在转出去的账户上扣了,转入的却没见到。
只能说明银行的系统确实比较差,至少无所谓事务这个说法。素质太差了,不把俺们储户当客户啊。
23 楼 blu3leaf 2007-05-10  
恩恩~~刚学完sql,acid就是用的转账~~不过是简单的本行转,跨行估计要对帐才行
22 楼 balaschen 2007-05-10  
很多教科书介绍事务ACID的时候,总喜欢拿转帐说事,误导人啊

相关推荐

    java 网银跨行清算 项目

    项目可能会采用两阶段提交(2PC)或者分布式事务解决方案,如Saga模式,确保交易的原子性和一致性。 4. **消息队列**: 为了处理高并发和异步操作,项目可能会使用RabbitMQ或Kafka作为消息中间件,实现任务解耦和...

    java-bank.zip_跨行_银行 java

    以下是对"java-bank.zip_跨行_银行 java"这个项目所涵盖的IT知识的详细解释: 1. **对象封装**:银行账户是一个典型的实体对象,它包含私有的属性如账号、用户名、密码、余额等。通过公有方法(如deposit()存款,...

    329_java银行业务管理系统_银行转账管理_银行存取款.rar

    在Java中,这可能涉及到对数据库的操作,如SQL查询来获取账户余额,更新转账记录,并确保交易的原子性和一致性。事务处理是这一部分的重点,以确保资金转移的准确无误。 3. **银行存取款管理** 存取款管理涵盖了...

    银行交易系统参赛版(Lcsky)

    同时,事务处理必须遵循ACID(原子性、一致性、隔离性、持久性)原则,确保数据的一致性和完整性。系统可能会使用数据库管理系统(如MySQL或Oracle)来存储和管理交易记录,这些数据库系统通常具备强大的事务处理...

    bank.rar_银行

    1. 数据一致性:遵循ACID(原子性、一致性、隔离性、持久性)原则,保证交易的正确性。 2. 高可用性:设计冗余备份和故障恢复机制,确保系统24/7运行。 3. 安全性:通过加密技术、防火墙、入侵检测等手段,防止...

    银行存取款系统说明文档

    5. **数据一致性**:系统应保证事务的ACID特性,即原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability),确保交易的正确执行。 6. **Java技术栈**:标签中的“银行存取款系统...

    银行信用卡管理系统源代码

    此外,系统还可能使用事务处理机制,确保这些涉及资金流动的操作原子性、一致性、隔离性和持久性(ACID属性)。 转账功能则允许用户将信用卡账户的资金转至其他银行账户或接收他人的转账。这通常需要银行间的实时...

    分布式事务架构设计.pdf

    本地消息表是一种常见的分布式事务解决方案,例如在跨行转账场景中,先进行本地事务操作(如扣款并记录凭证),然后通过消息中间件通知另一方银行增加金额。消息中间件可以是事务性的,确保消息的可靠传递,或者采用...

    银行管理系统

    此外,SQL Server 2008还支持事务处理,确保了银行业务的原子性、一致性、隔离性和持久性,这对于金融系统的稳健运行至关重要。 银行管理系统的功能模块通常包括: 1. 用户管理:用于注册、登录和权限管理,确保...

    java网上银行系统

    同时,Spring的事务管理功能确保了银行业务操作的原子性和一致性。 三、Hibernate框架 Hibernate作为持久层框架,负责数据库操作。它通过ORM(Object-Relational Mapping)技术将Java对象与数据库表映射,降低了...

    数据库系统概论(第4版)第十四章.ppt

    例如,银行的跨分行转账操作就是分布式数据库的一个典型应用,需要同时更新不同节点上的数据库以保证数据一致性。 分布式数据库系统的一个关键特性是数据独立性,包括逻辑独立性、物理独立性和数据分布独立性。这...

    用java编写的在线交易(代码)

    为了确保交易的原子性和一致性,Java的JTA(Java Transaction API)和Spring的Transaction Management可以用来处理分布式事务,确保即使在部分操作失败时,整个交易也能回滚到一致状态。 6. **并发与性能** 高...

    NET_ATM系统全局

    5. **事务处理**:ATM交易通常涉及多个步骤,因此系统必须支持事务处理,确保交易的原子性和一致性。 6. **故障恢复与冗余**:系统需要有备份和恢复机制,以应对硬件故障或网络中断,保证服务的连续性。 7. **性能...

    深入理解高并发下分布式事务的解决方案.docx

    2. **在线下单场景**:在电商平台下单时,需要同时更新库存数量和订单状态,由于这两个操作通常涉及不同的数据库,因此需要通过分布式事务来保证数据的一致性。 #### 五、常见的分布式事务解决方案 1. **基于XA...

    RCBS:创建了一个小规模的银行系统,供柜员开设存款帐户并向客户发行ATM卡,以及让客户激活和查询其ATM卡中的可用余额

    4. **事务处理**:银行操作如开户、转账等涉及资金流动,需要保证原子性、一致性、隔离性和持久性,即ACID特性。Java的并发和同步机制,如synchronized关键字和java.util.concurrent包,可以用来保证在多线程环境下...

    某互联网大厂MySQL面试题-20题(附带答案)

    1. **InnoDB引擎**:InnoDB是MySQL中最核心的存储引擎,支持事务处理和行级锁定,提供了对事务的ACID属性的支持,同时实现了外键约束,保证了数据的完整性和一致性。 2. **ACID特性**:ACID是数据库事务处理的四大...

    数据库操作,包括把csv或excel表格导入数据库及各种SQL语言操作.zip

    6. **事务处理**:在需要确保数据一致性的情景下,如银行转账,使用事务来保证操作的原子性和一致性。 在实际工作中,掌握这些基础的数据库操作和SQL技能是必不可少的,它们可以帮助你有效地管理和利用数据资源,为...

    hbs:HBS为HBase提供可序列化的事务处理

    HBS可能采用了两阶段提交(2PC)或者其他分布式事务协议来确保跨行、跨表操作的一致性。这些协议允许在多个节点之间协调操作,以达到全局一致的结果,即使在节点故障的情况下也能保证数据不丢失。 HBS项目还考虑了...

Global site tag (gtag.js) - Google Analytics