`
verytiny
  • 浏览: 368250 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

服务器与客户端交易数据的一致性解决

阅读更多

数据一致性的TongEASY解决之道

字体:        | 上一篇 下一篇 | 打印

 

目前采用开放式系统的银行柜面业务处理系统,基本都是客户/服务器结构的,客户端需要通过介质多样的广域网与服务端通讯。由于网络的不可靠性,常常出现传输过程中交易数据的丢失,造成客户端与服务端的交易不完整或数据不一致,导致银行的资金风险和信誉风险。如何防范由于通讯原因产生的风险,如何控制数据的一致性,是任何一个客户/服务器结构的联机交易处理系统必须考虑的问题。

一、 导致数据不一致的原因
  在客户/服务器结构的联机交易处理系统中,一笔交易至少包含如下图所示的四个过程:①请求传输过程;②服务端交易处理过程;③应答传输过程;④客户端处理应答过程。



              图表 1 交易的基本处理过程


  由于网络传输的不可靠性,必然有"③应答传输过程" 失败的情况。在这种情况下,就产生了服务端与客户端交易状态的不一致性问题:在服务端,该笔交易已处理或完成;在客户端,由于没有收到应答,该笔交易是失败的。

  这种客户端及服务端的不一致性,会给银行带来资金风险和信誉风险。当该笔交易是增加客户的可用资金时,产生了资金风险,当该笔交易是减小客户的可用资金时,产生了信誉风险。例如一笔存款交易产生数据不一致时,在服务端,客户的帐户余额已增加,而在柜台,该笔业务失败,存款并末收入,从而造成客户的余额虚增,客户可以通过正常的途径使用该笔资金,这将造成银行资金损失。一笔取款交易产生数据不一致时,在主机端,客户的帐户余额已减少,而在柜台,该笔业务失败,客户并未取到款。如果客户发现这一情况,将会造成银行的信誉损失。

二、 冲正与重复办理方式

  目前大部分银行业务处理系统采用冲正或重复办理的方式,了解决数据不一致的问题。这两种方式的基本思想,都是当数据不一致性问题发生后,通过事后附加的干预过程来进行补救。

(一) 冲正方式
  冲正方式下,一笔交易以客户端为准,客户端完成,该笔交易才完成,客户端失败,则该笔交易失败。当应答传输过程失败,前端认为该笔交易失败,将产生一笔冲正交易。该笔冲正交易将取消上一笔交易的结果,从而恢复客户端及服务端的数据一致性。

  按产生冲正交易的时机,可以分为三种:
1、立即冲正,是在一笔交易超时无应答时,立即发出冲正;
2、定时冲正,是指按固定的时间间隔,发出冲正交易;
3、当一笔交易未成功时,在做下一笔交易时,先自动做一个冲正交易,当冲正交易完成后,才执行正常交易。目前,POS系统广泛使用的是下一笔交易冲正的方式。

  冲正方式程序控制简单,适应性广。但这种方式无法确保冲正成功的时间,从而也就无法控制风险存在的时间。一个极端的情况是,通讯故障是由于物理线路中断造成的,在线路恢复正常前,冲正交易无法完成,风险将一直存在。

(二)重复办理方式
  重复办理方式下,一笔交易以服务端为准,服务端处理成功,无论客户端是否收到结果,均认为该笔交易成功。当应答传输过程失败造成客户端交易失败,客户端必须重复办理该笔交易,在服务端,收到重复的交易请求,若该笔交易已处理,则将上笔交易的结果作为本次交易的处理结果返回,若未处理,则按正常交易进行处理。

  这种方式的优点在于控制简单,易于实现。局限性基本同冲正方式,即无法控制风险存在的时间。另外,以服务端为准的条件使它的使用范围受到一定的限制。在对公会计系统中,通常采用重复办理的方式。

三、锁方式

  锁方式是将数据的不一致性转换为数据的不可用性,通过数据的不可用性,消除风险的产生。
锁方式具体的实现方法是:在②服务端处理过程后,对该操作所涉及的数据加锁,使它们处于一种不可用的状态;增加⑤确认传输过程和⑥服务端确认处理过程。当客户端收到应答并处理完毕后,将产生给服务端发一个确认信息,当服务端收到确认后,对第②步锁住的数据进行解锁。如下图所示:




                图表 2 锁方式的处理过程

  通过上图可以看出,在t1~t4 的时间段内,该笔交易所涉及的数据是加锁的。当③应答传输过程失败时,则不会执行第⑥步的解锁操作。后续涉及这些数据的交易将由于锁的存在而不再进行,因此,不会造成银行的资金损失及信誉损失。

  加锁常用两种实现方式:对数据库交易加锁的数据库锁,在应用层对数据加锁的应用锁。锁方式可以根据实际情况决定使用数据库锁或应用锁。

(一)数据库锁
  数据库锁利用关系数据库中提供的交易机制对数据进行加锁保护。

  数据库操作中,"开始交易(begin work)"和"提交交易(commit work)"之间的操作所涉及的数据将被加锁。在②服务端交易处理过程中执行"开始交易"操作,在⑥服务端确认处理过程执行commit work操作。这样从t1至t4之间,数据是被锁住的。当应答传输过程失败时,相关的数据被锁住,与这些数据相关的后续业务将由于锁的存在而无法进行,这样就不会造成数据不一致的问题。
这种方式避免了风险的产生,程序编写简单,易于使用。但是,数据库的锁要占用比较大的系统资源;数据被锁的时间较长,数据库的交易对数据的锁范围较大,没有针对性。因此,数据库的锁对系统支持大规模并发的能力会产生负面影响。过程③和过程⑤的任何一次失败均会导致交易无法结束,从而也就无法释放相应的资源及数据,从而影响后续业务的处理。

  为了避免出现无法释放资源的现象,有些系统采用了结束交易的默认机制。当交易超过一定的时间未结束时,则系统根椐约定,自动进行"提交交易"或"回滚交易(Rollback)"。这种作法实际上可能造成客户端与服务端的数据不一致,使用这种方式的系统一般都具有一个交易中间件,由交易中间件通过XA接口,执行数据库的交易开始及交易结束等与交易有关的操作。

(二)应用锁
  应用锁与数据库锁的差别在于,应用锁方式是在应用程序这一层对数据进行加锁。例如一笔存款业务,在第②步服务端完成业务处理后,对进行存款的帐户进行冻结,使其不能发生业务,直到收到客户端发来的确认后,才对该帐户解冻。

  应用锁的系统开销小,锁的针对性强,系统的并发能力大。但是应用编程复杂,编程量增加,有时很难确定一笔交易应当锁住的数据。

三、 TongEASY方案:锁与自动确认/冲正结合

  从银行业务角度来看,控制风险是首要的,因此一个方案首先必须实现对风险的有效控制。虽然锁方式可以有效地控制风险,但这种方式对系统处理能力及效率会有一定的影响,如何将这种方式对系统的影响控制在可以接受的范围,是解决问题的关键所在。

  通科技公司的交易中间件TongEASY综合上述几种方式的优点,提供了一种解决数据一致性问题的方案,即锁与自动确认/冲正结合的方式:利用锁方式控制数据一致性问题,利用确认/冲正方式释放锁占用的资源。

  TongEASY以锁方式为基础,增加以第⑦个处理过程:确认/冲正的应答传输过程。当服务端接收到客户端的确认/冲正后,服务端将发回一个确认/冲正的应答。TongEASY只有在收到确认/冲正的应答后,才认为该笔交易已处理结束,否则将重复发确认/冲正。处理过程如下图所示:

               图表 3 TongEASY的处理过程

  当③应答传输过程失败时,TongEASY将产生一个"冲正确认"发给服务端,服务端收到"冲正确认"后,则进行冲正操作,取消该笔交易的操作。当⑤确认传输过程或⑦确认应答传输过程失败时,TongEASY将核对交易结果并按一定的时间间隔重复执行⑤确认传输过程,直到过程⑤及⑦均正常完成为止。服务端在进行⑥确认处理过程时,若收到的确认是"正常确认",则对相关数据解除应用锁;若收到的确认是"冲正确认",则对相关数据解除应用锁并进行冲正操作。若收到的"确认"已处理过,则直接发回确认应答信息。

  TongEASY方式相对于锁方式而言,避免了由于单次通讯故障造成资源无法释放,在解决数据不一致性问题的同时,减少了系统资源占用现象,避免了系统在长时间运行后,由于大量资源无法释放而造成系统的性能下降。

四、 结束语

  冲正方式及重复办理方式虽然简单、方便,但却无法防止风险的产生,无法有效控制风险存在时间。

  数据库锁及应用锁的方式可以防止风险的产生,但对系统的运行效率,特别是会影响系统支持大规模并发的能力,在极端的情况下,会影响系统的正常使用。

  TongEASY提供的锁与冲正结合的方式是对锁机制的一种改进,它不但可以防止风险的产生,同时可以减少由于通讯故障造成的资源占用,不失为一种适合中国国情的解决方法。

<!----><!----><!----><script language="javascript" src="../public/bottom.js"></script>

相关推荐

    socket实现服务器和客户端数据的传输

    在"服务器客户端"的场景中,我们通常会有多个客户端同时连接到服务器。在这种情况下,服务器需要能够处理并发连接,这可能涉及到多线程或者异步I/O。对于C++,可以使用线程池或select/poll/epoll等I/O复用机制来处理...

    服务器与客户端通讯

    服务器需要确保数据的一致性和完整性,可能需要执行事务处理来保证操作的原子性。 8. **查找物品**和**修改物品**:这是商品管理系统的常见操作。查找物品涉及检索特定商品的信息,而修改物品则允许更新商品的状态...

    c# 测试服务器与客户端时间

    在IT领域,尤其是在Web开发中,确保服务器与客户端的时间同步是一项重要的任务。本文将深入探讨"C#测试服务器与客户端时间"这一主题,以及如何利用AJAX技术进行时间对比测试。 首先,我们需要理解服务器时间和...

    客户端与服务器端的数据传输

    2. **数据交换**:在客户端,使用TClientSocket组件,设置其Host属性为服务器的IP地址,Port属性与服务器端一致,然后调用Connect方法建立连接。连接成功后,可以使用TClientSocket的SendText方法发送字符串数据,...

    易语言服务器和E4A客户端

    事件同步对象允许不同线程之间进行协调,确保数据的一致性和正确性。例如,当服务器需要更新在线用户列表时,可能会创建一个事件同步对象,客户端在接收到这个事件后,等待服务器完成更新再进行下一步操作,防止数据...

    服务器和客户端的坦克大战

    在游戏环境中,服务器是中心节点,它负责处理玩家的动作、同步游戏状态并确保所有客户端(每个玩家的计算机)之间的一致性。客户端则负责显示游戏界面、接收用户输入并将其发送到服务器,同时接收服务器返回的游戏...

    TCP服务器与客户端源代码工程

    此外,还可以使用Qt的信号和槽机制来同步不同线程间的操作,确保数据的一致性和安全性。 总之,"TCP服务器与客户端源代码工程"是一个实践性的学习资源,它涵盖了C++和Qt进行TCP网络编程的基本要素,对于想要深入...

    FTP客户端与服务器的MFC实现

    在处理大文件时,需要注意内存管理和多线程同步,以确保数据的完整性和一致性。 在设计和实现过程中,还要考虑错误处理和安全性。例如,客户端应处理网络中断、超时和无效响应等情况。服务器端需要防止非法访问,如...

    服务器与客户端线程通信接收

    例如,当多个客户端同时修改同一数据时,数据库管理系统(DBMS)需要确保数据的一致性和完整性。 总的来说,"服务器与客户端线程通信接收"是一个复杂的系统设计问题,涵盖了网络编程、线程同步、数据传输和数据库...

    S7-1500 CPU通过OPC UA客户端与OPC UA服务器进行数据交换的具体方法步骤(图文).docx

    ### S7-1500 CPU 通过 OPC UA 客户端与 OPC UA 服务器进行数据交换的具体方法步骤 #### 概述 本文档详细介绍了如何利用西门子S7-1500 CPU通过OPC UA客户端与OPC UA服务器进行数据交换的过程。这一过程涉及多个关键...

    服务器与客户端1:N通信

    - **数据同步**:保持多台服务器间的数据一致性,确保任何一台服务器都可以无缝接管。 10. **性能优化** - **压缩技术**:减小消息大小,降低网络传输开销。 - **协议优化**:设计高效的通信协议,减少不必要的...

    计算机网络应用程序-客户端与服务器管程通信

    计算机网络应用程序设计是信息技术领域中的核心...通过合理利用管程,开发者可以构建出能够处理大量并发连接的服务器,同时保证数据一致性,避免并发问题。了解和掌握这一技术对于开发高质量的网络应用程序至关重要。

    Gykg.FlowApp.rar_服务器+客户端_服务器数据库_服务器端 数据库_读写服务器

    这种方式的优点是客户端只需关心业务逻辑,无需关注底层数据库的细节,同时也保证了数据的一致性和完整性。同时,由于服务器可以对请求进行验证和权限控制,进一步增强了数据安全。 在“Gykg.FlowApp”程序中,用户...

    unity帧同步Dome下载(包含服务器与客户端)(解决浮点型数据不同步)

    帧同步需要确保角色动作的一致性,包括位置、旋转、攻击动画等,同时处理好伤害计算和物品掉落的同步。 6. **网络优化**:为了降低延迟并提高效率,开发者可能会采用各种网络优化策略,如减少不必要的数据传输、...

    安装oracle数据库服务器与客户端(讲解:老蔡)

    - **注意事项**:客户端版本应与服务器保持一致或相近,以确保功能的完整性和兼容性。 ##### 第六步:完成安装 - **操作步骤**:继续点击“下一步”,直至安装完成。 - **注意事项**:安装完成后,建议测试客户端与...

    c# 服务器与客户端编程2 后果发挥感

    TCP协议保证了数据的准确到达、顺序一致性和无消息边界,使得它成为许多网络应用的基础。 在同步TCP应用编程中,程序在执行发送、接收和监听操作时会进入阻塞状态,直到操作完成才会继续执行后续代码。这意味着,...

    svn服务器与客户端程序

    在软件开发中,SVN服务器和客户端程序是协同工作的重要组成部分,它们帮助团队成员跟踪代码修改,合并不同人的改动,并确保项目版本的一致性。 ### SVN服务器 SVN服务器是存储项目版本库的地方,它负责保存所有...

    SVN服务器与客户端配置

    3. **更新和同步**:当其他团队成员有新的提交时,可以通过"Update"获取最新的版本,保持本地与服务器的一致。 4. **解决冲突**:当多个人修改同一文件时,可能会出现冲突。客户端会提示你解决冲突,手动合并差异或...

    windows设置时间服务器以及客户端同步.rar

    在Windows操作系统中,时间同步是一项重要的功能,确保系统时间与标准时间保持一致,这对于网络通信、数据一致性以及安全审计等有着关键作用。本教程将详细解释如何利用Windows自带的W32Time服务来设置时间服务器,...

    数据库+服务器+客户端

    良好的数据库设计包括合理的数据模型、索引策略和事务管理,以确保数据的一致性、完整性和可用性。 接下来,我们讨论“服务器”。服务器是运行在特定硬件或虚拟机上,为其他设备(即客户端)提供服务的软件或硬件...

Global site tag (gtag.js) - Google Analytics