一种基于队列的银行流计算业务系统中检查点快速持久化
方法
技术领域
本发明属于分布式计算领域,尤其涉及一种基于队列的银行流计算业务系统中检查点快速持久化方法。
背景技术
在银行风控等实时性要求较高的流计算业务场景中,要求系统的计算性能可以满足大量持续高强度的数据运算,并做到低延时与高吞吐的目标。除此之外,在这些场景中,除了实时性的要求以外,对容错率的要求也很高,较小的错误也可能会导致实际应用中很大的问题。
银行流计算业务作为银行重要的作业场景之一,采用流计算的架构对交易数据进行处理。在复杂的业务场景中,往往涉及到交易量突然激增的状况,此时待处理数据比正常情况多出较多倍数,如果仍然使用承载能力较差的节点进行处理,则会引起系统节点崩溃,从而引发一系列数据无法计算、不一致的状况,造成无法估量的损失。而这样的情况可以通过对流计算状态进行快照并做持久化处理的方式避免,即在预估此后一段时间业务系统中会触发较多操作,引起计算需求增大的前提下,进行人工操作,对银行流计算业务系统发出信号,使系统中的节点记录好当前的流计算状态并进行存储,从而对快照做持久化处理,便于之后将当前的计算状态迁移至承载能力更强的节点中。同时,在计算需求显著减少后,为了避免资源的浪费,可以利用同样的步骤,将业务系统的流计算状态迁移至承载能力稍弱的节点中。
目前涉及银行流计算业务系统中节点迁移场景下的解决方案要求对操作状态进行持续的全局快照,这样的方式有两个严重影响系统性能的缺陷:
1)每一次全局快照均会使银行流计算业务系统中的所有计算进程停止运行,所有通道消息停止传输,造成整个流计算过程的停滞,以达到获取全局一致性状态的目的。这样强制打断系统运行的过程通常会导致系统性能降低;
2)银行流计算业务系统某一时刻的全局状态是指其所有进程和通道的状态组合,全局快照算法会将对全局状态进行记录,即将所有的通道传输记录以及未处理的消息作为快照的一部分,使得快照过大,包含的冗余信息过多,导致系统中各个节点的计算性能下降。
综上所述,目前银行流计算业务系统在判断交易量激增后,进行节点迁移的场景中必须使用快照与持久化技术来进行恢复处理,而其采用的全局快照技术会对节点的计算性能以及实时性牺牲较大,保证数据正确性和一致性的同时不能保证系统中节点的快速计算能力。因此需要一类轻量级、对系统性能无较大影响的快照数据处理技术应用于银行流计算业务系统中,保证流计算状态能快速稳定的记录下来并持久化的保存,以便于后续从节点保存的状态下恢复业务系统的计算。
发明内容
针对上述提到的银行流计算业务系统中,节点间流计算状态的迁移场景下采用全局快照技术作为迁移恢复的基础算法而产生的一系列操作和管理的问题,本发明提出了一种基于队列的检查点快速持久化技术方法,采用优化的快照算法作为基线,实现了节点计算状态迁移场景下轻量级的快照数据处理引擎与恢复机制,在必要的节点状态迁移中能快速稳定的应对。
本发明通过以下技术方案来实现,一种基于队列的银行流计算业务系统中检查点快速持久化方法,该方法包括如下步骤:
(1)在银行流计算业务系统的操作量增加之前,人为向业务系统中需要进行流计算状态迁移的节点发出快照开始的指令,记录当前进行流计算节点的状态;
(2)需要进行流计算状态迁移的节点在接收到快照的信号后,触发检查点机制:银行流计算业务系统的Kafka中对应Topic的数据、信息、消息传输均停止,业务系统中进行流计算的节点开始进行自身计算状态的快照操作,记录下Kafka中对应Topic的偏移量值以及节点当前计算状态;
(3)基于Kafka消息队列先进先出的规则,将执行快照操作后的银行流计算业务系统中节点的流计算状态相关数据记录,如计算过程中的中间值等,按Kafka消息队列中的顺序依次存入HDFS文件系统中进行持久化保存;存储结束后,获取HDFS文件系统中的流计算状态相关数据的地址,将该地址与Kafka中当前Topic的偏移量值作为数据对存入Oracle数据库中,业务系统中的当前执行快照操作后的节点使用指针指向Oracle数据库中的数据对;
(4)对指针做切换操作:流计算状态迁移的目标节点使用指针指向Oracle数据库中的数据对,利用记录的Topic偏移量值重新开始消费Kafka中对应的Topic,读取HDFS文件系统中的流计算状态相关数据,对业务系统中原节点的流计算状态进行恢复,并取消原节点指向Oracle数据库中该条数据对的指针。
进一步地,流计算状态迁移的节点开始进行自身计算状态的快照操作,具体为:记录下上一次快照至此时与节点相关的数据处理的中间计算记录以及此次快照当前Topic的偏移量值。便于节点通过偏移量值开始重新消费Kafka对应的Topic,结合快照存储的数据中间记录,从而节点能够在迁移后恢复流计算状态至原节点快照时刻的状态,防止误操作、多操作数据记录,以保证计算状态的一致性。
本发明提供了以下有益的效果:
(1)本发明方法采用交互的方式,人工发出信号,节点再执行快照算法,并进行快照的持久化保存操作。这样避免了快照持续性影响节点的计算过程。
(2)在银行流计算业务系统中节点计算状态迁移的场景中,如何快速对业务系统的全局状态进行快照是一项重要的流程,也直接影响了整个方法的性能。本发明提出的方法采用的并非全局快照,而是针对计算任务的抽象模型优化的快照算法,极大的降低了业务系统对全局状态进行快照的时间。由于银行流计算业务系统中采用流计算架构,计算场景中的绝大多数任务均以有向无环图的抽象形式存在,针对该有向无环的任务拓扑图,只对有状态的算子进行快照,而并非同时阻塞所有计算流程,减少了快照的冗余数据,同时也尽可能避免了快照造成计算过程的停滞。
(3)本发明方法将节点计算状态的快照存储于HDFS文件系统中,以此对快照信息做持久化处理。同时,HDFS存储快照数据的地址信息同数据偏移量信息一起存入Oracle数据库中进行保存,节点使用指针的形式获取HDFS文件系统存放数据的地址,通过地址访问快速读取快照信息,通过切换指针的方式即可进行节点计算状态的迁移工作。
附图说明
图1为快照开始的信号抵达节点后快照相关信息转存虚拟机的示意图。
图2为快照相关信息持久化处理示意图;
图3为迁移的目标节点从数据库中读取数据对记录示意图;
图4为迁移的目标节点恢复计算状态示意图。
具体实施方式
下面结合附图对本发明作进一步描述。
在银行风控等流计算业务场景中,希望在系统的计算过程中保持数据的准确性与一致性,容错率极低。在银行流计算业务系统中,采用流计算的架构作为数据处理的基础结构。在客户量较大,客户操作较多时,计算量会突然提高,待处理数据增加,引起计算需求的激增,从而导致业务系统中的节点无法承受而宕机,最终引发业务系统的崩溃而发生错误。所以需要在此之前提前做好准备,对业务系统中的节点进行更换,将当前节点的计算状态迁移至承载能力更大的节点中。而流计算架构的系统迁移节点需要保存节点的流计算状态,因此需要利用检查点机制以及检查点的持久化来提供节点迁移的核心恢复流程。而在银行流计算业务系统中,实时性也非常重要,使整个业务系统停滞以获取全局检查点再进行节点迁移的技术不能适应业务系统的工作,同时也不能适应当前的计算场景,而基于队列的检查点快速持久化技术是一个轻量级的银行流计算业务系统中检查点数据处理的管理方法,不涉及全局阻塞,对检查点做持久化处理。下面以银行流计算业务系统中节点流计算状态迁移的实例以及业务系统管理过程的流程图的方式,对上述方法作进一步的说明。
首先通过具体场景对问题做出定义:
银行流计算业务系统中包含数据管理节点、业务活动管理节点、策略计算节点。业务系统可以抽象为拓扑图G*=(T*,E*),用于表示银行流计算业务系统中任务执行图
G=(T,E)数据处理任务和信息传输通道的所有状态。其中T*包含了所有基础操作算子的状态:
1)在数据管理节点中,即数据库所有的增删改查操作当前的执行状态;
2)在业务活动管理节点中,首先对业务活动进行抽象的定义,并通过键值对的形式存储于节点中。而该节点的任务即通过针对于上述定义的不同配置进行业务活动的注册管理。所以该操作中的T*指的是当前活动配置到达的步骤,记录已经配置完成的进度;
3)在策略计算节点中,策略是由固定的数学模型进行优化得到的,所以该操作中的T*指的是模型计算的进度。例如当前已完成公式中的乘法计算,目前正在进行加法运算,后续还包括求导运算等,则先停止加法运算,并保留乘法计算得到的中间结果。
E*包含了所有通道的状态:
1)业务活动管理节点注册的活动相关的配置以及相关用户信息会通过通道传递至数据管理节点中,而目前通道中正在传递的信息即表示该通道的状态;
2)数据管理节点通过通道将目前用户的各种数据输入到策略计算节点中,用于计算策略模型的参数,通道的状态即指当前处于通道中的用户数据。
该过程抽象包含关系为e*∈E*,e*由E中传输的数据记录组成。
该问题是对银行流计算业务系统中某节点进行流计算状态的迁移时,则需要保证该节点的快照中包含以上所有这些信息,并保存至文件系统中进行持久化处理,从而保证目标节点能够正确地恢复到原节点终止计算前的状态。此外,在快照过程中不能有计算信息的丢失,且银行流计算业务的过程是连续的,即业务系统中所有进程都是持续活动的,则整个节点迁移流程需要在启动后能在有限的时间内结束,这保证了节点计算状态迁移方法的可行性以及最终性。
该实例有如下假设:
1)节点中交易数据信息的缓存和处理机制是队列形式的,即先进先出;
2)银行流计算业务系统中的Kafka队列是可靠的,即消息队列中Topic的数据消息是可以被阻塞或者停止阻塞的。进一步说,当一个通道被阻塞后,其在传递过程中的所有消息都会被系统缓存,当通道停止阻塞后,其消息会继续传播;
3)银行流计算业务系统支持识别人工注入的快照开始信号,该信号可以正常在Kafka消息队列中进行传输,并在抵达后能够触发使得节点任务的停止以及检查点机制。
接下来以银行风控领域流计算业务过程中操作量即将增加为实例场景,结合示意图说明业务系统中节点计算状态迁移场景下方法执行的流程:
1)在银行流计算业务过程中,判断此后一段时间内,系统中的操作量将增加,为了应对该突发的待处理数据增多、计算需求激增的情况,开始准备银行流计算业务系统中节点流计算状态的迁移工作。需要保存银行流计算业务系统中节点的流计算状态,并提供持久化处理,从而对系统中的节点流计算状态进行迁移以适应当前需求。人工向业务系统中注入快照开始信号,该信号与Kafka的Topic中普通的消息特征保持一致,与普通消息利用相同的消息传输通道到达节点;
2)如图1所示,此时人为向银行流计算业务系统中注入的快照开始信号已经抵达需要进行迁移的原节点中。业务系统中的该节点停止所有的数据计算操作和数据及消息的传输操作,停止Kafka的Topic消费,将Kafka中当前Topic的偏移量值以及节点当前的流计算状态存入虚拟机中。由于Kafka消息队列先进先出的原则,节点流计算状态相关的中间数据记录根据在Kafka中的先后顺序依次进行存储;
3)如图2所示,此时业务系统中原节点的流计算状态以及Kafka中当前Topic的偏移量已经完全存储到虚拟机中,随即触发快照持久化机制,将节点对银行流计算业务数据处理产生的流计算状态继续存入HDFS文件系统中。由队列先进先出的原则,HDFS文件系统依次接收来自虚拟机的流计算状态的中间数据记录,直到与本轮快照相关的记录全部存入文件系统中。此时获取HDFS文件系统中存储节点当前流计算状态的地址,将其与Kafka当前Topic的偏移量组合作为数据对放入Oracle数据库中。业务系统中当前节点使用指针指向数据库中的该条数据记录,便于之后的节点流计算状态迁移操作;
4)如图3所示,此时承载能力更强的新节点准备就绪。首先使新节点指向业务系统中原节点所指的Oracle数据库中的数据对记录,然后取消原节点的指针。如图4所示,通过数据对中的偏移量值重新启动,开始消费业务系统中Kafka的Topic,并通过数据对中记录的地址按顺序读取HDFS文件系统中的原节点的流计算状态相关的数据记录,利用快照存储下的这些中间状态数据记录恢复原节点的流计算状态,此时新节点已替换原节点进入银行流计算业务系统中进行数据的处理工作。至此,银行流计算业务系统中基于队列的检查点快速持久化方法管理流程全部结束。
本发明提出的方法的伪代码展示如下:
(1)收到快照信号的原节点操作
(2)目标节点的迁移操作
上述实施案例用来解释说明本发明,而不是对本发明进行限制,在本发明的精神和权利要求的保护范围内,对本发明作出的任何修改和改变,都落入本发明的保护范围。