一种分散调度自治的流程引擎负载均衡集群系统及方法

文档序号:7759176阅读:117来源:国知局
专利名称:一种分散调度自治的流程引擎负载均衡集群系统及方法
技术领域
本发明涉及流程引擎负载均衡集群系统及方法,属于信息技术领域中集群计算领域。
背景技术
高性能集群是大并发信息系统的关键技术,直接影响到大型信息系统的可用性。 特别是工作流管理系统的流程引擎更需要一种响应速度快、扩展性强的集群系统。传统的负载均衡集群系统一般都有一个总调度器,由总调度器负责将外部系统的请求分配给各处理单元。这种集群方法存在下述不足1)客户端调用首先传递给集群系统的总调度器,然后由集群系统的总调度器根据各个集群节点的负载情况把请求转发给相应的集群节点,然后再把计算结果返回给客户端,响应时间比较长,客户体验不好;2)随着系统规模的扩大,总调度器会成为集群系统的性能瓶颈;3)总调度器失效对系统的影响是致命的。

发明内容
本发明服务器端不设置总调度器,而是采用多层自治结构和分散调度的模式,具体就是服务端包括若干集群节点组,每个集群节点组功能完备并自治,由客户端分散调度, 能够有效解决传统负载均衡器的响应时间长、单口性能瓶颈、单点失效的问题。为了实现分散调度,本发明提供一种集群节点及其所含流程引擎发现机制,客户端可以发现集群节点及其所包含的流程引擎列表,这样客户端就可以根据轮转方法分散调度各个集群中的流程引擎(以下简称引擎)。分散调度的意义在于,客户端的每个请求进程都是一个均衡器,也就是说有多少个客户进程,就有多少个负载均衡器,而不必依赖一个全局的均衡器(总调度器),如此,彻底解决了单口瓶颈和单点失效问题。本发明公开了一种分散调度自治的流程引擎负载均衡集群系统,所述系统包括流程引擎集群,包括多个集群节点组,其中每个所述集群节点组包括多个集群节点,每个所述集群节点又包括多个流程引擎;请求池,用以存放客户端发起的流程服务请求;流程引擎信息布告板,用以通报当前可用的流程引擎的列表信息;客户端系统,包括有多个引擎序号轮转器,采用轮转引擎序号的方法计算分散调度各个流程引擎;处于工作状态的流程引擎按固定轮询周期从请求池取出属于本引擎的请求,然后进行流程处理。每个所述集群节点组设置有心跳起搏器,用于记录该集群节点组的心跳信息,每个所述心跳起搏器对应一个心跳控制锁,并由取得所述心跳控制锁的集群节点维护整个集群节点组的心跳信息。
每个所述集群节点组在某个时刻只有一个集群节点处于工作状态,其它的集群节点处于伺服状态,处于工作状态的集群节点负责维护整个集群节点组的心跳信息。每个所述集群节点设置有一个节点控制器,用于启动时探测集群节点所属集群节点组的心跳信息,如果发现心跳停止,则抢占所述心跳控制锁,如果抢占成功,则启动心跳, 并切换到工作状态;否则,如果未发现心跳停止且心跳节点是其它节点,或者抢占心跳控制锁失败,则就切换到伺服状态;处于伺服状态的集群节点会按固定周期来探测集群节点组的心跳信息,如果发现心跳停止,则按上一步骤所述切换到工作状态;处于工作状态的集群节点会按固定周期来探测心跳节点是否被其它集群节点抢占,如果被抢占,则就切换到伺服状态。处于工作状态的集群节点的每个流程引擎设置一个引擎心跳器,用于记录该引擎的心跳时间,所述节点控制器定时检查其内的各个引擎心跳器,如果发现某一个或多个心跳停止,则停止集群节点内的所有引擎,并停止对集群节点组心跳起搏器的占用,切换到伺服状态。同一个集群节点组内的集群节点会按固定周期来探测节点组的心跳信息,一旦发现心跳停止,则按上述步骤代替出问题的节点进行工作。客户端查阅流程引擎信息布告板,计算可用引擎的总个数;客户端初始化所含引擎序号轮转器,引擎序号轮转器上的值对应相应的流程引擎,将可用引擎总个数设为引擎序号轮转器的最大阈值,当超过此值时,引擎序号轮转器重新归零;发起新流程前,采用轮转引擎序号轮转器的方法将引擎序号轮转器的当前值加1, 计算请求应该分配给哪个流程引擎,以将客户端系统的请求平均分配给各个流程引擎。客户端采用异步消息的方式将流程服务请求发送给请求池,或者客户端采用同步通信的方式直接调用指定引擎的流程服务。本发明还公开了一种分散调度自治的流程引擎负载均衡集群方法,其特征在于 该方法将流程引擎集群分为多个集群节点组,每个所述集群节点组还分为多个集群节点, 每个所述集群节点又进一步细分为多个流程引擎,其中所述集群节点是集群服务器,所述方法具体包括如下步骤步骤01 启动各个集群服务器节点;步骤02 客户端系统启动时发现集群节点及其所含引擎服务器列表;步骤03 客户端初始化引擎序号轮转器;步骤04 客户端在请求前轮转引擎序号轮转器;步骤05 判断是否为同步模式,如果是同步模式,则请求直接发往相应集群引擎服务器;如果不是同步模式,则请求被发往请求池;步骤06 如果是异步模式,集群服务器从请求池取出与自身序号对应的服务请求;步骤07 流程引擎处理请求。处于工作状态的流程引擎按固定轮询周期从请求池中取出属于本引擎的请求;每个集群节点都是一个能对外提供服务的完备系统;
系统具有一套集群节点及其所含流程引擎的发现机制;客户端启动时首先发现集群服务器,客户端运行过程中,通过引擎序号轮转器轮转方法,平均分配请求;客户端的每个客户进程维护一个引擎序号轮转器,根据其序号决定将请求分配给哪个引擎;客户端把请求最终分发给引擎,而不是集群节点组,这样也解决了不同能力的计算机组成集群时的负载均衡问题;客户端调用流程引擎分两种模式1)同步模式,幻异步模式。本发明具有以下技术特点1)集群系统内的负载均衡器被转移到了客户端系统(引擎序号轮转器);2)服务端无需负载均衡器;3)服务端集群节点组内支持基于心跳机制的可靠性备份;4)负载均衡计算的权重分配(异构计算机集群,对于处理能力强的计算机应该分配更多请求)转化为集群节点组引擎数配置,也就是说,对于处理能力强的集群节点配置更多的引擎数目。这样,权重处理实际转移到了系统建设期,并且回避了运行期间的权重处理,从而减轻了服务器计算压力;5)支持异步请求。本发明采用上述技术方案,至少具有以下技术效果1)无单口性能瓶颈;2)无单一失效点;3)无限的扩充能力,可以根据需要增加任意个集群节点组;4)请求响应快,客户体验好;5)节省负载均衡硬件的投资成本。


下面根据附图和实施例对本发明作进一步详细说明。图1为本发明的分散调度自治负载均衡集群系统结构示意图;图2为集群请求与调度流程示意图;图3为压力测试TPS效果图。
具体实施例方式本发明的分散调度自治负载均衡集群系统结构如图1所示,系统分为N个集群节点组,每个集群节点组布置M个集群节点,每个节点对应一台服务器计算机,每个集群节点上启动K个引擎,每个引擎对应一个独立的线程,不同节点组内的节点上的引擎个数可以不同,但是同一个节点组内的不同节点上的引擎数目必须相同,节点组之间的引擎序号必须连续。图1中的虚线箭头表示同步调用。系统在客户端处设置有轮转器。N个集群节点组代表N个引擎线程序号区段,每个集群节点组负责计算所属区段的集群任务请求。比如第一组负责的引擎序号区段为1-3,第2组为4-6。每个线程具有一个引擎序号。
集群节点组内的各节点计算机的处理能力应该是相当的,但是不同组的计算机的处理能力则可以不同。每个引擎对应一个线程。每个计算机节点上部署的引擎数目根据该计算机的处理能力决定。集群节点组内的M台计算机节点互为备份。集群节点组内的M台计算机备份机制分为冷备份和热备份两种实现方式。在冷备份模式下,每个集群节点有两种状态,一是工作状态,二是伺服状态,伺服状态也就是预备状态。同一集群节点组在同一时间只有一台计算机(集群节点)处于工作状态,其他的节点处于伺服状态,处于工作状态的节点(心跳节点)负责维护整个节点组的心跳信息。当工作计算机出现故障失效后,其它计算机自动切换到工作状态,接替出故障节点继续工作。计算机之间判断失效的方式是通过心跳机制。集群节点组内冷备份方式的心跳机制是通过心跳服务实现的。集群节点组内都有一个心跳起搏器,记录该节点组的心跳信息,即心跳节点和心跳时间,每个心跳起搏器对应一个心跳控制锁,由取得心跳控制锁的节点维护整个节点组的心跳信息。每个集群节点有一个节点控制器,集群节点启动后,控制器会探测节点所属节点组的心跳信息,如果发现心跳停止(距离上次心跳时间长度超过规定范围),那么就去抢占心跳控制锁,如果抢占成功,则启动心跳,并切换到工作状态;否则,如果未发现心跳停止且心跳节点是其他节点,或者抢占心跳控制锁失败,那么就切换到伺服状态。如果伺服态的节点会按固定周期来探测节点组的心跳信息,如果发现心跳停止, 那么按上一步骤所述切换到工作状态。处于工作状态的节点要时刻检查心跳控制锁有无被其它节点抢占,如果被抢占, 并且其它节点正在心跳,则自动下线切换到伺服态。处于工作状态的节点的每个流程引擎也都设置一个引擎心跳器,记录该引擎的心跳时间,节点控制器定时检查其内的各个引擎心跳器,如果发现某一个或多个心跳停止,那么就停止节点内的所有引擎,并停止对节点组心跳起搏器的占用,切换到伺服状态。同一个集群节点组内的集群节点会按固定周期来探测节点组的心跳信息,一旦发现心跳停止,则按上述步骤代替出问题的节点进行工作,从而实现了同一组内的节点之间的互为备份,例如,当集群节点组A的节点a发生故障后,集群节点组A的另外一个节点会自动接过节点a的工作,以保证业务能被继续处理。在热备份模式下,各台计算机在获取计算任务时首先获得一个全局数据锁,获取任务后,修改任务状态为获取态,然后再解锁数据锁。被一个节点获取的任务请求,不能再被其它节点获取。冷备份和热备份方式的区别是1)冷备份方式有M-I台计算机平时是处于“待机” 状态的;而热备份方式下每台计算机都保持工作;幻冷备份方式没有数据锁,节省了全局数据加锁解锁的开销;幻冷备份方式不涉及任务数据资源的共享,不必对数据获取状态进行转换,节省了状态切换时间;4)冷备份的实现较为简单。综上,冷备份和热备份各有优劣,在工作流应用中推荐采用冷备份方式。集群节点组内的K个引擎线程,每个引擎线程负责处理指向该引擎序号的请求。客户端在决定把请求发给哪个引擎时,不必考虑引擎的能力和负载压力情况,完全采用轮巡模式。在建设系统时,已经根据每个计算机节点的处理能力,配置了合适的引擎个数。综上所述,服务器端取消了总调度器,采用了多层自治结构,客户端采用平均分配的方式将任务逐次发送各个工作引擎,消除了单口瓶颈和单一失效点,提高了响应速度和并行能力,提高了客户体验,而且本发明可以根据需要增加任意个集群节点组,具有无限的扩充能力。图2为集群的请求与调度流程示意图,下面将结合图1对本发明作出进一步阐述。步骤01启动各个集群服务器节点。每个集群节点在集群配置表内对应一条记录。 该记录标识集群节点的IP地址、端口以及引擎序号范围,集群节点进程根据这个配置,启动对应的若干线程。步骤02客户端系统启动时发现引擎服务器列表。实现机制是通过流程引擎信息布告板(如图1中所示),客户端通过集流程引擎信息布告板查询到引擎序号范围,据此确定轮转的区间。步骤03客户端初始化引擎序号轮转器(如图1所示)。客户进程启动时,把引擎序号轮转器置零。步骤04客户端在请求前轮转引擎序号轮转器。如果引擎序号轮转器的序号大于引擎数则归零。步骤05请求被发往请求池,如果是同步模式则直接发往相应引擎。请求池包括数据库和相应的访问服务,具体就是活动环节表及其访问服务。客户端启动流程时,会通过调用相应服务向数据库中插入一条活动环节数据,该环节处于待计算状态。在异步模式下,客户端无需知道每个集群节点的地址,只需知道引擎序号范围即可,把带引擎序号的请求发往请求池即可。而在同步模式下则需知道集群节点地址,通过网络通信将请求发给集群节点。异步模式可以提高响应速度,提高客户体验。步骤06如果是异步模式,集群服务器从请求池获取与自己序号对应的服务请求。步骤07流程引擎处理请求,处理完的环节状态置为已经计算,并根据一定的业务规则产生下一步环节以及工作项数据,供客户端获取并完成,并提交引擎继续计算后续环节,如此周而复始,推动业务流程运行。图3为压力测试TPS效果图,所谓TPS是指每秒钟处理的流程数量。在如下所述的硬件环境下,使用LoadRurmer工具对系统进行了压力测试
主机功能描述资源主机类型与操作系统引擎集群节点a4C8GP6570AIX6103引擎集群节点b+应用服务器4C8GP6570AIX6103数据库服务器8C16GP6570AIX6103Web服务器4C8GX3850m2LINUX RH4U6
TPS测试结果如图3所示,系统TPS维持在1300以上,12个小时的连续测试,TPS 曲线较为平滑稳定,未见性能振荡和陡降。本发明由于系统服务器端取消了总调度器,采用了多层自治结构,可以根据需要增加任意个集群节点组,具有无限的扩充能力,客户端采用平均分配的方式将任务逐次发送各个工作引擎,消除了单口瓶颈和单一失效点,提高了集群的响应速度和并行处理能力。上述仅为本发明的较佳实施例及所运用技术原理,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围的内。
权利要求
1.一种分散调度自治的流程引擎负载均衡集群系统,其特征在于所述系统包括流程引擎集群,包括多个集群节点组,其中每个所述集群节点组包括多个集群节点,每个所述集群节点又包括多个流程引擎;请求池,用以存放客户端发起的流程服务请求;流程引擎信息布告板,用以通报当前可用的流程引擎的列表信息;客户端系统,包括有多个引擎序号轮转器,采用轮转引擎序号的方法计算分散调度各个流程引擎;处于工作状态的流程引擎按固定轮询周期从请求池取出属于本引擎的请求, 然后进行流程处理。
2.如权利要求1所述的系统,其特征在于每个所述集群节点组设置有心跳起搏器,用于记录该集群节点组的心跳信息,每个所述心跳起搏器对应一个心跳控制锁,并由取得所述心跳控制锁的集群节点维护整个集群节点组的心跳信息;每个所述集群节点组在某个时刻只有一个集群节点处于工作状态,其它的集群节点处于伺服状态,处于工作状态的集群节点负责维护整个集群节点组的心跳信息。
3.如权利要求1或2所述的系统,其特征在于每个所述集群节点设置有一个节点控制器,用于启动时探测集群节点所属集群节点组的心跳信息,如果发现心跳停止,则抢占所述心跳控制锁,如果抢占成功,则启动心跳,并切换到工作状态;否则,如果未发现心跳停止且心跳节点是其它节点,或者抢占心跳控制锁失败,则就切换到伺服状态;处于伺服状态的集群节点会按固定周期来探测集群节点组的心跳信息,如果发现心跳停止,则按上一步骤所述切换到工作状态;处于工作状态的集群节点会按固定周期来探测心跳节点是否被其它集群节点抢占,如果被抢占,则就切换到伺服状态。
4.如权利要求1至3之一所述的系统,其特征在于处于工作状态的集群节点的每个流程引擎设置一个引擎心跳器,用于记录该引擎的心跳时间,所述节点控制器定时检查其内的各个引擎心跳器,如果发现某一个或多个心跳停止,则停止集群节点内的所有引擎,并停止对集群节点组心跳起搏器的占用,切换到伺服状态。
5.如权利要求1至4之一所述的系统,其特征在于同一个集群节点组内的集群节点会按固定周期来探测节点组的心跳信息,一旦发现心跳停止,则按上述步骤代替出问题的节点进行工作。
6.如权利要求1或2所述的系统,其特征在于客户端查阅流程引擎信息布告板,计算可用引擎的总个数;客户端初始化所含引擎序号轮转器,引擎序号轮转器上的值对应相应的流程引擎,将可用引擎总个数设为引擎序号轮转器的最大阈值,当超过此值时,引擎序号轮转器重新归零;发起新流程前,采用轮转引擎序号轮转器的方法将引擎序号轮转器的当前值加1,计算请求应该分配给哪个流程引擎,以将客户端系统的请求平均分配给各个流程引擎。
7.如权利要求1或2所述的系统,其特征在于客户端采用异步消息的方式将流程服务请求发送给请求池,或者客户端采用同步通信的方式直接调用指定引擎的流程服务。
8.一种分散调度自治的流程引擎负载均衡集群方法,其特征在于该方法将流程引擎集群分为多个集群节点组,每个所述集群节点组还分为多个集群节点,每个所述集群节点又进一步细分为多个流程引擎,其中所述集群节点是集群服务器,所述方法具体包括如下步骤步骤01 启动各个集群服务器节点;步骤02 客户端系统启动时发现集群服务器节点及其所含引擎服务器列表; 步骤03 客户端初始化引擎序号轮转器; 步骤04 客户端在请求前轮转引擎序号轮转器;步骤05 判断是否为同步模式,如果是同步模式,则请求直接发往相应的流程引擎;如果不是同步模式,则请求被发往请求池,请求中包含引擎序号信息;步骤06 如果是异步模式,处于工作状态的集群服务器节点的流程引擎按固定轮询周期从请求池取出与自身序号对应的服务请求; 步骤07:流程引擎处理请求。
9.如权利要求8所述的方法,其特征在于每个所述集群节点组设置有心跳起搏器,用于记录该集群节点组的心跳信息,每个所述心跳起搏器对应一个心跳控制锁,并由取得所述心跳控制锁的集群节点维护整个集群节点组的心跳信息;每个所述集群节点组在某个时刻只有一个集群节点处于工作状态,其它的集群节点处于伺服状态,处于工作状态的集群节点负责维护整个集群节点组的心跳信息。
10.如权利要求8或9所述的方法,其特征在于每个所述集群节点设置有一个节点控制器,用于启动时探测集群节点所属集群节点组的心跳信息,如果发现心跳停止,则抢占所述心跳控制锁,如果抢占成功,则启动心跳,并切换到工作状态;否则,如果未发现心跳停止且心跳节点是其它节点,或者抢占心跳控制锁失败,则就切换到伺服状态;处于伺服状态的集群节点会按固定周期来探测集群节点组的心跳信息,如果发现心跳停止,则按上一步骤所述切换到工作状态;处于工作状态的集群节点会按固定周期来探测心跳节点是否被其它集群节点抢占,如果被抢占,则就切换到伺服状态;处于工作状态的集群节点的每个流程引擎设置一个引擎心跳器,用于记录该引擎的心跳时间,所述节点控制器定时检查其内的各个引擎心跳器,如果发现某一个或多个心跳停止,则停止集群节点内的所有引擎,并停止对集群节点组心跳起搏器的占用,切换到伺服状态。
全文摘要
本发明公开了一种分散调度自治的流程引擎负载均衡集群系统及方法,属于信息技术领域中集群计算技术。本发明将服务端流程引擎进行多层集群,首先分为多个集群节点组,每个集群节点组再分为多个集群节点,每个集群节点又细分为多个流程引擎,不同集群节点组之间施行自治,取消了总调度器,同一个集群节点组内的集群节点之间通过心跳检测的方法互为备份;将传统的总调度功能从服务端系统转移并分散到了客户端系统中,由客户端系统根据流程引擎列表,用轮转方法计算请求的服务提供者,以降低服务端的调度压力;本发明通过将调度分散化,有效的解决了传统负载均衡集群的单口瓶颈以及单点失效问题,提高了集群的响应速度和处理能力。
文档编号H04L12/56GK102394807SQ20111024240
公开日2012年3月28日 申请日期2011年8月23日 优先权日2011年8月23日
发明者孙刚, 高昊江 申请人:北京京北方信息技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1