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

一种基于云原生部署架构下的内存风控系统、设备及介质的制作方法

2023-03-19 21:21:58 来源:中国专利 TAG:
1.本技术涉及信息
技术领域
:,尤其涉及一种基于云原生部署架构下的内存风控技术。
背景技术
::2.云原生容器(pod)有无状态的特点,通常节点(node)资源调度或者扩容的时候会导致容器(pod)重启,从而导致风控系统短时间内出现不可用的情况,在实时金融交易的应用场景下,这是非常严重的故障。在金融交易系统上云的过程中,如何在云原生架构上面设计一个具备高可用、高性能的内存风控系统一直是比较有挑战的课题。基于现有的技术方案,金融科技公司通常会采用传统的软件架构去实现风控系统,通过数据库或者redis来存储风控数据,这类方案对数据库或者redis这类底层组件有很高的稳定性要求,而且硬件的稳定性也是必须重视的问题,通常会因为硬件故障、数据库负载等问题导致风控系统的性能和稳定性出现问题。技术实现要素:3.本技术的一个目的是提供一种基于云原生部署架构下的内存风控系统、设备及介质。4.根据本技术的一个方面,提供了一种基于云原生部署架构下的内存风控系统,其特征在于,所述系统包括内存存储模块、内存恢复模块和消息通信模块;5.所述内存存储模块用于利用内存表存储风控相关数据;6.所述内存恢复模块用于定期根据内存中的数据生成快照文件,上传至云存储,以及从所述云存储中拉取目标快照文件,将所述目标快照文件恢复至所述内存表;7.所述消息通信模块用于从所述内存表中读取风控指标信息,以及将业务消息写入所述内存表中。8.进一步地,所述内存表用于实现序列化结构体的接口以及反序列化结构体的接口。9.进一步地,所述内存表包括字段索引;其中,所述字段索引的类型包括两种:唯一索引和普通索引。10.进一步地,所述字段索引的创建过程包括:11.通过索引数据类型动态生成索引的值,区分索引类型;12.若索引类型为所述唯一索引,则将所述唯一索引添加到哈希容器中;13.若索引类型为所述普通索引,则将所述普通索引添加到倒排索引容器中。14.进一步地,所述内存存储模块包括消息日志单元;15.所述消息日志单元用于为所述系统接收的业务消息记录日志,其中,所述业务消息带有自增的序号。16.进一步地,所述内存恢复模块定期根据内存中的数据生成快照文件,上传至云存储,包括:17.所述内存恢复模块每隔预定时间阈值,反序列化所述内存表中的数据,创建快照结构体并填充数据,将所述快照结构体序列化成二进制格式的快照文件,将所述快照文件上传至云存储。18.进一步地,所述内存恢复模块从所述云存储中拉取目标快照文件,将所述目标快照文件恢复至所述内存表,包括:19.所述内存恢复模块从所述云存储中拉取目标快照文件,序列化所述目标快照文件,初始化成快照结构体,将所述快照结构体保存到所述内存表中。20.进一步地,所述消息通信模块用于:21.当回报消息时,从消息请求头取到消息发送端容器的ip地址和端口,利用udp的通信方式直接发送udp请求至消息发送端。22.根据本技术的另一个方面,还提供了一种计算设备,其中,该设备包括用于存储计算机程序指令的存储器和用于执行计算机程序指令的处理器,其中,当该计算机程序指令被该处理器执行时,触发所述设备实现所述基于云原生部署架构下的内存风控系统。23.根据本技术的又一个方面,还提供了一种计算机可读介质,其上存储有计算机程序指令,所述计算机可读指令可被处理器执行以实现所述基于云原生部署架构下的内存风控系统。24.本技术提供的方案中,所述内存风控系统包括内存存储模块、内存恢复模块和消息通信模块;其中,所述内存存储模块用于利用内存表存储风控相关数据;所述内存恢复模块用于定期根据内存中的数据生成快照文件,上传至云存储,以及从所述云存储中拉取目标快照文件,将所述目标快照文件恢复至所述内存表;所述消息通信模块用于从所述内存表中读取风控指标信息,以及将业务消息写入所述内存表中。与现有技术相比,本技术利用专门设计的内存表存储风控相关数据,解决了因为内存数据异构性导致无法快速持久化的问题,保证了内存风控系统的高性能及高稳定性。附图说明25.通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本技术的其他特征、目的和优点将会变得更明显:26.图1是根据本技术实施例的一种基于云原生部署架构下的内存风控系统示意图;27.图2是根据本技术实施例的一种索引的容器的数据结构的示意图;28.图3是根据本技术实施例的一种内存恢复的流程图。29.附图中相同或相似的附图标记代表相同或相似的部件。具体实施方式30.下面结合附图对本技术作进一步详细描述。31.在本技术一个典型的配置中,终端、服务网络的设备和可信方均包括一个或多个处理器(cpu)、输入/输出接口、网络接口和内存。32.内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(ram)和/或非易失性内存等形式,如只读存储器(rom)或闪存(flashram)。内存是计算机可读介质的示例。33.计算机可读介质包括永久性和非永久性、可移动和非可移动媒体,可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的装置或其他数据。计算机的存储介质的例子包括,但不限于相变内存(pram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、快闪记忆体或其他内存技术、只读光盘(cd-rom)、数字多功能光盘(dvd)或其他光学存储、磁盒式磁带,磁带磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。34.本技术实施例提供了一种基于云原生部署架构下的具备高可用、高性能的内存风控系统,利用专门设计的内存表(ultra-table)存储风控相关数据,还采用二进制的内存快照配合消息日志回放来完成内存数据的恢复(recover),保证了系统的高性能及高稳定性。35.在实际场景中,实现该系统的设备可以是用户设备、网络设备或者用户设备与网络设备通过网络相集成所构成的设备。其中,所述用户设备包括但不限于智能手机、平板电脑、个人计算机等终端设备,所述网络设备包括但不限于网络主机、单个网络服务器、多个网络服务器集或基于云计算的计算机集合等实现。在此,云由基于云计算(cloudcomputing)的大量主机或网络服务器构成,其中,云计算是分布式计算的一种,由一群松散耦合的计算机集组成的一个虚拟计算机。36.图1是根据本技术实施例的一种基于云原生部署架构下的内存风控系统示意图,该系统包括内存存储模块101、内存恢复模块102和消息通信模块103。37.所述内存存储模块101用于利用内存表存储风控相关数据。38.例如,所述风控相关数据包括但不限于多币种现金资产、股票持仓、基金持仓、余额通持仓、期权持仓、汇率信息、股票保证金比例、股票行情、交易额度等。在此,内存表(ultra-table)底层设计决定了系统的稳定性和高性能。每张内存表对应的数据结构,要求实现如下接口(interface),在具体实施时可以采用如下代码:[0039][0040][0041]其中,marshal表示序列化结构体的接口,unmarshal表示反序列化结构体的接口。[0042]在一些实施例中,所述内存表用于实现序列化结构体的接口以及反序列化结构体的接口。[0043]例如,所述序列化结构体的接口(marshal)用于实现结构体序列化的能力,内存表(ultra-table)并不会强制要求结构体使用哪种序列化方案,在此建议使用protobuf或者json,或者其他的序列号性能比较高的方式。所述反序列化结构体的接口(unmarshal)用于实现结构体反序列化的能力,内存表(ultra-table)会在查询的时候先将内存中的二进制类型数据反序列化成结构体,基于结构体的deepcp深度拷贝的能力,将查询结构返回输出。[0044]在一些实施例中,所述内存表包括字段索引;其中,所述字段索引的类型包括两种:唯一索引和普通索引。[0045]例如,字段索引(fieldindex)可以用来加快内存数据的检索速度。在此,内存定义了两种索引数据结构,分别是唯一索引和普通索引;其中,唯一索引是哈希表的方式实现,普通索引采用倒排索引的方式实现;在具体实施时可以采用如下代码:[0046][0047]在一些实施例中,所述字段索引的创建过程包括:通过索引数据类型动态生成索引的值,区分索引类型;若索引类型为所述唯一索引,则将所述唯一索引添加到哈希容器中;若索引类型为所述普通索引,则将所述普通索引添加到倒排索引容器中。[0048]例如,所述索引数据类型是指生成索引时数据字段所对应的值类型,如int、string等。所述索引类型是指索引本身的类型,如唯一索引、普通索引。对于应用程序结构体是一段连续的内存,根据前期保存的索引数据类型和字段顺序,可以通过地址偏移量得到索引的值。在定义内存数据结构的时候已经确定了索引类型,通过tag的方式在字段上面表示,比如唯一索引或普通索引。在具体实施时可以采用如下代码,创建索引:[0049][0050][0051]如上面的代码所示,可以通过索引数据类型动态生成索引的值,随后区分索引类型,如果是唯一索引会添加到哈希容器里,如果是普通索引会添加到一个复杂的倒排索引容器中。索引的容器的数据结构如图2所示,需要说明的是,图2中的数据均为举例。[0052]在一些实施例中,所述内存存储模块101包括消息日志单元;所述消息日志单元用于为所述系统接收的业务消息记录日志,其中,所述业务消息带有自增的序号。[0053]例如,所述业务消息包括但不限于下单、撤单、改单、现金入账出账、股票持仓出账入账等。在本实施例中,通过消息日志实现内存数据持久化,把每个客户端事务性请求通过消息日志方式提前保存下来。为了保证消息有序,每个消息都会带一个uint64类型的序号(offset),而且序号(offset)是自增的。当所述内存风控系统收到此消息,会首先完成自己的业务逻辑,最后通过数据序列化的能力保存到内存表中,同时会生成一个全局变量记录处理后的序号(offset)。[0054]在本实施例中,可以利用apachekafka的流式特征来实现消息流转。其中,apachekafka是一个开源分布式事件流平台,用于高性能数据流水线,流分析,数据集成以及关键任务应用程序。消息产生的时候原本不带有序号,当消息通过kafka中间件传输的时候,会给每个消息带上一个自增序号,所述消息日志单元最终把序号保存到内存表中。[0055]当然,本领域技术人员应能理解上述apachekafka仅为举例,其他现有的或今后可能出现的消息流转方式如可适用于本技术,也应包含在本技术保护范围以内,并在此以引用方式包含于此。[0056]在一些实施例中,可以采用如下代码表示业务数据结构:[0057][0058][0059]所述内存恢复模块102用于定期根据内存中的数据生成快照文件,上传至云存储,以及从所述云存储中拉取目标快照文件,将所述目标快照文件恢复至所述内存表。[0060]在一些实施例中,所述内存恢复模块102定期根据内存中的数据生成快照文件,上传至云存储,包括:每隔预定时间阈值,反序列化所述内存表中的数据,创建快照结构体并填充数据,将所述快照结构体序列化成二进制格式的快照文件,将所述快照文件上传至云存储。[0061]例如,所述内存风控系统可以定义每隔预定时间阈值(该时间阈值可以根据需求调整),自动进行一次内存数据的持久化,可以将这个过程称为打快照(uploadsnapshot),整个打快照过程分为:(1)从内存表中反序列化内存数据;(2)创建快照结构体并填充数据;(3)把快照结构体序列化成二进制格式文件;(4)上传到云存储进行多地备份保存。[0062]在本实施例中,内存持久化逻辑主要是通过定时任务把内存数据压缩成二进制数据后生成一份快照文件,然后把这份快照文件上传至云存储,完成一次永久存储。[0063]在一些实施例中,所述内存恢复模块102从所述云存储中拉取目标快照文件,将所述目标快照文件恢复至所述内存表,包括:从所述云存储中拉取目标快照文件,序列化所述目标快照文件,初始化成快照结构体,将所述快照结构体保存到所述内存表中。[0064]在本实施例中,内存恢复的过程大致可以分为:(1)从云存储中拉取快照文件;(2)序列化快照文件,初始化成快照结构体;(3)把快照结构体保存到内存表中;(4)开始正常消费新的消息。[0065]例如,如图3所示,将云存储上的快照文件下载下来,然后通过解析文件完成反序列化,最终将二进制数据变成内存变量,随后对比快照中的偏移量和消息组件内的最新偏移量,完成一下消息重放,最终实现一次内存数据恢复。[0066]所述消息通信模块103用于从所述内存表中读取风控指标信息,以及将业务消息写入所述内存表中。[0067]例如,所述风控指标信息包括但不限于现金购买力、融资购买力、股票持仓、期权持仓、基金持仓、融资额度等;所述业务消息包括但不限于下单、撤单、改单、现金入账出账、股票持仓出账入账。[0068]在一些实施例中,所述内存风控系统作为服务,会同时向很多的业务方提供调用接口,这些调用接口大致可以分成读取接口和写入接口。[0069]在具体实施时,读取接口客户端可以采用grpc(一个开源的远程过程调用框架)与所述内存风控系统完成交互。当然,本领域技术人员应能理解上述grpc仅为举例,其他现有的或今后可能出现的远程过程调用框架如可适用于本技术,也应包含在本技术保护范围以内,并在此以引用方式包含于此。[0070]在一些实施例中,写入接口需要完成消息日志记录再到内存风控系统。在本实施例中,将消息分为请求消息和回报消息。在具体实施时可以采用如下代码表示请求消息:[0071]messagespeedrequest{[0072]int32function_no=1;[0073]stringrequest_id=2;[0074]map《string,string》head=3;[0075]int64offset=4;[0076]bytesbody=5;[0077]}[0078]其中,function_no表示请求类型;request_id表示一次请求的唯一随机编码;body表示具体的请求体内容;head表示具体的请求头内容;offset表示消息序号。[0079]在具体实施时,请求消息日志记录可以采用中间件apachekafka来实现。当然,本领域技术人员应能理解上述apachekafka仅为举例,其他现有的或今后可能出现的消息中间件如可适用于本技术,比如采用其他有序mq或者redulog写日志文件的方式,也应包含在本技术保护范围以内,并在此以引用方式包含于此。[0080]在一些实施例中,所述消息通信模块103用于:当回报消息时,从消息请求头取到消息发送端容器的ip地址和端口,利用udp的通信方式直接发送udp请求至消息发送端。[0081]在本实施例中,可以采用专门设计的udp回报协议,保证容器之间消息传输。在具体实施时可以采用如下代码表示回报消息:[0082]messagespeedresponse{[0083]int32function_no=1;[0084]stringrequest_id=2;[0085]bytesbody=3;[0086]boolis_success=4;[0087]stringerror_info=5;[0088]int32error_code=6;[0089]}[0090]其中,function_no表示请求类型;request_id表示一次请求的唯一随机编码;body表示具体的回报内容;is_success表示是否是一次成功的请求;error_info表示是否有错误信息,没有就为空字符串;error_code表示错误号,没有就为0。[0091]综上所述,本技术实施例利用专门设计的内存表(ultra-table)存储风控相关数据,解决了因为内存数据异构性导致无法快速持久化的问题。本技术实施例还采用二进制的内存快照配合消息日志回放来完成内存数据的恢复(recover),进一步保证了内存风控系统的高性能及高稳定性。[0092]另外,本技术的一部分可被应用为计算机程序产品,例如计算机程序指令,当其被计算机执行时,通过该计算机的操作,可以调用或提供根据本技术的方法和/或技术方案。而调用本技术的方法的程序指令,可能被存储在固定的或可移动的记录介质中,和/或通过广播或其他信号承载媒体中的数据流而被传输,和/或被存储在根据程序指令运行的计算机设备的工作存储器中。在此,本技术的一些实施例提供了一种计算设备,该设备包括用于存储计算机程序指令的存储器和用于执行计算机程序指令的处理器,其中,当该计算机程序指令被该处理器执行时,触发所述设备执行前述本技术的多个实施例的方法和/或技术方案。[0093]此外,本技术的一些实施例还提供了一种计算机可读介质,其上存储有计算机程序指令,所述计算机可读指令可被处理器执行以实现前述本技术的多个实施例的方法和/或技术方案。[0094]需要注意的是,本技术可在软件和/或软件与硬件的组合体中被实施,例如,可采用专用集成电路(asic)、通用目的计算机或任何其他类似硬件设备来实现。在一些实施例中,本技术的软件程序可以通过处理器执行以实现上文所述步骤或功能。同样地,本技术的软件程序(包括相关的数据结构)可以被存储到计算机可读记录介质中,例如,ram存储器,磁或光驱动器或软磁盘及类似设备。另外,本技术的一些步骤或功能可采用硬件来实现,例如,作为与处理器配合从而执行各个步骤或功能的电路。[0095]对于本领域技术人员而言,显然本技术不限于上述示范性实施例的细节,而且在不背离本技术的精神或基本特征的情况下,能够以其他的具体形式实现本技术。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本技术的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化涵括在本技术内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。此外,显然“包括”一词不排除其他单元或步骤,单数不排除复数。装置权利要求中陈述的多个单元或装置也可以由一个单元或装置通过软件或者硬件来实现。第一,第二等词语用来表示名称,而并不表示任何特定的顺序。当前第1页12当前第1页12
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

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

相关文献