一种解决运营商账户出账缓冲的方法与流程

文档序号:33408373发布日期:2023-03-10 21:18阅读:61来源:国知局
一种解决运营商账户出账缓冲的方法与流程

1.本发明涉及金融信息化软件、互联网金融领域,特别涉及一种解决运营商账户出账缓冲的方法。


背景技术:

2.运营商账务系统每日有大量业务操作,尤其是内部资金账户,高频次的查询和更新都存在并发处理上的系统瓶颈问题,即实时更新账户余额会出现竞争数据库锁无法处理或处于等待状态,严重影响系统的性能。所以必须采用特殊的处理机制来保证,大部分采取的方案都是缓冲记账处理机制。
3.目前市面上常采用的缓冲记账方式通常只是将记账信息登记在缓存区,然后定时对一段时间内的缓冲账务请求进行汇总记账并更新账户余额。这在一定程度上能解决并发引起的系统瓶颈问题,但这种处理方式有一个问题是不能应用在出账账户上,因为出账方要进行实时余额校验,不然会有资金风险。


技术实现要素:

4.本发明要解决的技术问题是克服现有技术的缺陷,提供一种解决运营商账户出账缓冲的方法。
5.本发明提供了如下的技术方案:
6.本发明提供一种解决运营商账户出账缓冲的方法,包括以下:
7.一、完善的缓冲记账规则设置;缓冲记账规则如图1所示,包括账户号、账户类型、缓冲方向、缓冲间隔、告警金额、最低金额、风险标识和状态信息;
8.账户号、账户类型用来确定唯一的一个资金账户;
9.缓冲方向:包括借方(dr)缓冲、贷方(cr)缓冲、借贷(drcr)缓冲;借方缓冲是指账户在借方记账时采取缓冲记账,贷方缓冲是指账户在贷方记账时采取缓冲记账,借贷缓冲是指账户在借方和贷方记账时都采取缓冲记账的记账方式;本文所讲的出账缓冲,是指商户在借方记账时,采取缓冲记账机制的记账方式,因此商户的借方缓冲或借贷缓冲可能会存在出账缓冲问题;
10.缓冲间隔:采取缓冲记账的账户间隔多长时间执行余额更新操作,缓冲间隔的长短关系到账户的当前余额和实际余额的差异,间隔越短,差异越小;
11.告警金额:当余额低于告警金额时,会发出告警信息,提醒用户充值;
12.最低金额:当余额低于最低金额时,不仅会发出告警信息,还会将缓冲规则置为失效,由缓冲记账改为实时记账;
13.风险标识:用来标志是否需要检查资金风险,一般配合借方缓冲或借贷缓冲使用;“是”表示缓冲记账时需要检查资金风险,“否”表示不需要检查资金风险;
14.状态:标识该缓冲规则是否有效;
15.二、利用缓存实时计算缓冲记账的余额,避免资金损失风险;
16.三、采取红字标识用来控制账户的余额是否为负,并且可以用来保证缓冲记账汇总更新账户余额时一定能够成功;此外,如果账户的红字标识为“y”,表示账户余额可以为负,此时不用关注资金风险问题;红字标识为“n”,表示账户余额不可以为负,此时需要关注资金风险问题。
17.与现有技术相比,本发明的有益效果如下:
18.本技术不仅采用了市面上常用的的缓冲记账方式,并在此基础上完善了缓冲规则机制,包括通过告警金额和最低金额阈值设置来降低发生资金损失风险的概率。此外创新性的增加利用缓存实时计算缓冲记账的余额,在高并发环境下,精确初始化账户余额到缓存,避免资金损失风险。为运营商提供了一套在高业务并发场景冲击下完善、低风险、准确灵活的缓冲记账设计方法和装置。
19.从目前使用效果来看,使用这种方法可以使单账户的出账tps达到2000,系统能够正常平稳、安全的运行,在告警金额和最低金额阈值达到时会进行缓冲记账和实时记账的智能自动切换,避免出现资金风险。
附图说明
20.附图用来提供对本发明的进一步理解,并且构成说明书的一部分,与本发明的实施例一起用于解释本发明,并不构成对本发明的限制。在附图中:
21.图1是本发明的缓冲规则图;
22.图2是本发明的缓冲规则配置模块用例图;
23.图3是本发明的获取缓冲规则模块流程图;
24.图4是本发明的资金风险检查模块流程图;
25.图5是本发明的缓冲记账模块流程图;
26.图6是本发明的实时记账模块流程图;
27.图7是本发明的余额更新模块流程图;
28.图8是本发明的缓冲记账定时任务流程图;
29.图9是本发明的日终缓冲记账定时任务流程图;
30.图10是本发明的异步任务流程图;
31.图11是本发明的缓冲规则检查流程图;
32.图12是本发明的完整记账流程。
具体实施方式
33.以下结合附图对本发明的优选实施例进行说明,应当理解,此处所描述的优选实施例仅用于说明和解释本发明,并不用于限定本发明。其中附图中相同的标号全部指的是相同的部件。
34.实施例1
35.如图1-12,本发明提供一种解决运营商账户出账缓冲的方法,包括以下:
36.一、完善的缓冲记账规则设置;缓冲记账规则如图1所示,包括账户号、账户类型、缓冲方向、缓冲间隔、告警金额、最低金额、风险标识和状态信息;
37.账户号、账户类型用来确定唯一的一个资金账户;
38.缓冲方向:包括借方(dr)缓冲、贷方(cr)缓冲、借贷(drcr)缓冲;借方缓冲是指账户在借方记账时采取缓冲记账,贷方缓冲是指账户在贷方记账时采取缓冲记账,借贷缓冲是指账户在借方和贷方记账时都采取缓冲记账的记账方式;本文所讲的出账缓冲,是指商户在借方记账时,采取缓冲记账机制的记账方式,因此商户的借方缓冲或借贷缓冲可能会存在出账缓冲问题;
39.缓冲间隔:采取缓冲记账的账户间隔多长时间执行余额更新操作,缓冲间隔的长短关系到账户的当前余额和实际余额的差异,间隔越短,差异越小;
40.告警金额:当余额低于告警金额时,会发出告警信息,提醒用户充值;
41.最低金额:当余额低于最低金额时,不仅会发出告警信息,还会将缓冲规则置为失效,由缓冲记账改为实时记账;
42.风险标识:用来标志是否需要检查资金风险,一般配合借方缓冲或借贷缓冲使用;“是”表示缓冲记账时需要检查资金风险,“否”表示不需要检查资金风险;
43.状态:标识该缓冲规则是否有效;
44.二、利用缓存实时计算缓冲记账的余额,避免资金损失风险;
45.三、采取红字标识用来控制账户的余额是否为负,并且可以用来保证缓冲记账汇总更新账户余额时一定能够成功;此外,如果账户的红字标识为“y”,表示账户余额可以为负,此时不用关注资金风险问题;红字标识为“n”,表示账户余额不可以为负,此时需要关注资金风险问题。
46.本文所申请的在出账缓冲场景下为解决资金风险问题的装置,所述装置包括:
47.一、缓冲规则配置模块如图2所示:主要包括新增缓冲规则和修改缓冲规则功能。
48.(1)当新商户接入时,按照商户所属的行业以及商户的交易量大小,判断是否需要配置缓冲规则。如果需要,和商户沟通确认后,联系运营确认相应的缓冲规则,完成新增缓冲规则。
49.(2)当开发监控发现某些商户交易量较大并且未配置缓冲规则时,会通知商服人员,商服人员和商户沟通确认后通知运营新增缓冲规则。
50.(3)商户因业务发展需要,主动联系商服人员配置缓冲规则,商服人员通知运营新增缓冲规则。
51.(4)内部账户默认需要配置缓冲规则,当新增内部户时,开发会通知运营新增缓冲规则。
52.(5)当内部户的缓冲记账规则需要修改时,开发会通知运营完成相应的修改,缓冲规则的修改包括修改缓冲方向、缓冲间隔、告警余额、最低余额、风险标识和状态。
53.(6)当商户的缓冲记账规则需要修改时,商服人员会通知运营完成相应的修改。
54.缓冲规则示例:
55.(1)当商户是收单业务时,对应的缓冲规则如下表所示。缓冲间隔会影响商户余额的准确性,缓冲间隔越大,当前余额和实际余额的差距越大,需要根据实际情况调整。同时由于是入账缓冲,不用担心会有资金风险问题,因此告警金额、最低金额都为0,并且风险标识为“否”。
[0056][0057]
(2)当商户是预存款商户时,主要做批量充值业务(商户将钱充值到个人用户或其他商户),对应的缓冲规则如下表所示,可能有两种方案。方案一主要是通过配置最低金额完成资金风险控制,风险标识可以选择“是”或“否”,主要依据商户资质及对系统性能的要求来决定;某些资质良好和合作关系密切的商户,风险标识可以配置为“否”,用以可以提高系统的性能,提高批量充值的处理效率。告警金额和最低金额需要根据商户的实际交易量来确认,最低金额通常取一个缓冲间隔时间内该商户的最大发生额;告警金额推荐取最低金额的3至5倍,依据商户资质来决定,商户资质越优质,倍数越低。方案二主要是通过配置风险标识来完成资金风险控制,此时最低金额配置为0,告警金额采用和方案一类似的方法确认。方案二主要适用于资质一般、资金不充足、对系统性能没有太高要求的商户。
[0058][0059]
(3)当账户是内部户时,对应的缓冲规则如下表。可以根据内部户的交易量大小,适当的调整缓冲间隔,交易量大的内部户,缓冲间隔小,交易量小的内部户,缓冲间隔大。
[0060]
[0061][0062]
二、获取缓冲规则模块如图3所示:记账时实时获取账户的缓冲规则,当账户是借方记账时,如果缓冲规则是借方缓冲或借贷缓冲,走缓冲记账,否则走实时记账;当账户是贷方记账时,如果缓冲规则是贷方缓冲或借贷缓冲,走缓冲记账,否则走实时记账。
[0063]
三、资金风险检查模块:当风险标识为“是”时,表示需要检查资金风险,利用缓存预计算账户交易后余额,如果交易后的余额小于0,表示有资金损失风险,立即阻断交易,否则继续执行缓冲记账;当风险标识为“否”时,表示不用检查资金风险,直接执行缓冲记账。
[0064]
资金风险检查模块的核心功能是利用缓存实时计算热点账户交易后的余额,需要解决高并发下的余额计算和余额初始化问题。本文所申请的在出账缓冲场景下为解决资金风险问题的装置使用的缓存系统是redis——一种高性能的键值型数据库。为解决高并发下的余额计算,本文主要利用了redis的 incrby命令,incrby命令将对应“键”中储存的数字加上指定的增量值,如果“键”不存在,那么“键”的值会先被初始化为0,然后再执行增加操作。虽然利用incrby命令可以解决高并发下的余额计算问题,但是在高并发环境下如何将余额初始化到缓存中,仍然是一个难题。本文所申请的装置,利用 redis实现了分布式锁的功能,通过在初始化余额之前对其加分布式锁,解决了高并发环境下的余额初始化不准确的问题。
[0065]
资金风险检查模块的流程如图4所示:
[0066]
(1)当账户的红字标识为“y”时,表示账户余额允许为负,此时不用考虑资金风险问题,直接返回成功;否则继续执行以下流程。
[0067]
(2)当缓冲规则的风险标识是“否”时,表示不需要进行资金风险检查,直接返回成功;否则继续执行以下流程。
[0068]
(3)如果缓存存在当前账户的预计算余额,缓存中的预计算余额加上交易发生额(交易发生额根据账户借贷方向、记账方向以及交易金额确定,如果借贷方向和记账方向一致,则交易发生额为交易金额,即账户余额要增加交易金额;否则交易发生额为负的交易金额,即账户余额要减小交易金额),然后跳转到步骤(8);否则继续执行以下流程;
[0069]
(1)如果已经超过了超时时间(超时时间是为了避免并发初始化余额到缓存时,因竞争导致交易失败),直接返回异常;否则继续执行以下流程。
[0070]
(2)尝试获取分布式锁,如果获取锁失败,等待5毫秒,跳转到步骤(3);否则,继续执行以下流程:
[0071]
(1)缓存中的预计算余额初始化为交易发生额加上当前余额;
[0072]
(2)解除分布式锁;
[0073]
(3)如果更新后缓存中的余额小于0,将缓存中的预计算余额减去交易发生额;否则返回成功;
[0074]
四、缓冲记账模块如图5所示:账务记账时,非实时更新余额,而是先记录到缓冲明细中。等到账户的缓冲记账时间达到,才将这一段时间内的所有缓冲明细汇总,然后完成余额的更新。
[0075]
五、实时记账模块如图6所示:账务记账时,调用余额更新模块实时更新余额,如果余额更新失败,直接返回失败;否则,生成余额变动明细信息,并记录到余额明细中。
[0076]
六、余额更新模块:根据交易金额、账户借贷方向以及账户余额方向确定最后余额到底是增加还是减小,并更新账户余额。
[0077]
在采用复式记账法的账务系统中,账户的余额不能仅仅根据是出账或入账就可以判断出账户的余额是减小还是增加,而是需要根据记账方向(借方记账、贷方记账)以及账户余额方向(借方余额、贷方余额)才能判断出账户的余额到底是增加还是减小。当记账方向和余额方向一致,即借方余额借方记账或贷方余额贷方记账时,账户的余额是增加的;当记账方向和余额方向不一致,即借方余额贷方记账或贷方余额借方记账时,账户的余额是减少的。余额更新模块流程如图7所示:
[0078]
(1)首先获取账户余额锁,避免并发交易导致余额更新错误,如果获取锁失败,表示有其他并发交易在更新账户余额,此时直接返回获取余额锁异常;否则执行以下步骤;
[0079]
(2)根据记账方向和余额方向更新余额,当记账方向和账户余额方向一致时,账户余额增加,直接完成账户余额更新,此时不需要判断红字标识,因为即使余额增加后仍然为负,该笔记账依然是成功的,释放账户余额锁,并返回成功;否则,账户余额减小,完成账户余额更新后,还需要执行以下余额检查流程;
[0080]
(3)当账户红字标识为“n”,即余额不允许为负时,如果更新后的账户余额小于0,回滚账户余额更新操作并释放账户余额锁,直接返回余额不足异常;否则,释放账户余额锁,返回成功。
[0081]
七、定时任务模块:缓冲记账的实际余额更新是由时间触发完成的。定时任务可以让计划的任务在一个预定义的日期和时间运行,当到达预定义的执行时间时,会触发相应的任务完成缓冲记账的余额更新。
[0082]
本文中所讲的定时任务包括两个,一个是缓冲记账定时任务,另一个是日终缓冲记账定时任务。
[0083]
缓冲记账定时任务每隔1分钟执行一次,如图8所示:
[0084]
(1)每次会按照缓冲间隔时间查询需要执行缓冲记账的账户信息。
[0085]
(2)生成执行当前定时任务的批次号,即每次缓冲记账定时任务执行时都会有一个唯一的批次号。
[0086]
(3)按照账户维度,生成缓冲批次信息,会计日为当日,即每次缓冲记账定时任务执行时,通过批次号和资金账号可以确认唯一的一个账户的缓冲批次信息。
[0087]
(4)按批次和账户维度添加异步任务,异步任务完成缓冲记账的余额更新,此时定时任务等待所有异步任务执行完成。
[0088]
(5)如果本批次对应的缓冲批次信息的状态都已经更新为已处理或者等待次数大于12次,直接返回定时任务执行完成;否则休眠5s,继续步骤(5)的判断。等待次数为12次是为了避免本次缓冲记账定时任务执行时间过长,影响到下一次缓冲记账定时任务的调度。
[0089]
日终缓冲记账定时任务在每日00:30:00执行,每日只需执行一次,它需要将上日未处理完的缓冲明细处理完,如图9所示:
[0090]
(1)查询所有配置有缓冲规则的账户信息。
[0091]
(2)生成当前定时任务的批次号。
[0092]
(3)按照账户维度,生成缓冲批次信息,此时会计日为昨日,表示处理的是昨日未处理的缓冲明细。
[0093]
(4)按批次和账户维度添加异步任务,等待异步任务执行完成。
[0094]
(5)如果本批次对应的缓冲批次信息的状态都已经更新为已处理或者等待次数大于12次,直接返回定时任务执行完成;否则休眠5s,继续步骤(5)的判断。
[0095]
两个定时任务的主要区别是:
[0096]
(1)调度时间不同,一个是每隔1分钟执行,一个是每天只执行一次。
[0097]
(2)查询账户的维度不同,一个是按照缓冲间隔查询账户信息,一个是查询所有账户信息。
[0098]
(3)处理信息不同,一个是处理当天的缓冲明细,一个是处理上日的缓冲明细。
[0099]
八、异步任务模块:根据定时任务的批次号和账户号可以确定唯一的缓冲批次信息,按缓冲批次信息处理该账户指定会计日的缓冲明细,并完成余额更新。
[0100]
异步任务的流程图如图10所示:
[0101]
(1)根据批次号和账户号,查询获取唯一的缓冲批次信息。
[0102]
(2)如果缓冲批次的状态不是初始化,直接跳转到步骤(9);否则继续执行以下步骤。
[0103]
(3)将该账户指定会计日的所有初始化状态的缓冲明细数据加上批次号信息,并且将状态更新为正常。
[0104]
(4)判断(3)中操作是否有数据更新,如果没有数据更新,缓冲批次信息状态更新为已处理,并跳转到步骤(12);否则继续执行以下步骤。
[0105]
(5)将该账户该批次号的缓冲明细数据同步到真实的余额明细中。
[0106]
(6)分别汇总统计借方发生额和贷方发生额,并计算差额,差额为贷方发生额减去借方发生额。
[0107]
(7)如果差额等于0,缓冲批次信息状态更新为已处理并跳转到步骤(12);否则,继续执行以下步骤。
[0108]
(8)更新缓冲批次状态为处理中,避免余额更新时因为抢锁失败导致异步任务失败,异步任务失败重试时,可以绕过上面流程,直接继续执行。
[0109]
(9)根据差额更新账户余额,调用余额更新模块,完成余额更新操作,此时记账方向记为贷方记账,和差额的计算公式保持一致;红字标识为“y”,表示此次余额更新不用考虑余额是否为负,因为缓冲记账时,对外返回是成功状态,因此缓冲记账的余额更新必须保证完成,即使因为缓冲记账导致账户的余额为负,也要完成余额更新操作。
[0110]
(10)如果余额更新因为抢余额锁失败而失败,直接返回失败,异步任务会再次尝试执行;否则,继续执行以下步骤。
[0111]
(11)缓冲批次信息添加交易前后余额信息,并且状态更新为已处理
[0112]
(12)调用缓冲规则检查模块,返回成功。
[0113]
九、缓冲规则检查模块:异步任务中完成余额更新后,获取到了更新后的账户余额,如果更新后的账户余额小于最低金额,缓冲规则自动置为失效,并删除缓存中预计算的余额信息,最后还需要发送告警信息;如果大于最低金额并小于告警金额,发送告警信息;如果大于告警金额并且当前账户缓冲规则失效,自动更新缓冲规则为生效;否则不做任何
处理。
[0114]
缓冲规则检查模块流程图如图11所示:
[0115]
(1)如果红字标识为“y”,此时缓冲规则不会失效,因此也没必要做缓冲规则检查判断,直接返回结束;否则,继续执行以下步骤。
[0116]
(2)如果更新后余额小于最小金额,缓冲规则置为失效,并删除缓存中预计算余额信息,最后发送告警信息提示商户及时充值,直接返回结束;否则,继续执行以下步骤。
[0117]
(3)如果更新后余额小于告警金额,发送告警信息提示商户及时充值,直接返回结束;否则,继续执行以下步骤。
[0118]
(4)如果更新后余额大于告警金额,并且缓冲规则是失效状态,此时缓冲规则自动置为生效,直接返回结束;否则,直接返回结束。
[0119]
复式记账的账务系统中,完整的记账流程如图12所示。为了保障客户资金安全,以及尽量减少资金损失,采取的记账方式是先借记记账,然后贷记记账,即所谓的先出账(扣钱),然后再入账(加钱)。
[0120]
(1)调用获取缓冲规则模块,获取借方缓冲规则。
[0121]
(2)如果不是借方缓冲记账,调用实时记账模块,完成借方实时记账,如果记账失败,直接返回失败;如果记账成功,跳转到步骤(5)。
[0122]
(3)如果是借方缓冲记账,调用资金风险检查模块,检查借方资金风险。
[0123]
(4)如果借方有资金风险,阻断交易,直接返回失败;否则,调用缓冲记账模块,完成借方缓冲记账,并继续执行以下步骤。
[0124]
(5)调用获取缓冲规则模块,获取贷方缓冲规则。
[0125]
(6)如果不是贷方缓冲记账,调用实时记账模块,完成贷方实时记账,如果记账失败,直接返回失败;如果记账成功,返回成功。
[0126]
(7)如果是贷方缓冲记账,调用资金风险检查模块,检查贷方资金风险。如果贷方有资金风险,阻断交易,直接返回失败;否则,调用缓冲记账模块,完成贷方缓冲记账,并返回成功。
[0127]
本技术不仅采用了市面上常用的的缓冲记账方式,并在此基础上完善了缓冲规则机制,包括通过告警金额和最低金额阈值设置来降低发生资金损失风险的概率。此外创新性的增加利用缓存实时计算缓冲记账的余额,在高并发环境下,精确初始化账户余额到缓存,避免资金损失风险。为运营商提供了一套在高业务并发场景冲击下完善、低风险、准确灵活的缓冲记账设计方法和装置。
[0128]
从目前使用效果来看,使用这种方法可以使单账户的出账tps达到2000,系统能够正常平稳、安全的运行,在告警金额和最低金额阈值达到时会进行缓冲记账和实时记账的智能自动切换,避免出现资金风险。
[0129]
最后应说明的是:以上所述仅为本发明的优选实施例而已,并不用于限制本发明,尽管参照前述实施例对本发明进行了详细的说明,对于本领域的技术人员来说,其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1