一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种账户余额处理方法及系统与流程

2022-07-10 06:14:45 来源:中国专利 TAG:


1.本发明涉及信息处理的技术领域,尤其是涉及一种账户余额恢复方法及系统。


背景技术:

2.在互联网技术、云计算的大背景下,许多企业会建立自己的公众号平台或网上商城,一方面对用户或商户提供的充值、交易、提现等服务,要求做到支持高并发,以便同时能为更多用户或商户提供服务;另一方面,作为一项互联网服务,交易每时每刻都在发生,秒级别的不可用也将损害用户体验,这就要求服务具有高可用性。
3.然而,在现有的账户余额处理系统中,账户数据通常存储于关系型数据库中,事件的执行也依赖于关系型数据库,受硬盘读写性能的限制,容易产生性能瓶颈,导致锁竞争,不适合高并发的应用场景,不满足高可用的需求;并且,一旦发生数据丢失,通过关系数据库进行数据恢复,同样受限于硬盘读写性能的限制,恢复速度慢,严重影响了数据的可用性。


技术实现要素:

4.为了满足账户余额处理系统对高并发和高可用的要求,第一方面,本发明提供一账户余额处理方法,采用如下的技术方案:一种账户余额处理方法,包括:接收账户余额变更请求,根据所述变更请求生成对应的事件;在内存中执行所述事件,更新账户余额,并将所述事件存储至rocksdb;其中,所述账户余额存储于内存;根据预设周期生成余额快照,并将所述余额快照存储至rocksdb;接收账户余额恢复请求,从rocksdb获取最新余额快照和生成时间在所述最新余额快照之后的事件,在内存中根据所述最新余额快照和所述生成时间在所述最新余额快照之后的事件恢复所述账户余额。
5.通过采用上述技术方案,将账户余额存储于内存中,并在内存中执行事件,不再受硬盘读写性能的限制,处理速度大幅提升,能够适用于高并发的应用场景,满足高可用的需求;并且,依赖于rocksdb固有的读写性能优势,将余额快照和事件存储于rocksdb中,在恢复账户余额时,能够快速读取出余额快照和事件数据,并在内存中计算出账户余额,恢复速度快,进一步提高了数据的可用性。
6.可选的,在内存中根据所述最新余额快照和所述生成时间在所述最新余额快照之后的事件恢复所述账户余额,具体包括:判断所述生成时间在所述最新余额快照之后的事件数量是否大于等于1,若是,基于所述最新余额快照中的账户余额,在内存中执行生成时间在所述最新余额快照之后的事件,生成恢复后的账户余额;若否,将所述最新余额快照中的账户余额作为恢复后的账户余额。
7.通过采用上述技术方案,在内存中,根据最新余额快照中的账户余额和其之后历史事件的重新执行来快速恢复账户余额,具有高可用性。
8.可选的,所述方法应用于主从机制的计算机集群,且主从机制的控制算法是raft。
9.通过采用上述技术方案,将所述方法应用于计算机集群中,减少了单点故障的风险,并通过raft协议,保证了账户余额数据的高可用性。
10.可选的,所述计算机集群的数量是多个,对任一所述计算机集群设置一个虚拟账户,所述根据所述变更请求生成对应的事件,包括:获取所述余额变更请求携带的转出账户id和转入账户id,根据所述转出账户id和所述转入账户id判断所述转出账户和转入账户是否在同一集群;若否,获取所述转出账户所在集群的虚拟账户id和所述转入账户所在集群的虚拟账户id,根据所述转出账户所在集群的虚拟账户id和所述转出账户id生成第一事件,根据所述转入账户所在集群的虚拟账户id和所述转入账户id生成第二事件,根据所述转出账户所在集群的虚拟账户id和所述转入账户所在集群的虚拟账户id生成第三事件;所述在内存中执行所述事件,包括:在内存中依次执行第一事件、第二事件和第三事件。
11.通过采用上述技术方案,减轻了系统的负载压力,并确保了不同集群间的账户能够成功转账。
12.可选的,所述事件的属性包括事件id、类型、转出账户id、转入账户id、金额和生成时间。
13.通过采用上述技术方案,对事件的属性进行了具体限定,以确保事件能够成功执行。
14.可选的,所述第一事件的转出账户id的值是所述余额变更请求携带的转出账户id,所述第一事件的转入账户id的值是所述转出账户所在集群的虚拟账户id;所述第二事件的转出账户id的值是所述转入账户所在集群的虚拟账户id,所述第一事件的转入账户id的值是所述余额变更请求携带的转入账户id;所述第三事件的转出账户id的值是所述转出账户所在集群的虚拟账户id,所述第三事件的转入账户id的值是所述余额变更请求携带的转入账户id。
15.通过采用上述技术方案,对集群间转账涉及的三个事件的属性进行了具体限定,以确保集群间转账能够成功执行。
16.可选的,将活跃度低于预设阈值的账户的账户余额转存至rocksdb中。
17.通过采用上述技术方案,节省了内存的存储空间,提高了处理效果。
18.第二方面,本发明提供一种账户余额处理系统,采用如下的技术方案:一种账户余额处理系统,包括:事件生成模块,用于接收账户余额变更请求,根据所述变更请求生成对应的事件;余额更新模块,用于在内存中执行所述事件,更新账户余额,并将所述事件存储至rocksdb;其中,所述账户余额存储于内存;余额快照生成模块,用于根据预设周期生成余额快照,并将所述余额快照存储至rocksdb;余额恢复模块,用于接收账户余额恢复请求,从rocksdb获取最新余额快照和生成
时间在所述最新余额快照之后的事件,在内存中根据所述最新余额快照和所述生成时间在所述最新余额快照之后的事件恢复所述账户余额。
19.第三方面,本发明提供了一种电子设备,采用如下的技术方案:一种电子设备,包括存储器和处理器,存储器上存储有能够被处理器加载并执行所述的方法的计算机程序。
20.第四方面,本发明提供了一种计算机可读存储介质,采用如下的技术方案:一种计算机可读存储介质,存储有能够被处理器加载并执行所述的方法的计算机程序。
21.综上所述,本发明包括以下有益技术效果:1、将账户余额存储于内存中,并在内存中执行事件,不再受硬盘读写性能的限制,处理速度大幅提升,能够适用于高并发的应用场景,满足高可用的需求。
22.2、依赖于rocksdb固有的读写性能优势,将余额快照和事件存储于rocksdb中,在恢复账户余额时,能够快速读取出余额快照和事件数据,并在内存中计算出账户余额,恢复速度快,进一步提高了数据的可用性;3、应用于计算机集群,减少了单点故障的风险,并通过raft协议,保证了账户余额数据的高可用性。
附图说明
23.图1是本发明实施例的账户余额处理方法流程图。
24.图2是本发明实施例的账户余额处理系统结构框图。
25.图3是本发明电子设备示意图。
具体实施方式
26.为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图1-3及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
27.本发明实施例公开一种账户余额处理方法。参照图1,账户余额处理方法包括:s11、接收账户余额变更请求,根据所述变更请求生成对应的事件;账户余额变更请求携带转出账户id、转入账户id、金额等信息,将账户余额变更请求转换为事件,以事件的方式进行存储,便于对账户余额进行恢复。
28.对于每个事件,其包括事件id、类型、转出账户id、转入账户id、金额和生成时间等属性。其中,事件id是事件的唯一标识,根据接收事件的先后顺序依次增加,例如,从0开始依次增加,或从1开始依次增加;类型包括转账和其它类型,作为一种示例,1表示转账,2表示其它类型,其中,其它类型可用于类型的扩展;转出账户id和转入账户id是当前发生转账行为的两个账户id,转出账户id是发生出账行为的账户id,转入账户id是发生入账行为的账户id;金额是当前事件的转账金额,取值大于0;生成时间是事件的生成时间。并且,根据账户余额变更请求获取对应的转出账户id、转入账户id和金额。
29.s12、在内存中执行所述事件,更新账户余额,并将所述事件存储至rocksdb;为了提高事件的执行效率,以适用于高并发的场景,将所有账户的账户余额存储
于内存中,并在内存中执行事件,在内存中执行完所述事件后,更新账户余额,并将所述事件存储至rocksdb。
30.事件的执行过程就是转账过程,事件执行完成后,转出账户和转入账户的账户余额均发生了变化,此时需要同时对转出账户和转入账户的账户余额进行更新。
31.rocksdb是支持持久化的存储系统,占用的是ssd硬盘,具有较优的读写性能。事件是不可丢失性数据,将事件存储至rocksdb中,既保证了事件的高可靠性,又具有较快的读写速度,能够满足高并发高可用的需求。
32.当转出账户的账户余额不足、转出账户处于冻结状态或转入账户处于冻结状态时,会存在转账失败的情况,因此,作为一种示例,在将所述事件存储至rocksdb之前,判断所述事件是否执行成功,若是,将所述事件存储至rocksdb,若否,忽略所述事件。
33.s13、根据预设周期生成余额快照,并将所述余额快照存储至rocksdb;预设周期可由系统预先设定,也可由用户根据实际需求设定,比如,0.5小时、1小时或2小时,在此不做具体限定。不同的账户,其预设周期可以相同,也可以不同。
34.在内存中,存储有所有账户的账户余额,便于查询和转账;由于内存中的数据可能会丢失,为了便于对账户余额进行恢复,根据预设周期生成余额快照,并将余额快照存储至rocksdb,以对余额快照进行持久化存储。
35.随着时间的推移,在rocksdb中,每个账户均包含多个余额快照,对于每个余额快照,其包括快照id、账户id、账户余额和生成时间等属性,其中,快照id是余额快照的唯一标识,根据余额快照的生成顺序依次增加,例如,从0开始依次增加,或从1开始依次增加。
36.作为一种实施方式,当新账户创建成功时,主动创建初始状态的余额快照,并将初始状态的余额快照存储至rocksdb。在初始状态的余额快照创建成功之后,再根据预设周期生成后续的余额快照。
37.s14、接收账户余额恢复请求,从rocksdb获取最新余额快照和生成时间在所述最新余额快照之后的事件,在内存中根据所述最新余额快照和生成时间在所述最新余额快照之后的事件恢复所述账户余额。
38.当内存中存储的账户余额丢失时,需要根据最新余额快照和生成时间在当前余额快照之后的事件来恢复账户余额。具体的,从 rocksdb获取最新余额快照至内存,根据最新余额快照的属性获取最新余额快照的生成时间和余额,并获取生成时间在所述最新余额快照的生成时间之后的事件至内存,判断所述生成时间在所述最新余额快照之后的事件数量是否大于等于1,若是,基于所述最新余额快照中的账户余额,在内存中执行生成时间在所述最新余额快照之后的事件,生成恢复后的账户余额;若否,将所述最新余额快照中的账户余额作为恢复后的账户余额。若生成时间在所述最新余额快照之后的事件数量等于1,则只需执行一个事件,若生成时间在所述最新余额快照之后的事件数量大于1,根据生成时间的先后顺序依次执行所述生成时间在所述最新余额快照之后的多个事件,或根据事件id从小到大的顺序依次执行所述生成时间在所述最新余额快照之后的多个事件。
39.账户余额恢复请求携带了待恢复账户id,其中,账号id的数量可以是一个或多个,取值是1至账户总量;最新余额快照是生成时间距离当前时间最近的余额快照,具体的,在与待恢复账号id对应的所有余额快照中,最新余额快照是快照id最大的余额快照;若与待恢复账号id对应的余额快照只有一个,最新余额快照是初始状态的余额快照。
40.rocksdb具有天然的读写性能优势,经过测试,在rocksdb中,1g左右数据量的余额快照的加载时间能控制在2s以内;并且,在内存中,事件执行时间也能保证在2秒内完成;所以,总的恢复时间能控制在4s内。
41.在上述实施例中,将账户余额存储于内存中,并在内存中执行事件,不再受硬盘读写性能的限制,处理速度大幅提升,能够适用于高并发的应用场景,满足高可用的需求;并且,依赖于rocksdb固有的读写性能优势,将余额快照和事件存储于rocksdb中,在恢复账户余额时,能够快速读取出余额快照和事件,并在内存中计算出账户余额,恢复速度快,进一步提高了数据的可用性。
42.作为一种实施方式,为了节省内存的存储空间,提高系统的处理效果,将活跃度低于预设阈值的账户的账户余额转存至rocksdb中。其中,活跃度等级和预设阈值均可根据实际需求设定,比如,按照最新交易时间将账户分为6个等级,将在1个月内有交易的账户定义为1级活跃账户,1个月至半年内有交易的账户定义为2级活跃账户,半年至1年内有交易的账户定义为3级活跃账户,1年内没有交易的账户为4级活跃账户,另外,还有人工确定的0级活跃账户(特别活跃账户)和5级活跃账户(特别不活路账户)。根据测算经验,4级账户占比大约有40%,1级账户大约在10%左右,2级和3级账户大约在50%左右,所以,将4级及以上的账户的账户余额存储于rocksdb当中,就能节省40%以上的内存。若账户余额变更请求携带的转出账户id或转入账户id的账户余额存储于rocksdb,在接收到账户余额变更请求后,从rocksdb获取对应的账户余额至内存,以生成对应的事件,并更改对应账户的活跃度,在事件执行完成后,将生成的账户余额存储于内存,同时,删除rocksdb中存储的账户余额。
43.由于4级及以上的用户交易频率较低,将4级及以上的账户的账户余额存储于rocksdb中,整体而言,并不会对系统的处理能力产生大的影响,系统仍然具备高并发和高可用的属性。
44.作为一种实施方式,为了减少单点故障的引起的风险,将本技术的账户余额处理方法应用于计算机集群中,在计算机集群中,采用主从机制,只有一台机器是主机,其他机器均为从机,其中,所述主从机制的控制算法是raft。raft算法具有其独特的选主机制和复制日志模式,能够保证数据的高可用性。
45.在运行过程中,账户余额存储于主机中,当主机发生故障时,进入账户余额恢复流程。具体的,当主机发生故障时,通过raft算法,在备份从机中选举出一台新主机,新主机从rocksdb获取最新余额快照和生成时间在所述最新余额快照之后的事件,在内存中根据所述最新余额快照和生成时间在所述最新余额快照之后的事件恢复出所有账户的账户余额。
46.经过测试,如果集群中主机器发生故障,1分钟内就能选举出新的主机,并恢复出所有账户的账户余额,保证业务的正常运行。
47.作为另一种实施方式,为了防止单个计算机集群负载过高,可采用多个计算机集群进行处理;在多个计算机集群系统中,需要对账户进行分片,每个集群处理一个片区;具体的,集群的数量根据账户量和交易量来确定,例如,系统有2千万个账户,可以分成两个集群,每个集群分别有1000万个账户;在划片时,分割规则可以采用账户id来区分,大于1000的放在第二个集群,其它的放在第一个集群。进一步的,将账户分片后,对应账户的账户余额存储于对应计算机集群中。
48.在账户余额处理方法中,要求转换行为在一个事务中执行,以确保转账操作正确
执行,否则,会造成多扣和少加的情况,对卖家和买家造成无法估量的损失。在多个计算机集群系统中,若转账是单个集群内部的转账,其处理规则和一个计算机集群系统的情形相同,若是不同集群之间的转账,其处理规则则需要分解成两步执行。
49.具体的,对于存在多个计算机集群系统的情形,对任一所述计算机集群设置一个虚拟账户,在根据所述余额变更请求生成对应的事件时,获取所述余额变更请求携带的转出账户id和转入账户id,根据转出账户id和转入账户id判断所述转出账户和转入账户是否在同一集群;若否,获取所述转出账户所在集群的虚拟账户id和所述转入账户所在集群的虚拟账户id,根据所述转出账户所在集群的虚拟账户id和所述转出账户id生成第一事件,根据所述转入账户所在集群的虚拟账户id和所述转入账户id生成第二事件,根据所述转出账户所在集群的虚拟账户id和所述转入账户所在集群的虚拟账户id生成第三事件,并在内存中执行所述事件时,依次执行第一事件、第二事件和第三事件;若是,根据所述转出账户id和转入账户id生成对应的事件,其后续流程和前述实施例相同。
50.其中,在第一事件的属性中,转出账户id的值是所述余额变更请求携带的转出账户id,转入账户id的值是所述转出账户所在集群的虚拟账户id;在第二事件的属性中,转出账户id的值是所述转入账户所在集群的虚拟账户id,转入账户id的值是所述余额变更请求携带的转入账户id;在第三事件的属性中,转出账户id的值是所述转出账户所在集群的虚拟账户id,转入账户id的值是所述余额变更请求携带的转入账户id。
51.第一事件、第二事件和第三事件是依次执行的,只有当三个事件均执行成功时,此次转账行为才成功执行。为了确保不同集群间的账户能够成功转账,在生成第三事件之前,对所述转出账户所在集群的虚拟账户和所述转入账户所在集群的虚拟账户之间的转账行为进行监听,若在预设时间段内,没有监听到所述转出账户所在集群的虚拟账户和所述转入账户所在集群的虚拟账户之间的转账行为,对第一事件和第二事件进行标记,并执行回滚操作。
52.本发明实施例公开一种账户余额处理系统。参照图2,账户余额处理系统包括:事件生成模块10,用于接收账户余额变更请求,根据所述变更请求生成对应的事件;余额更新模块20,用于在内存中执行所述事件,更新账户余额,并将所述事件存储至rocksdb;其中,所述账户余额存储于内存;余额快照生成模块30,用于根据预设周期生成余额快照,并将所述余额快照存储至rocksdb;余额恢复模块40,用于接收账户余额恢复请求,从rocksdb获取最新余额快照和生成时间在所述最新余额快照之后的事件,在内存中根据所述最新余额快照和所述生成时间在所述最新余额快照之后的事件恢复所述账户余额。
53.需要说明的是,本实施例所述的账户余额处理系统可以用于执行上述方法实施例,其原理和技术效果类似,此处不再赘述。
54.基于同一技术构思,本公开实施例还提供了一种电子设备300。参照图3所示,电子设备300包括处理器301、存储器302和总线303。其中,存储器302用于存储计算机程序,包括内部存储器3021和外部存储器3022;内部存储器3021用于暂时存放处理器301中的运算数据,以及与硬盘等外部存储器3022交换的数据,处理器301通过内部存储器3021与外部存储
器3022进行数据交换。
55.本技术实施例中,存储器302具体用于存储执行本技术技术方案的计算机程序,并由处理器301来控制执行。也即,当电子设备300运行时,处理器301与存储器302之间通过总线303通信,使得处理器301执行存储器302中存储的计算机程序,进而执行前述任一实施例中所述的方法。
56.其中,存储器302可以是,但不限于,随机存取存储器(random access memory,ram),只读存储器(read only memory,rom),可编程只读存储器(programmable read-only memory,prom),可擦除只读存储器(erasable programmable read-only memory,eprom)等。
57.处理器301可能是一种集成电路芯片,具有信号的处理能力。上述的处理器可以是通用处理器,包括中央处理器(central processing unit,cpu)、网络处理器(network processor,np)等;还可以是数字信号处理器(dsp)、专用集成电路(asic)、现场可编程门阵列(fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本发明实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
58.可以理解的是,本技术实施例示意的结构并不构成对电子设备300的具体限定。在本技术另一些实施例中,电子设备300可以包括比图示更多或更少的部件,或者组合某些部件,或者拆分某些部件,或者不同的部件布置。图示的部件可以以硬件、软件或软件和硬件的组合实现。
59.本实施例还提供了一种计算机可读存储介质,如软盘、光盘、硬盘、闪存、u盘、sd(secure digital memory card,安全数码卡)卡、mmc(multimedia card,多媒体卡)卡等,在该可读存储介质中存储有实现上述各个步骤的计算机程序,该计算机程序可被一个或者多个处理器执行,以实现上述实施例中的方法。
60.在本技术所提供的实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
61.另外,在本技术各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。
62.以上均为本发明的较佳实施例,并非依此限制本发明的保护范围,本说明书(包括摘要和附图)中公开的任一特征,除非特别叙述,均可被其他等效或者具有类似目的的替代特征加以替换。即,除非特别叙述,每个特征只是一系列等效或类似特征中的一个例子而已。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献