`
zhxp791008
  • 浏览: 31964 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

异构系统分布式事务、安全、性能

阅读更多

 

现有一项目,业务场景如下:

 


 









用户通过手机发送支付请求到运营平台,运营平台通过解析请求内容,知道手机用户希望向vb开发的应用系统支付200元。此时运营平台首先会查询支付平台,该手机用户是否有足够的钱支付,如果有,则通过支付平台扣除手机用户200元,并转入到位VB应用对应帐户,支付平台支付成功后,返回信息给运营平台,运营平台会向VB应用系统发送信息XX用户通过支付平台向你支付了200元。如果运营平台在查询手机用户在支付平台的钱不够,会向银行系统发送请求,希望银行系统能从手机用户银行帐户中转帐到支付平台或者VB应用的帐户上。

在这样的一次支付过程中,手机应用、运营平台,VB应用、支付平台、银行系统会可能涉及,怎样才能做到以下几点:

一、性能。因为一个业务请求中可能在几个应用中进行数据交互,怎样提高数据的交互速度,从而提高手机客户的体验。

二、安全。因为整个应用核心就是钱的转移,安全是最重要的。

三、分布式事务。这是整个系统中最难的部分,怎样做到用户的一个支付行为,无论那个节点发生问题,所有相关的应用中数据是一致的。



各位大牛能停下来,发发你们的想法或者失败的经验。谢谢。。。

 

  • 大小: 18 KB
分享到:
评论
18 楼 imlsq 2009-11-13  
你的问题,楼上 “凤舞凰扬”已经给与不错的回答了

对于这么多异构系统来说,如果要做成一个事务内控制,基本不可能实现。

1 性能:各位已经说得非常不错,如果需要有快速响应,就只能异步了。如果是同步的话,速度会很慢,对前端的web app带来很大的压力。
如果能够异步的话,最好采用异步消息机制,比如JMS之内的,速度非常快,稳定可靠

2 安全:关于安全的问题,目前有非常成熟标准的东西了,无论是jdk自带的api,还是其他第三方开源产品都非常成熟。但是无非离不了 DES加密,RSA签名...等算法。 自己调用JDK自动的lib已经可以做到非常安全。

3 事务: 这么多异构系统,不太可能做到同步事务,只能是采用 “补偿” 机制来实现。最简单的方法,就是 类似银行的 当日对账 ,比如可以采用一台服务器每隔几十秒提取各子系统的交易记录进行比对,根据业务逻辑判断是否完整,如果是异常,再进行相应的补偿操作。
17 楼 zhxp791008 2009-11-12  
凤舞凰扬 写道
   楼主有个很大的误区,也就是想在不同的系统间实现所谓的分布式事务。除非有底层的事务服务支持,比如ORB事务,否则的话是不可能实现的。
   那么我们又如何在实际的业务应用场景中来实现这样的情况呢?其实有个很清楚的概念,补偿事务。准确讲补偿事务并不是我们传统意义上的事务,而是通过补偿性行为来实现事务的原子特性。
    在楼主提出的应用场景中,有两个问题很关键,一个是事务锁实现,这个锁其实也就是一种预扣,避免查询与购买时费用合适,而付款时却出现费用被另外的交易处理而出现不够的失败情况。另外一个就是补偿性事务处理机制,也就是在事务处理失败后的恢复机制,因为涉及银行系统(银行系统有基础性事务支持),所以必须想清楚如何处理补偿。


谢谢回复!
以前就是想是不是有种在异构系统中以普通的xa协议方式实现分布式事务的可能性。
现在看来,没有传统方式实现的可能性,只有在应用层设计上考虑才可能达到数据的一致性。
如消息中间件等做。
好象tuxedo专门做这个的。

16 楼 凤舞凰扬 2009-11-11  
   楼主有个很大的误区,也就是想在不同的系统间实现所谓的分布式事务。除非有底层的事务服务支持,比如ORB事务,否则的话是不可能实现的。
   那么我们又如何在实际的业务应用场景中来实现这样的情况呢?其实有个很清楚的概念,补偿事务。准确讲补偿事务并不是我们传统意义上的事务,而是通过补偿性行为来实现事务的原子特性。
    在楼主提出的应用场景中,有两个问题很关键,一个是事务锁实现,这个锁其实也就是一种预扣,避免查询与购买时费用合适,而付款时却出现费用被另外的交易处理而出现不够的失败情况。另外一个就是补偿性事务处理机制,也就是在事务处理失败后的恢复机制,因为涉及银行系统(银行系统有基础性事务支持),所以必须想清楚如何处理补偿。
15 楼 lixjluck 2009-11-11  
可以参考 《程立:面向生产环境的SOA系统设计》里面的一些设计原则
对于这些异构系统,使用事务是个不可能的任务,只要最终达到一致性即可。
14 楼 cn_arthurs 2009-11-10  
zhxp791008 写道
总结下:
性能依靠异步机制实现,达到快速响应。
分布式事务基本上采用应用设计层面来达到事务的最终同步。中间状态不一致,通过应用层设计来达到最终的事务一致。

还有没有更好的设计,主要是事务。。



我认为对于事务的处理,应该由支付平台来做处理,运营平台最好是发起WEB SERVICE请求,支付平台如果在运行过程中如果出错的话,可以执行一个冲正流程,根据这笔订单的流水号,进行回滚操作
运营平台只接收平台返回的消息

如果平台不能提供复杂业务流程,那只能在运营平台与其他各平台之间专门增加一个业务层
或者如果条件允许的话,我感觉还是采用比较专业的EAI工具(如:TIBCO)来做更合适
13 楼 zhxp791008 2009-11-10  
总结下:
性能依靠异步机制实现,达到快速响应。
分布式事务基本上采用应用设计层面来达到事务的最终同步。中间状态不一致,通过应用层设计来达到最终的事务一致。

还有没有更好的设计,主要是事务。。
12 楼 prowl 2009-11-10  
helian 写道
楼上专业。

比较要注意的是不要向银行重发请求,可能会造成扣款多次。可能的状况是请求发出去了,自己的数据库更新前应用挂了。下次系统起来可能认为这笔请求还没发,再发一次。


支付平台和银行的接口有不同的地方,但是流水号作为唯一标示,是不会出现重复缴费的情况。其实在我之前描述的银行端日志记录又可细分为两种,在生成流水号记一次,缴费成功或失败,更新刚才的那条记录,作为缴费日志。同时,还有一张表来记录接口调用情况,记录出入参成功与否等,作为调用日志。这样基本就可以确保不会出现重发缴费请求,流水对不上,系统崩溃造成的异常等等
11 楼 helian 2009-11-10  
楼上专业。

比较要注意的是不要向银行重发请求,可能会造成扣款多次。可能的状况是请求发出去了,自己的数据库更新前应用挂了。下次系统起来可能认为这笔请求还没发,再发一次。
10 楼 prowl 2009-11-10  
zhxp791008 写道
整个应用最难的就是事务,如果银行、支付平台、运营平台数据不一致的话,我想这用户可能是无法接受的。


其实这是一个三方的对账,原来做的一个项目里有遇到。但是不是你所说的这三方(银行,支付平台,运营平台),而是用户,银行,SP。

从钱的角度来分析,用户和银行实际上可以看成一体,因为用户手里的钱最直接的体现就是银行账户上的数字。来看看会出几种情况:

1.用户钱被银行扣了,SP钱没有增加(可能是SP内部系统异常)。
2.用户钱被银行扣了,SP钱增加。(正常)
3.用户钱没有扣,SP钱没有增加。(正常)
4.用户钱没有扣,SP钱增加。(这种情况基本不存在)

一般来说,无论是支付平台还是银行的接口(WS,HTTP)内部都有很完善的事务系统,你都不需要关心,你关心的就是发的请求和响应,钱是否扣得成功。其次,在执行本身SP支付系统之前都会检查银行返回的是否成功(这就是为什么第四种情况不存在)。成功,调用本地支付接口,如果调用失败,会产生第一种情况。

我们采取的解决办法:

1.银行及支付平台接口调用,记录详细日志(包括时间,流水,钱,返回串等)。
2.本地支付系统客户端调用日志。
3.本地支付系统服务端执行日志。

日志系统通过事先约定的协议对账,达到平帐。

9 楼 helian 2009-11-10  
异步肯定是必然的,同步就见了鬼了.楼主的系统不说.单是银行内转笔钱就可能去人行转了一圈才回来.
8 楼 ywlqi 2009-11-10  
接口的两端两两保证数据一致,从而保证整个流程下来数据一致,不知道行不行?

另外数据不要求实时吧?比如新进了一笔钱,允许过一段时间才能查到记录。这样可以用缓存或临时表啥的来提高性能

没做过跟钱相关的系统,胡言乱语的,希望大虾指正。
7 楼 tibetjungle 2009-11-10  
zhxp791008 写道
整个应用最难的就是事务,如果银行、支付平台、运营平台数据不一致的话,我想这用户可能是无法接受的。

  保持数据的一致性是目的,使用事务是其中的一种手段。涉及金额的数据不一致,无论问题出在哪一方都无法接受。如我上面所说,可以考虑使用异步的方式。
6 楼 tibetjungle 2009-11-10  
  从用户扣费的时效要求有多高?如果不高,可以考虑用异步的方式,模仿企业向银行送盘的方式从移动运营商或者银行扣款。这既可提升用户的体验,还可以避开使用全局事务带来的一系列恐怖问题。
  另外,异常总是不可避免的,要考虑到扣款成功,但被告知失败(反之亦然)的处理方案。这种事故发生的几率很小,但不可不考虑。
5 楼 zhxp791008 2009-11-10  
整个应用最难的就是事务,如果银行、支付平台、运营平台数据不一致的话,我想这用户可能是无法接受的。
4 楼 wufisher 2009-11-10  
得SOA吧,用些产品容易些
3 楼 helian 2009-11-10  
跟银行和支付平台的接口基本上不是你能决定的吧。如果是JMS的还有可能跟你的java平台统一事物。如果是文件什么的不能控制分布式事务的方式就本着宁可漏发,不要重发的原则做吧。
2 楼 魔力猫咪 2009-11-09  
速度方面可以尝试使用MQ,用异步处理以提高用户体验。告知其已经提交,处理完发短信确认就是。
安全一般使用证书加密验证。
事务方面最麻烦。分布式系统的事务恐怕只能通过BASE和CAP策略解决。不过如何实现这两种策略我不清楚。
1 楼 helian 2009-11-09  
1. 业务处理速度基本取决于银行和支付系统,你再快也没用
2. 各环节都加密吧
3. 全局事务就别想了,那素不可能的。就算勉强实现了,也会慢得要死。

相关推荐

    分布式事务管理模型的性能改进技术研究.pdf

    在设计和实现一个分布式事务管理模型时,需要考虑的关键性能指标包括系统的响应时间、通信成本、CPU和内存资源的利用率等。本文通过构建一个基于分布式数据库的三层体系结构事务管理模型,使用COM+技术进行模块化...

    java分布式系统架构源码

    Jeesuite可能是一个开源框架,提供了诸如配置管理、服务发现、负载均衡、分布式事务等关键功能。源码分析可以帮助我们了解这个框架如何封装和优化这些复杂功能,以及如何与其他Java分布式框架(如Spring Cloud、...

    分布式操作系统的课件

    3. 异构性:分布式系统通常由不同类型的硬件和软件构成,需要支持异构环境。 4. 可扩展性:系统能随需求增加而扩展,添加新节点以提升性能。 三、分布式操作系统的主要组件 1. 进程管理:负责调度、同步和通信,...

    分布式数据库系统综述.docx

    未来,分布式数据库系统将继续深化对移动性、安全性、性能优化和数据一致性的研究。随着技术的进步,如量子计算、网络技术的演进,分布式数据库系统将需要适应这些变化,提供更为高效、安全和灵活的数据服务。 总...

    桥梁预警系统数据库分布式管理引擎设计.pdf

    聂丽平等人通过数字矿井安全信息管理模块的设计,介绍了一种基于CORBA的异构分布式数据系统的实现方法。施化吉等人提出了基于多库操作语言(SMSQL)的异构数据库集成框架,以及金宝轩将OGSA.DAI中间件技术引入空间...

    2022中国数据库技术大会(公开)PPT汇总(71份).zip

    分布式事务数据库性能优化实践 分布式数据库的分布式事务处理技术 分布式数据库选型与实战 服务vivo数亿用户的数据库服务平台实践 广告实时数仓建设实践 海量异构数据,在线业务存储架构演进与实践 基于图数据库的...

    基于SOA技术架构的多并发异构业务系统中台技术设计.pdf

    5. **数据一致性**:在分布式环境下,保持数据的一致性是挑战,可以借助CAP理论和分布式事务解决方案,如2PC、TCC、Saga等。 6. **监控与日志**:实时监控服务性能,记录日志,以便于问题排查和优化。 总结来说,...

    基于J2EE分布式架构的高性能电商交易接入平台研究与设计.pdf

    这涉及到数据同步策略的设计,以及异构系统间消息传递和事务处理机制的实现。 综上所述,本文提出的基于J2EE分布式架构的电商交易接入平台,通过分布式技术来实现系统的高性能和高可靠性,同时考虑到了与不同系统间...

    基于JMS的分布式异构数据库间的数据同步

    尤其在大型企业中,通常存在多种不同类型(即异构)的数据库系统,如何在这些异构系统之间实现数据同步,对于提升整体业务流程的效率和准确性至关重要。 #### 2. JMS架构及相关概念 ##### 2.1 JMS架构组成 JMS...

    阿里云分布式关系型数据库DRDS-最佳实践-D.docx

    另外,还可以使用分布式事务方式来完成事务,但是这可能会带来性能问题。 常用查询优化是分布式关系型数据库 DRDS 的一个重要方面。为了提高查询效率,需要尽可能让一次前端请求,物理上直接发送到一台存储的机器上...

    分布式OS

    尽管现代技术已转向客户机-服务器系统和异构型多数据库系统,分布式数据库系统仍然是支持大规模并发操作、分布式计算和数据共享的关键技术。随着新技术如面向对象编程、多媒体、并行处理和人工智能的融合,分布式...

    网络游戏-对等网络中逻辑异构系统数据整合方法.zip

    本话题主要探讨的是如何在对等网络中整合来自不同逻辑异构系统的数据,以实现高效、稳定的数据交互与管理。 对等网络是一种网络架构,其中每个节点既是服务的消费者也是服务的提供者,彼此之间地位平等。在网络游戏...

    分布式数据库系统概述.ppt

    6. 分布式事务管理:确保跨节点的事务处理的一致性和可靠性。 分布式数据库系统可以根据不同的标准进行分类: 1. 按照局部数据库管理系统的数据模型:同构型(数据模型相同)和异构型(数据模型不同)。 2. 按照...

    一种用于分布式工作流系统的消息中间件.pdf

    分布式工作流系统间的协作执行是一个挑战,尤其是在异构系统之间。 一个有效的分布式工作流系统需要考虑业务信息的一致性、本地系统的自治性、异构兼容性和系统的可扩展性。业务信息的一致性要求系统能够处理不同...

    分布式数据库技术在电力企业中的应用 (1).pdf

    1. 明确数据的物理位置:这一步需要考虑多个方面,比如不同节点间传输的事务量、网络整体性能和可靠性、节点数据量、节点速度、磁盘容量、节点间的访问方式以及表间数据关系等。合理的数据物理位置可以保障数据访问...

    分布式对象技术 真题

    5. 分布式事务处理: - ACID属性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。 - 两阶段提交(2PC):确保所有参与者的事务一致性的协议。 6. 容错与恢复: - ...

    分布式数据库系统复习.pdf

    分布式数据库系统是现代大型系统中常见的一种架构,它将数据分布在多个不同的节点上,以提高系统的可用性、可扩展性和性能。本篇文章将深入探讨分布式数据库系统的关键知识点。 首先,根据局部数据库管理系统的数据...

    OceanBase OBCA认证体验及资源分享

    4. OceanBase 分布式事务处理:OceanBase 的分布式事务处理产品,提供高性能和高可用的分布式事务处理能力。 5. OceanBase 数据订阅链路:OceanBase 的数据订阅链路产品,提供实时数据同步和数据订阅能力。 Ocean...

    面向对象分布式系统概述《课程论文》

    ### 面向对象分布式系统概述 ...通过CORBA和DCOM这样的标准,不仅实现了异构环境下的对象互操作性,还提高了系统的可靠性和安全性。未来,随着云计算和物联网技术的发展,面向对象分布式系统的重要性将进一步凸显。

Global site tag (gtag.js) - Google Analytics