一种高交易并发量的处理方法与流程

文档序号:11775568阅读:1305来源:国知局
一种高交易并发量的处理方法与流程

本发明涉及金融系统中存在高交易并发量的处理,尤其是针对银行业务系统中的热点账户的数据处理。



背景技术:

当前银行业务系统中,经常会出现一些针对同一个账户进行大量的业务交易,例如同一个账户的频繁转账需要更新数据库中的账户记录,通常我们将一秒内交易并发量高达500笔的账户称为热点账户。相应的,对这些交易量大并涉及热点账户更新的业务,称之为热点账户业务;交易量小或不涉及热点账户更新的业务,视为非热点账户业务。

通常,对于银行业务系统中的一条账户记录的更新,一般需要如下过程,首先对这条账户记录的数据进行锁定(lock),锁定完成后,对其余额进行更新,然后释放锁定(unlock),这是为了防止其他业务对这个账户数据也同时进行操作,避免不必要的数据错误,保证同一时间只有一个业务主体在对其账户数据进行操作。假设数据库对数据进行一次更新需要使用10毫秒的时间,而如果遇到交易并发量巨大的热点账户,则需要一分钟内处理几千甚至上万次的操作,那么数据库就会来不及响应,最后崩溃。即便是到it技术如此发达的今天,热点账户依然是困扰很多银行业务系统的顽疾。

现有的银行业务系统中没有对热点账户进行特别的处理,因而当出现热点账户时,具有如下问题:1、数据库行级锁导致响应时间长,交易处理缓慢;2、长时间的堆积堵塞,会导致很多交易请求最终超时失败,原因为系统的处理能力不够;3、而如果变更现有的锁定-更新-释放锁定的数据处理方式,则会存在资金风险、交易成功失败不确定风险。



技术实现要素:

因此,针对上述的问题,本发明提出一种高交易并发量的处理方法,针对银行业务系统中的热点账户(高交易并发量)执行特别处理:采用临时止付及延时记账措施,实现一种临时止付延时记账方案,提高系统并发能力,解决热点账户导致的数据库来不及响应的顽疾。

具体的,为了解决上述技术问题,本发明所采用的技术方案是,一种高交易并发量的处理方法,包括:

预设一热点账户表,该热点账户表内预先存储了热点账户的账号;

接收账户的交易处理请求,查询该账户的账号是否在热点账户表里;其中,账户的交易处理请求包括余额更新、账户明细、动账通知、核算明细等等请求;

如果该账户存在于热点账户表里,则调用热点账户流程对该账户的交易处理请求进行处理;

热点账户流程处理账户的交易处理请求的过程中,在待处理账务队列中添加异步任务,该异步任务用于处理账户的交易,并将账户的交易分为两个流程处理,一个流程处理余额更新请求以及解止付;另一个流程处理除余额更新以外的账务处理请求,例如账户明细、动账通知、核算明细等等处理请求。

进一步的,热点账户流程对账户的交易处理请求进行处理,包括:

判断该账户是借方账户还是贷方账户,如果该账户是借方账户,则转到借方热点账户的处理步骤,如果该账户是贷方账户,则转到贷方热点账户的处理步骤。

其中,所述借方热点账户的处理步骤包括::

步骤1:在独立事务中处理借方止付,同时往热点账户临时止付表中添加止付记录;热点账户临时止付表用于记录处理过程中对账户实施临时止付的记录;

步骤2:对该借方账户的可用额度检查,如可用额度小于0则交易立即失败,并退出;可用额度由可用额度算法计算得到;

步骤3:如果可用额度大于0,对贷方账户更新;

步骤4:对借方账户更新,在待处理账务表(待处理账务队列)中添加异步任务,该异步任务分为两个流程(记为第一流程和第二流程)处理,第一流程处理余额更新以及解止付;第二流程处理除余额更新以外的账务处理;同时,添加账户余额变更的冲正日志;其中,处理时,第一流程只处理余额更新以及解止付,对借方账户明细、动账通知、核算明细等处理全部略过,由第二流程进行延时批量处理;

步骤5:若更新不成功,则交易失败、出现异常,释放借方止付:在热点账户临时止付表中删除本次交易添加的所有止付记录。本操作在主事务回滚后处理。

所述贷方热点账户的处理包括如下步骤:

步骤1:贷方账户更新:在待处理账务表中添加异步任务,该异步任务分为两个流程(记为第一流程和第二流程)处理,第一流程处理余额更新以及解止付;第二流程处理除余额更新以外的账务处理;其中,贷方账户明细、动账通知、核算明细等处理全部略过,由异步的延时批量处理;同时,添加账户余额变更的冲正日志;在热点账户临时止付表中添加止付记录(可采用负数),添加账户余额变更的冲正日志;

步骤2:借方账户更新。

进一步的,上述第一流程(借方热点账户的处理步骤中的异步任务的第一流程和贷方热点账户的处理步骤中的异步任务中的第一流程都适用)对余额更新的处理是定时批量进行处理,其包括如下步骤:

步骤1:从“待处理账务表”中筛选满足预设条件的记录放入内存数组,例如预设条件为:交易日期=“热点账户批量日期”and状态=’0’,选取前10000条记录;

步骤2:根据内存数组登记的记录范围,按主账号和币种汇总轧差发生额;

步骤3:按主账号和币种的轧差发生额更新主账户余额;

步骤4:根据核心流水号、账务序号删除“热点账户临时止付表”中对应的记录;

步骤5:更新“待处理账务表”中这10000条记录的状态=’2’。

更进一步的,上述第二流程(借方热点账户的处理步骤中的异步任务的第二流程和贷方热点账户的处理步骤中的异步任务中的第二流程都适用)对除余额更新以外的账务处理请求进行处理,具体是定时批量进行处理,其包括如下步骤:

步骤1:从“待处理账务表”筛选满足预设条件的记录,例如预设条件为:交易日期=“热点账户批量日期”and状态=’2’,选取前10000条记录。

步骤2:按核心流水号、账户序号删除“待处理账务表”中的对应记录,清理异常的临时止付记录;

步骤3:对主账户表属性的上日账户余额、余额最近更新日期、上次业务日期等进行更新;

步骤4:生成账户明细,明细中的余额按发生额顺序整理,据上日余额或最新余额顺序逐笔推算;核算明细生成处理等;

步骤5:添加账户明细、核算明细的冲正日志信息(核心流水号使用原核心流水号);

步骤6:按账户明细批量发送动户通知消息,用多记录消息打包发送以提高效率;

步骤7:清理异常的临时止付记录处理:无待处理账务记录的临时止付记录要清除;该步骤中的清理异常的临时止付记录是为后续保障措施;

步骤8:冲正的其它处理,如账务记录为冲正,则处理冲正的其它内容(如调息等)。

进一步的,热点账户流程对账户的交易处理请求进行处理,还包括对异常进行处理,对异常进行处理又分为定时批量处理异常,以及日终批量处理异常方案;其中,采用定时批量处理异常方案,其包括如下过程:

步骤1:回滚当前批量窗口事务;当前批量窗口事务是除联机账户限额检查外的异步批量处理流程,例如目前系统设置的窗口期为每500笔一提交,做回滚时仅回滚当前窗口期内的事务,之前已提交的为完成状态,后面未提交的为未完成状态;

步骤2:暂停“延时记账定时批量”;“延时记账定时批量”即是上述对除余额更新以外的账务处理请求的第二过程,暂停“延时记账定时批量”也即暂停第二过程的处理;

步骤3:记录异常日志;

步骤4:发送告警消息。

采用日终批量处理异常的过程如下:

步骤1:回滚当前批量窗口事务;

步骤2:终止日终批量;

步骤3:记录异常日志;

步骤4:发送告警消息。

其中,日终批量与上述定时批量在处理逻辑上是一致的,仅仅是发起时点与方式的区别,日终批量是保障t日热点账户账务正常处理完毕的最后防线,如不满足全部完成的条件,那么后续的处理流程就必须等待,直到完成所有热点账户的账务处理。

进一步的,热点账户流程对账户的交易处理请求进行处理,还包括冲正处理,热点账户交易的冲正仍使用统一的冲正机制处理,但对临时止付、待处理账务的冲正要进行特殊处理,其具体包括如下过程:

在对“插入临时止付”类的业务日志冲正时,执行如下操作:在“热点账户临时止付表”添加记录,金额与原交易相反(如插入的止付金额为正数),可使用独立事务插入;并进行透支余额检查,以保证冲正不使账务透支;

在对“插入待处理账务”类的业务日志冲正时,执行如下操作:在“待处理账务表”添加记录,启用两个异步处理:一是采用第一过程(异步余额更新机制,定时批处理)处理余额变更的冲正;二是采用第二过程(异步其它处理,定时批处理)处理除余额更新以外(账户明细、核算明细、动户通知等)的冲正。

上述过程中,冲正处理非必须过程,只有当后续异步处理出现异常是才会发起。一旦发起冲正请求,那么需要完成三个动作:1、使用通用冲正处理机制对联机交易请求进行冲正;2、对临时止付做特殊形式的冲正;3、对待处理账务做特殊形式的冲正。

现有的银行业务系统处理热点账户时,是通过查看该账户交易并发量在预设时间内的次数来判定热点账户,也就是说其是在交易时进行识别的,而本发明在交易时不对交易进行热点识别,而是在服务组件中根据账号进行识别其是否热点账户,如果是热点账户则自动调用热点账户流程进行处理,因此所有的交易的账户都先经过服务组件过滤,从而控制实际对热点账户操作的并发数,因此本发明的方案可解决交易处理缓慢问题,以及交易请求不再堆积堵塞等问题。

同时,本发明采用延时入账的策略,采用两个流程分别执行临时止付和延时记账,提高系统并发能力,处理时,第一个流程仅处理余额和解止付,从而实现高速处理,第二个流程处理除余额以外的其他复杂的账务处理,第二个流程采用定时批量处理的方式,每隔预设时间筛选预设条件的热点账户数据放入内存,然后把内存的热点账户数据同步到数据库去。也就是说本发明将余额更新和其他账务处理分开,余额更新可即时实现,其他账务处理执行定时批量操作,因此本发明的设计不仅满足余额更新的及时,而且解决了热点账户交易处理缓慢、交易请求堆积堵塞等问题。

附图说明

图1为使用本发明对银行核心系统热点账户处理的整体方案;

图2为使用本发明对银行核心系统热点账户处理的业务流程处理总览;

图3为使用本发明对银行核心系统热点账户处理的借方流程图;

图4为使用本发明对银行核心系统热点账户处理的贷方流程图;

图5为使用本发明对银行核心系统热点账户余额定时处理的流程图;

图6为使用本发明对银行核心系统热点账户其他账务定时处理的流程图;

图7为使用本发明对银行核心系统热点账户日终处理的流程图;

图8为使用本发明对银行核心系统热点账户冲正处理的流程图。

具体实施方式

下面详细描述本发明的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本发明,而不能理解为对本发明的限制。

参见图1,本发明提供一种高交易并发量的处理方法,其包括:

预设一热点账户表,该热点账户表内预先存储了热点账户的账号;

接收账户的交易处理请求,查询该账户的账号是否在热点账户表里;其中,账户的交易处理请求包括余额更新、账户明细、动账通知、核算明细等等请求;

如果该账户存在于热点账户表里,则调用热点账户流程对该账户的交易处理请求进行处理;

热点账户流程处理账户的交易处理请求的过程中,在待处理账务队列中添加异步任务,该异步任务用于处理账户的交易,并将账户的交易分为两个流程处理,一个流程处理余额更新请求以及解止付;另一个流程处理除余额更新以外的账务处理请求,例如账户明细、动账通知、核算明细等等处理请求。

作为一个具体的实施案例,以下介绍本发明的具体实现,首先建立下表的各种服务组件,以支撑热点账户延时汇总方案的实现:

参见图2,本发明的整体方案设计如下:

a)在联机交易时不对交易进行热点识别,而是在服务组件中根据账号进行识别,并自动调用热点账户流程处理;

b)识别到热点账户时,需要在待处理账务队列添加异步任务,以便通知其它流程配合处理;

c)其中的异步任务分为两个流程处理,一个高速处理:仅处理余额更新解止付;一个复杂处理:除余额外的账务处理。

d)日终处理中的处理,一是保证日切的正常进行,一是对相关数据进行维护处理(分维护)。

当热点账户流程对账户的交易处理请求进行处理时,首先判断该账户是借方账户还是贷方账户,如果该账户是借方账户,则转到借方热点账户的处理步骤,如果该账户是贷方账户,则转到贷方热点账户的处理步骤。

其中,参见图3,借方热点账户的处理包括如下步骤:

步骤1:在独立事务中处理借方止付,同时往热点账户临时止付表中添加止付记录;

步骤2:对该借方账户的可用额度检查,如可用额度小于0则交易立即失败,并退出;可用额度由可用额度算法计算得到;

步骤3:如果可用额度大于0,对贷方账户更新;

步骤4:对借方账户更新,在待处理账务表(用以描述待处理的账务队列)中添加异步任务,该异步任务分为两个流程(记为第一流程和第二流程)处理,第一流程处理余额更新以及解止付;第二流程处理除余额更新以外的账务处理;同时,添加账户余额变更的冲正日志;其中,处理时,第一流程只处理余额更新以及解止付,对借方账户明细、动账通知、核算明细等处理全部略过,由第二流程进行延时批量处理;

步骤5:若更新不成功,则交易失败、出现异常,释放借方止付:在热点账户临时止付表中删除本次交易添加的所有止付记录。本操作在主事务回滚后处理。

参见图4,贷方热点账户的处理包括如下步骤:

步骤1:对借方额度进行检查,符合条件则转到步骤2;

步骤2:贷方账户更新:在待处理账务表中添加异步任务,该异步任务分为两个流程(记为第一流程和第二流程)处理,第一流程处理余额更新以及解止付;第二流程处理除余额更新以外的账务处理;其中,贷方账户明细、动账通知、核算明细等处理全部略过,由异步的延时批量处理;同时,添加账户余额变更的冲正日志;在热点账户临时止付表中添加止付记录(可采用负数),添加账户余额变更的冲正日志;

步骤3:借方账户更新。

借方热点账户的处理步骤中的异步任务的第一流程和贷方热点账户的处理步骤中的异步任务中的第一流程中对余额更新的处理均是采用定时批量的方式进行处理,参见图5,其包括如下步骤:

步骤1:从“待处理账务表”筛选记录放入内存数组,筛选条件为:交易日期=“热点账户批量日期”and状态=’0’,选取前10000条记录;

步骤2:根据内存数组登记的记录范围,按主账号和币种汇总轧差发生额;

步骤3:按主账号和币种的轧差发生额更新主账户余额;

步骤4:按照核心流水号、账务序号(主键),删除“热点账户临时止付表”中的对应记录;

步骤5:同时,更新“待处理账务表”中这10000条记录的状态=’2’。

参见图6,借方热点账户的处理步骤中的异步任务的第二流程和贷方热点账户的处理步骤中的异步任务中的第二流程对除余额更新以外的账务处理请求进行处理,具体是采用定时批量的方式进行处理,其包括如下步骤:

步骤1:从“待处理账务表”筛选记录,条件:交易日期=“热点账户批量日期”and状态=’2’,选取前10000条记录,也即第一流程定时批量操作结束后的记录;

步骤2:按核心流水号、账户序号删除“待处理账务表”记录,清理异常的临时止付记录;

步骤3:上日账户余额、余额最近更新日期、上次业务日期等主账户表属性更新;

步骤4:生成账户明细,明细中的余额按发生额顺序整理,据上日余额或最新余额顺序逐笔推算;核算明细生成处理等;

步骤5:添加账户明细、核算明细的冲正日志信息(核心流水号使用原核心流水号);

步骤6:按账户明细批量发送动户通知消息,用多记录消息打包发送以提高效率;

步骤7:清理异常的临时止付记录处理:无待处理账务记录的临时止付记录要清除;

步骤8:冲正的其它处理,如账务记录为冲正,则处理冲正的其它内容(如调息等)。

对异常的处理又分为定时批量处理异常方案,以及日终批量处理异常方案;其中,采用定时批量处理异常方案,其包括如下过程:

步骤1:回滚当前批量窗口事务;

步骤2:暂停“延时记账定时批量”;

步骤3:记录异常日志;

步骤4:发送告警消息到核心信息交换子系统;

采用日终批量处理异常的过程如下:

步骤1:回滚当前批量窗口事务;

步骤2:终止日终批量;

步骤3:记录异常日志;

步骤4:发送告警消息到核心信息交换子系统。

日终批量流程处理参见图7。

参见图8,热点账户交易的冲正仍使用统一的冲正机制处理,但对临时止付、待处理账务的冲正要进行特殊处理:

在对“插入临时止付”类的业务日志冲正时,使用特殊处理扩展:

步骤1:在“热点账户临时止付表”添加记录,金额与原交易相反,如插入的止付金额为正数,使用独立事务插入,并进行透支余额检查,以保证冲正不使账务透支。

步骤2:在对“插入待处理账务”类的业务日志冲正时,使用特殊处理扩展::

步骤3:在“待处理账务表”添加记录,启用两个异步处理:一是用异步余额更新机制(定时批处理)处理冲正后的余额变更;二是启用异步其它处理(定时批处理)处理账户明细、核算明细、动户通知等冲正处理。

尽管结合优选实施方案具体展示和介绍了本发明,但所属领域的技术人员应该明白,在不脱离所附权利要求书所限定的本发明的精神和范围内,在形式上和细节上可以对本发明做出各种变化,均为本发明的保护范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1