首页> 中国专利> 并行处理事务的异步方法

并行处理事务的异步方法

摘要

本发明公开了一种并行处理事务的异步方法。步骤S102,收到来自应用层的事务请求消息,创建事务对象,事务对象用事务对象标识来唯一标识;步骤S104,事务对象进入开始状态,基于事务对象标识,在应用层与异步机制层之间执行事务处理;步骤S106,事务处理结束后,释放事务对象,回收事务对象标识。不仅能够解决异步系统中多个事务并行执行时相互干扰的问题,提高系统的效率,而且可以使异步系统的开发得到简化。

著录项

  • 公开/公告号CN101192173A

    专利类型发明专利

  • 公开/公告日2008-06-04

    原文格式PDF

  • 申请/专利权人 中兴通讯股份有限公司;

    申请/专利号CN200610140343.3

  • 发明设计人 付强;

    申请日2006-11-27

  • 分类号G06F9/46;

  • 代理机构北京康信知识产权代理有限责任公司;

  • 代理人李伟

  • 地址 518057 广东省深圳市南山区高新技术产业园科技南路中兴通讯大厦

  • 入库时间 2023-12-17 20:15:19

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2017-01-11

    未缴年费专利权终止 IPC(主分类):G06F9/46 授权公告日:20100929 终止日期:20151127 申请日:20061127

    专利权的终止

  • 2010-09-29

    授权

    授权

  • 2008-07-30

    实质审查的生效

    实质审查的生效

  • 2008-06-04

    公开

    公开

说明书

技术领域

本发明涉及数据通信领域,尤其涉及一种并行处理事务的异步方法。

背景技术

目前,在涉及到socket(套接口)通信、数据库访问的软件系统中,为了提高效率和响应速度,一般都采用异步方式。比如:

1)用一组线程专门负责socket通信,当有消息到达时,就用消息通知应用线程,应用线程再进行后续处理。

2)用一组线程专门负责访问数据库,当数据库操作(查询、修改等)完成后,用消息把操作结果一批一批的发给应用线程。

在很多情况下,一个完整的功能需要进行多次消息操作。比如在数据同步应用中(参见图3),一个完整的数据同步过程由几个到几十个消息组成。多个消息按一定先后顺序执行,完成一个独立的功能,这些消息就构成一个事务,当事务的最后的一个消息执行完成或事务超时时一个事务才算结束。当多个事务并行执行时,必须加以区分和同步(否则多个事务交织在一起,必然造成系统混乱),目前常用的方法有:

1)使用全局变量:设置很多全局变量,来保存各个事务的状态和中间数据。

2)同步化:同步化是用一个环形队列(事务开始事件队列)实现的,任何时间段,应用线程要么空闲,要么处理一个事务。一个事务处理完后,才开始处理下一个事务。在一个事务处理期间,其他事务请求被缓存在“事务开始事件队列”中。

采用第一种方法将导致系统的设计非常复杂和难以理解,进而导致系统难以维护。采用第二种方法虽然简化了系统的设计、解决了多个事务相互干扰的问题,但这种方法使系统变成一个同步顺序处理的系统,socket线程和数据库访问线程的优势得不到发挥。

上述方法都有很大的缺陷,实际应用中,需要一种即能解决多个事务并行执行时相互干扰的问题,又能使设计、开发都比较简单的方法。

发明内容

本发明的主要目的在于提供一种并行处理事务的异步方法,用于用事务和状态机构造高效异步系统,即能解决异步系统中事务间相互干扰,又能简化系统的设计和实现。

为了实现上述目的,本发明提供了一种并行处理事务的异步方法。该异步方法包括以下步骤:

步骤S102,收到来自应用层的事务请求消息,创建事务对象,事务对象用事务对象标识来唯一标识;

步骤S104,事务对象进入开始状态,基于事务对象标识,在应用层与异步机制层之间执行事务处理;

步骤S106,事务处理结束后,释放事务对象,回收事务对象标识。

进一步地,在步骤S104中,将来自异步机制层的异步消息转换成事务对象的事件,将事务对象的事件转换成异步机制层所需的异步消息。

不同的事务对象用不同的事务对象标识来区别,在事务处理过程中采用的消息中携带事务对象标识,以实现不同的事务对象的并行运行。

异步机制层可以包括socket线程和数据库访问线程。

事务处理可以包括数据同步处理。数据同步处理可以包括同步单条记录、同步所有记录、以及同步单模块数据。

通过上述技术方案,本发明不仅能够解决异步系统中多个事务并行执行时相互干扰的问题,提高系统的效率,而且可以使异步系统的开发得到简化。

附图说明

此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:

图1是根据本发明的并行处理事务的异步方法的流程图;

图2是根据本发明的并行处理事务的异步系统的框图;

图3是根据本发明实施例的异步系统的数据同步实例的示意图;

图4是根据本发明实施例的在异步系统中引入事务和状态机后系统的结构图;

图5是根据本发明实施例的数据同步对象的状态图;

图6是根据本发明实施例的状态机类的层次结构图;

图7是根据本发明实施例的同步单条记录的状态图;

图8是根据本发明实施例的同步单条记录的顺序图;以及

图9是根据本发明实施例的方法的流程图。

具体实施方式

下面将参考附图详细说明本发明。

参照图1,根据本发明的并行处理事务的异步方法包括以下步骤:

步骤S102,收到来自应用层的事务请求消息,创建事务对象,事务对象用事务对象标识来唯一标识。

步骤S104,事务对象进入开始状态,基于事务对象标识,在应用层与异步机制层之间执行事务处理。

进一步地,将来自异步机制层的异步消息转换成事务对象的事件,将事务对象的事件转换成异步机制层所需的异步消息。

步骤S106,事务处理结束后,释放事务对象,回收事务对象标识。

不同的事务对象用不同的事务对象标识来区别,在事务处理过程中采用的消息中携带事务对象标识,以实现不同的事务对象的并行运行。

异步机制层可以包括socket线程和数据库访问线程。

事务处理可以包括数据同步处理。数据同步处理可以包括同步单条记录、同步所有记录、以及同步单模块数据。

参照图2,根据本发明的并行处理事务的异步系统10包括:应用层20,用于实现具体业务处理;异步机制层30,用于进行异步处理;事务处理层40,位于应用层20与异步机制层30之间,用于创建事务对象,事务对象用事务对象标识来唯一标识,以及用于将来自异步机制层30的异步消息转换成事务对象的事件,将事务对象的事件转换成异步机制层30所需的异步消息。其中,不同的事务对象用不同的事务对象标识来区别,在事务处理过程中采用的消息中携带事务对象标识,以实现不同的事务对象的并行运行。

异步机制层30可以包括socket线程和数据库访问线程。

事务处理可以包括数据同步处理。数据同步处理可以包括同步单条记录、同步所有记录、以及同步单模块数据。

本发明涉及数据通信领域,具体地说,涉及一种用事务和状态机构造高效率异步系统的方法。本发明提供的构造高效异步系统的技术是这样实现的:采用分层架构,在基本异步机制(socket线程、数据访问线程等)的基础上增加一个抽象的事务处理层(参见图4)。事务是用状态机实现的,一个事务就是一个状态机。每个事务都用一个状态机ID唯一标识。事务层负责状态机ID的管理、把底层异步消息转化为FSM(状态机)的事件、把应用层的FSM事件转换为socket消息或数据库请求、创建、驱动和销毁状态机。现在以数据同步应用(参见图3和图5)为例加以说明。

A.Socket线程收到进程A的数据同步请求后,用消息通知事务层。

B.事务层发现这是一个事务开始消息,然后创建一个数据同步对象,该对象进入TrBegin(开始状态)。

C.在TrBegin状态中,数据同步对象向数据库线程发查询请求,然后进入TrWaitDbAck(等待数据库操作查询结果)状态。

D.在TrWaitDbAck状态中,数据同步对象接收数据库返回的每批查询结果,并暂存每批查询结果,直到收到最后一批查询结果。收全查询结果后,进入TrWaitTransDataAck(传送数据)状态。

E.在TrWaitTransDataAck状态中,数据同步对象通过socket线程向进程B分批发送数据,每发送一批都要等进程B返回的数据确认消息后才发送下一批数据,直到收到最后一批数据的确认消息。数据发送完毕后,进入TrEnd(结束)状态。

F.在TrEnd状态中,数据同步对象通过socket线程向进程A发数据同步成功响应消息,然后事务结束。

G.在以上各步中,如果超时,则进入TrTimeOut(超时)状态。在TrTimeOut状态,数据同步对象向进程A发数据同步超时事件,然后事务结束。

H.事务结束时,事务层将释放数据同步对象,同时回收事务ID。

应用线程中可并行运行多个事务,由于每个事务都是一个独立的对象,所以数据相关性降到最小。所有事务都是消息驱动的。一个事务在等待其下一个事件时(如等待数据库查询结果、等待对端发数据响应等),别的事务仍然可以继续运行,这样系统可以达到最佳的并行性。

另外,系统的开发也得到简化,开发人员只需要用顺序执行的思维方式去开发状态机对象:设置超时时限、编写本状态应该执行的动作、设置下一个状态。

下面结合附图,对技术方案的实施作进一步的详细描述:

需要强调的是:本方法可以应用在所有异步软件系统中,由于各种异步系统的实现方式和接口都不一样,为了叙述的方便,下面采用一种具体的异步系统进行说明。

假设底层异步机制提供给应用线程的接口为:

1)void Entry(unsigned short event,unsigned char*msg,unsignedshort msgLen);

当有其他线程向应用线程发消息时,Entry被调用。参数event是事件号;msg和msgLen用于描述消息。

2)unsigned char ASEND(unsigned short event,unsigned char*msg,unsigned short msgLen,PID receiver);

当应用线程向其他线程发消息时,它就调用ASEND。参数event是事件号;msg和msgLen用于描述消息;receiver用于指定消息的接收者。

可以在这两个接口上构造事务层。所有消息中都携带了“本端状态机号”和“对端状态机号”。

所有事务都是从CFsm类继承得到的,如图6所示。图6是数据同步的例子。CDataSyncARecord是用于同步单条记录的事务,CDataSyncAll是用于同步所有记录的事务,CDataSyncAModule是用于同步单模块数据的事务。下面以“同步单条记录”(参见图7)这个事务加以说明(参见图8、图9)。

A.底层异步机制把一个异步消息触发到事务层。

B.事务层解析收到的消息。

C.如果“对端状态机号”为0,则表示该消息是个事务开始消息。此时分配一个状态机号,然后根据收到的事件号(event)从事务类注册表里找到合适的事务类。这里假设收到的消息是同步单条记录的请求,则相应的事务类是CdataSyncARecord。

D.创建FSM对象:用CdataSyncARecord类的自创建方法(CreateSelf),用前一步分配的状态机号为参数创建一个事务处理对象。该对象进入TrBegin状态。

E.TrBegin处理:在TrBegin状态中,根据收到的消息,构造维护单条记录的SQL语句,提交给数据库处理线程,应用进程进入等待数据库操作结果状态。

F.状态驱动:此后当应用进程收到消息后,如果消息中携带的“对端状态机号”和本对象的“状态机号”相等,则事务层把该消息转化为FSM事件,分发给本对象,进而驱动本对象的状态机。

G.当“同步单条记录”对象收到最后一个消息或某个状态处理超时时,事务进入结束状态,然后事务层回收该事务。流程结束。

从上面的叙述中可以看出,采用本方法构造的异步系统由三部分组成(如图4所示),其中异步机制是异步系统的固有部分不需要做额外的修改;事务层是本方法的核心,但是它的功能非常稳定并且具有通用性,并且从一种异步机制移植到另一种异步机制上,只需要很小的开发成本;应用层实现具体业务处理,应用层的主要设计开发工作集中在事务处理类的状态处理的实现上。

把由多个消息共同完成的一个功能抽象成事务,然后用事务对象(状态机)实现每个具体的事务,使原来需要维护的大量状态数据得到封装,使事务之间的数据相关性降低到最小,从而使多个事务可以并行执行。另外采用本方法抽象得出的事务对象,使系统化整为零,每个事务都不存在相互干扰,所以使设计开发变的简单。

以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号