`
xpp02
  • 浏览: 1046614 次
社区版块
存档分类
最新评论

一个简单的跨域跨数据库事务处理架构

阅读更多

 

原来只是有点这个想法,怎么去做这个事务,这次给公司做新架构演示,随带就加进去了,居然还成了,还像那么回事:

我的做法很简单:自己写了个事务处理类,提供一个静态的启动事务方法,然后就是Commit,Rollback方法,再利用GUID作为事务ID。有事务处理类管理本地数据库链接和远程跨域服务信息,利用这些信息在Commit或者rollback时进行提交或者回滚,在数据库级上并行执行命令,需要对远程跨域提交或者回滚的,结合一个远程事务池、远程事务服务类和远程事务服务调用代理类(就提交和回滚两个方法)进行处理,其中用事务ID贯穿始终。当然,所有的数据访问层,数据库访问层都来由一个事务类参数,没有事务的话就为空。由逻辑处理层决定是否采用事务处理。做的就这么简单,结果感觉还可以;当然这个模式有个致命的弱点,就是无法解决Commit一致性问题,就是如果涉及到多个数据库时,如果前N-1个数据库服务都提交成功,第N个数据库提交失败就没办法了。在跨区域事务方面问题比较大,但如果是局域网还是可以的。这种方式比较适合数据分布存储(非镜像)的情况,当然,数据分割的时候需要将大部分的操作都集中在一个中心,毕竟跨区域访问还是有些慢得。

这次整得这个架构,可以分布式查询,同时更新多个数据库(可以控制到表级),并对业务逻辑层透明,速度和易用性感觉都还不错,而且业务层处理事务的时候可以支持搭积木方式进行。

这个架构带有云应用架构的味道,可以分业务,分用户存放数据,应用部分也可以支持多中心,多负载方式,理论上来讲扩展性无限。当然,因为主要的目的不是做镜像同步支持,所以我没有加入数据库命令队列处理方式来保证可靠性,在数据库节点方面只是简单的采用了同时更新3份,查询则随机选其中一份的方式。对于企业级业务,特别是高实时性和一致性的应用,如果跨数据库,事务处理和可靠性保证要一起做,真的很难。所以后来放弃了自己做可靠性那部分(就是同时写3份,随机读一份那部分功能),让数据库自己去做,毕竟他们更专业。

这个架构主要技术点:多线程(实现不同目标数据库查询异步进行),ODPNet,WCF(跨域访问),事务,同步(简单的采用Lock),反射机制,泛型等.

是不是很简单?但确实可用!

补充1)为什么说商业(企业)应用业务系统的事务处理非常困难呢,因为这些应用中的业务逻辑复杂,业务之间的关系非常紧密,而且是有时序性的,即业务逻辑执行是有顺序的,反映到数据库上就是其SQL语句只能一条条按进来的顺序来执行,并不能实现并行处理,因此所谓的延迟一致性(就是只保证最终结果对,不保证中间过程中也是一致的)在这里原则上是不允许的,但一般互联网应用却是可以的,比如CSDN的点击次数统计,博客排名等,用户并不会在意某一点上的排名准确性,而只要基于增量更新原则,虽然不能保证实时准确,但可以保证最终准确性 。在事务隔离级别上,为保证业务逻辑的正确,理论上应该是隔离级别越高越好,但隔离级别太高,数据库的压力就会非常大,但至少要保证不读赃数据。这带来的问题就是数据库对事务中的数据集的操作行(包括事务中查询语句的结果行)起码做行级锁定, 这就会导致其它很多SQL的执行如果涉及到前面事务处理中的数据,只能等待。另外,由于业务逻辑执行的时序性要求,也会导致很多操作结果的提交是不可逆的,这在ERP的物料需求分析体现最为明显。因此要保证业务数据库的性能,事务是一定要少用的。一个数据库如此,多个数据库,或者是跨域应用就更麻烦,更困难了。

对于火车票售票系统,最好的办法就是从应用和分割数据上去细分处理,而且也非常困难,因为还涉及到老系统的兼容。正如有网友说的,拿互联网应用的思维去思考业务应用系统最多只能是借鉴。

 

补充2) 如图:

 

如上图,如果是事务,如果是本地访问,只要在第一次执行事务命令时创建连接,并在连接上开始事务,并将这个连接和事务添加到事务类实例的连接列表中,第二次本地执行时,因为有连接和事务,就不需要在创建了,直接利用已有的连接和事务执行SQL命令,如果需要跨域访问,同样需要在事务记下访问日志,这样就可以根据本地连接池和远程访问日志做提交和回滚。当然,也会有远程事务提交和回滚的服务。在系统中保持一个远程事务池,并提供远程提交和回滚服务,同样的,如果一个远程调用过来时,如果事务参数有效,一样遵循第一次创建一个事务实例,并放入远程事务池中,后面的执行就直接调用对应的数据访问接口层执行命令即可(需要注意防止跨域死循环调用);如果接到远程提交或者回滚,只要调出远程事务池中的事务实例,调用其提交或回滚方法即可。

更多信息请查看 java进阶网 http://www.javady.com/index.php/category/thread

分享到:
评论

相关推荐

    CSDN 软件开发2.0技术会议:程立-大规模SOA系统中的分布事务处理

    传统的事务处理通常是在单个应用系统内部进行的,这种情况下事务处理相对简单,因为所有涉及的数据和资源都在同一系统内,可以通过数据库事务来保证ACID特性(原子性、一致性、隔离性和持久性)。然而,在大规模SOA...

    龙果学院(微服务架构的分布式事务解决方案)pdf ppt

    然而,在微服务架构下,如何处理跨服务的事务一致性问题成为了一个重要的挑战。本文将围绕“微服务架构的分布式事务解决方案”这一主题,详细介绍几种常用的分布式事务解决方案及其优缺点。 #### 二、基础知识 在...

    支付宝-分布式处理方案 ;大规模SOA系统中的分布事务处理.pdf

    文档中提到了ACID原则,这是传统数据库事务管理的基本原则,包括原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)。在分布式环境下,要保持这些原则的实现,会面临高度并发...

    基于TUXEDO中间件构建分布式事务应用研究.pdf

    分布式事务是数据库事务处理的一种形式,它涉及在一个分布式计算环境中,跨多个数据库或计算节点的事务操作。分布式事务需满足ACID特性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性...

    大规模SOA系统中的分布事务处事_程立.pdf

    综上所述,分布事务处理在SOA架构下是一个复杂但至关重要的领域。它不仅涉及事务的基本概念和属性,还需要考虑不同层次的协调机制,包括资源管理器、事务管理器以及通信资源管理器之间的协作。此外,还需要考虑各种...

    SOA分布式事务

    JTA 提供了一个高级别的事务接口,用于支持应用程序、应用服务器和资源管理器之间的事务处理。JTS 是 JTA 的实现标准,向上层提供 JTA 接口的支持,向下通过 CORBA 对象请求代理 (ORB) 与资源管理器进行交互。 ####...

    大规模SOA系统中的分布事务处事.pdf

    分布式事务是确保跨多个服务或组件的事务性操作一致性和完整性的关键机制,尤其对于大型系统而言,由于其业务的复杂性、服务的分布性以及数据的一致性要求,这成为一个非常棘手的问题。 首先,我们需要了解事务的...

    大型网站架构不得不考虑的10个问题

    此外,数据库事务处理和死锁避免也至关重要,合理设置事务隔离级别和使用乐观锁、悲观锁策略。 3、文件存储:大规模文件存储通常采用分布式文件系统,如HDFS或FastDFS,按日期和类型划分存储,以减轻单点压力。考虑...

    Extjs高级程序设计的数据库文件sql server 2005

    "extshop"可能是一个模拟电子商务应用的数据库,包含商品、订单、用户等表;而"store"则可能是数据存储的抽象概念,在ExtJS中,"store"用来管理数据源,它可以连接到各种数据源,包括本地JSON文件或远程SQL数据库。 ...

    地产项目(前后台分离项目,跨域)

    本项目以“地产项目(前后台分离项目,跨域)”为主题,涉及到的技术栈包括.NET Core、Vue.js以及AJAX跨域问题的处理,同时也涵盖了数据库管理,如SQL Server的使用。接下来,我们将深入探讨这些关键知识点。 首先...

    .net 三层+Wcf框架(自适应Oracle,Mysql,SqlServer三种数据库,完整实例)

    .NET 三层架构与WCF(Windows Communication Foundation)框架的结合是一种常见的企业级应用开发模式,它提供了强大的数据处理能力和跨平台通信能力。本实例中,该框架能够自适应Oracle、MySQL和SQL Server三种不同...

    基于Web/BS架构开发实例

    这种模式极大地降低了客户端的维护成本,因为所有复杂的应用逻辑和数据管理都由服务器处理,而客户端只需要一个能够浏览网页的浏览器即可。 在基于.Net Framework的Web/BS架构开发中,.Net Framework提供了强大的...

    阿里新一代分布式数据库X DB技术剖析1

    SQL Engine是一个一体化的高性能SQL处理引擎,支持跨节点的复杂查询和一致性读,通过优化的LSM-Tree存储模型提高查询效率。X-Engine则专注于数据分片和多主复制,采用基于哈希或范围的分区策略,并利用多Paxos组实现...

    JAVA高并发高性能高可用高扩展架构视频教程

    spring事务处理 课程文档 高并发之基础数据MySql调优 mongodb 三级联动课程资料 应用架构之灵魂设计模式 应用架构之魂设计模式实战演练应用架构之魂设计模式实战演练 揭开springAOP神秘面纱(动态代理) Mysql性能优化...

    Node服务端框架Express-Sequelize-Mysql模型架构设计封装

    能学到什么:接口请求、跨域处理、利用Sequelize请求Mysql数据库等,Sequelize封装,处理并发请求。 阅读建议:此资源以开发简化版node学习其原理和内核,不仅是代码编写实现也更注重内容上的需求分析和方案设计,...

    毕业设计基于JavaWeb的前后端分离的视频网站源码+数据库,静态资源由node代理

    【标题】中的“基于JavaWeb的前后端分离的视频网站源码”指的是使用JavaWeb技术栈开发的一个实现了前后端分离架构的在线视频平台项目。在这样的系统中,前端负责用户界面和交互,而后端则专注于业务逻辑和数据处理。...

    数据库大作业之教学管理系统

    在本项目中,我们面临的是一个“数据库大作业”,具体来说是实现一个教学管理系统。这个系统包括了两个子系统,我们需要自己搭建相应的运行环境来运行和测试这些系统。主要涉及的知识点涵盖了数据库设计、关系型...

    liferay架构

    Liferay Portal是一个功能强大的企业级门户平台,旨在提供全面的门户解决方案,使用户能够通过传统或无线网络访问门户服务。开发人员可以通过多种方式,如SOAP(简单对象访问协议)、RMI(远程方法调用)以及自定义...

    jotm资源包

    JOTM(Java Open Transaction Manager)是一个开源的Java事务管理器,它实现了Java Transaction API (JTA) 和 Java Transaction Service (JTS) 规范。这个资源包包含了JOTM的核心组件以及相关的配置和示例文件,对于...

Global site tag (gtag.js) - Google Analytics