287854442 写道
bobotc 写道
确切的说银行项目是没有使用到事务的。。
不使用事务,那使用什么来保证安全性和可靠性呢?
确切地说,应该是不用分布式事务(如XA事务),尤其是局域网络之外的分布式事务。
分布式事务相对本地事务来说,虽然都是事务,有相同的或类似的结果预期,但实现方式及其效率、稳定性、可靠性差别巨大。具体细节分别可以写成两本厚厚的书了,抱歉我本人也没看全。
但是这种差别的存在应该被知道,分布式事务是基于网络交互的,网络的相对不稳定性和相对低效,分布式事务一样也避免不了。可以简单的理解分布式事务使用了一系列的交互机制/规则来保证数据状态的一致性,但这些规则细节对应用是透明的、不可控的,同时在此过程中产生的同步等待及资源竞争也是相对巨大的、不可控的,实际应用上是不能接受的。
针对具体的应用需求,我们完全可以设计完整的业务逻辑规则来保证可靠性和一致性。
数据库事务要求的OCID,和实际业务需求要求的可靠性、一致性以及所谓的资金安全是不一样的,OCID事务要求高得多,而且在数据状态完全一致之前对应用是透明的,在交易系统里可以不用这样严格。比如对资金安全来说,资金冻结在前,之后才允许交易,最后再同步交易状态(还有各阶段异常的补偿措施),这些阶段是分开的,在不同位置单独完成的,只要保证顺序,是不需要在一个数据库事务里完成的,也不需要都用实时、同步的方式完成。这种机制对系统的要求及其效率表现要比OCID事务机制高很多。当然,对应用系统的设计和开发的要求也要高一些。
实际应用还有一些其他约束也是分布式事务无法满足的,比如双方是独立的系统,甚至不是一个金融实体,要把双方的数据库纳入到一个分布式事务里是不可能的。很多介绍分布式事务的文章里会讲到资金转账的案例,即从A账户转账到另外一个系统的B账户,实际当中是否使用分布式事务来实现此功能,我对此表示相当的怀疑。
还有一个不能使用分布式事务的重要的因素,上面多次提到了透明和不可控。一旦发生异常,金融系统在业务规则上有它一套完整的补偿措施和干预手段,而且会涉及人工干预和不同金融实体的交涉。这些问题靠分布式事务是根本做不到的。
实际生活中,我们在跨行或异地存款、转账时,作为个人在完成转账后,经常还要过一段时间才能到账(当然也有很多提供实时到账服务的,不过这同样跟分布式事务无关),这已经是我们普遍接受的习惯性的事情,而且我们也不需要在到账之前一直在银行等待。
本质上来说,数据库的事务交易和金融交易完全不是一回事儿,是不同层面、不同领域的概念,只不过从技术实现角度上它们存在着一些必要的、习惯性的联系,所以容易在某些地方容易被混淆。我曾经在对一篇关于“Base 一种Acid的替代方案”的评论当中提到过,并非原作者的本意,但实际传播和读者理解过程中存在着把金融交易(商业交易)和数据库事务交易混淆的问题(尤其是所谓‘最终一致性'的概念),可惜并没有人认同,大概是做金融业务的人关心技术实现的不多,同时做技术研发实现的人关心金融业务的也同样不多吧。
分享到:
相关推荐
用生动的PPT动画演示和配套总结性文字,讲述分布式事务数据库的教科书式技术架构、三种主流金融行业技术架构、金标委定义技术架构、行业专业术语,及重点围绕分布式事务数据库的核心技术之分布式事务的原理、功能和...
Java分布式事务是大型分布式系统中不可或缺的一个重要组成部分,它确保在多个网络节点间的数据操作能够保持一致性和完整性。在分布式环境中,由于多个服务之间可能存在数据交互,因此需要一种机制来处理跨服务的数据...
在这种情况下,若需要同时更新订单状态和库存数量,就必须确保这两个操作要么全部成功,要么全部失败,这就需要用到分布式事务来保障数据的一致性和完整性。 #### 二、分布式事务产生的背景 ##### 1. 数据库分库...
本文来自于csdn,本文主要从分布式的原因,事务特性,和解决方案中深入理解了分布式事务,希望对您的学习有所帮助。 分布式事务就是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的...
4. **分布式事务API与协议**:如Java的JTA(Java Transaction API)和X/Open XA,它们提供了标准的接口和规范来处理分布式事务。 5. **数据库级别的分布式事务**:例如SQL Server的分布式事务支持,利用MS DTC...
为了解决大家在实施分布式服务化架构过程中关于分布式事务问题的困扰,本教程将基于支付系统真实业务中的经典场景来对“可靠消息的最终一致性方案”、“TCC两阶段型方案”和“最大努力通知型方案”这3种柔性事务解决...
### 分布式事务若依框架文档 #### 一、分布式事务基本概念 在理解分布式事务之前,我们...通过以上步骤,我们可以搭建起一个基于Seata的分布式事务处理环境,从而更好地理解和实践分布式事务的处理过程和技术细节。
【ejb3.0 分布式事务详解】 在企业级Java应用中,EJB(Enterprise JavaBeans)3.0...同时,通过合理配置`persistence.xml`和数据源,以及恰当使用JTA和注解,可以有效地管理分布式事务,保证系统的高可用性和可靠性。
分布式事务是指在分布式系统中跨多个资源或服务进行的交易操作,需要保证操作的原子性、一致性、隔离性和持久性。分布式事务的解决方案包括Seata、TCC、SAGA、X/Open XA等。 分布式事务的产生是由于业务的不断扩大...
然而,在实际应用中,分布式事务的引入会增加系统的复杂度和开销,因此在决定是否采用分布式事务时,应该充分评估业务需求和系统特点。对于一些场景,可能通过合理设计来减少对分布式事务的依赖,比如通过聚合微服务...
SpringBoot作为一款轻量级的框架,提供了便捷的多数据源配置和分布式事务管理方案,使得开发者能够高效地管理和操作不同的数据库。本文将详细探讨SpringBoot如何实现多数据源以及分布式事务。 首先,我们要理解什么...
分布式事务是指在分布式系统中,多个节点之间的数据访问和更新操作集合,需要保证事务的原子性、一致性、隔离性和持久性。随着软件系统支持用户数的不断提高,对其架构的水平扩容能力要求也不断加强。典型的表示层 -...
在分布式系统中,事务处理是确保数据一致性的重要环节。TCC(Try-Confirm-Cancel)模式是一种著名的分布式事务解决...通过学习和实践这个组件,开发者可以更好地理解和掌握分布式事务处理,提升系统的稳定性和可靠性。
5. TCC模型(Try-Confirm-Cancel):TCC模型是一种分布式事务处理模式,它分为三个阶段:尝试(Try)、确认(Confirm)和取消(Cancel)。在“尝试”阶段,系统预留资源,准备执行业务操作;“确认”阶段确认所有的...
MySQL是广泛使用的开源关系型数据库管理系统,它支持事务处理,是分布式事务中的关键组件。在这个项目中,MySQL作为数据存储,与JOTM和Spring配合,共同确保分布式事务的正确执行。 项目文件“AjtaAbatisTest”可能...
本资源包提供了关于LCN框架的全面介绍,包括PPT讲解、教学视频以及实际项目整合的demo,非常适合对分布式事务感兴趣的开发者学习和实践。 首先,分布式事务是指跨越多个数据库或者存储系统的事务处理,其目标是确保...