一种分布式应用退出方法、系统以及服务器与流程

文档序号:12733244阅读:208来源:国知局
一种分布式应用退出方法、系统以及服务器与流程

本发明涉及分布式应用技术领域,具体为一种分布式应用退出方法、系统以及服务器。



背景技术:

分布式应用(distributed application)指的是应用程序分布在不同计算机上,通过网络来共同完成一项任务的工作方式。

分布式应用相对于单机应用,具有可扩展性强、容错能力高等优点,但是在应用管理上则更为复杂。特别是对于分布式流式计算的应用,应用退出时,最重要的考虑是如何避免数据丢失。现有常见的分布式应用退出方案,首先通知所有应用节点停止数据接收与发送,然后各个应用节点将未处理的内存数据持久化(如将数据下载到磁盘中)后,应用进程退出;当所有应用节点的进程退出后,应用退出完成;下次重启时,各个应用节点的进程重新加载各自的持久化数据,保证所有数据得到处理。

现有的退出方案由于需要将未处理的内存数据持久化,所以对于大吞吐量应用的内存数据持久化,可能会造成突发的较大的CPU和IO负载。另外如果应用的内存数据结构比较复杂,数据持久化和重加载处理往往需要应用参与,给应用带来额外的开发量。

另外,现有分布式应用退出时,应用节点立即停止数据接收与发送,会导致应用节点不再接收新的数据,因此需要关闭数据接收端口,这会导致其它应用节点发送失败,如果不重发,可能造成数据丢失,如果重发,可能造成不必要的系统资源和网络资源开销。



技术实现要素:

鉴于以上所述现有技术的缺点,本发明实施例提供一种分布式应用退出方法、系统以及服务器,用于解决现有技术中分布式应用退出时需要将未处理的内存数据持久化,带来的负载量大、退出耗时长、数据丢失等问题。

本发明实施例提供一种分布式应用退出方法,所述分布式应用退出方法包括:在接收到应用退出指令时,创建停止应用运行的通知指令;根据所述通知指令,控制各应用节点停止生产新数据并继续处理已经收到的数据;定期检测各应用节点的数据处理状态,直至所有应用节点的残留数据均处理完成;在所有应用节点的残留数据均处理完成后,控制各应用节点停止数据收发,退出应用。

于本发明的一实施例中,所述分布式应用退出方法还包括:所述分布式应用退出方法还包括:为处于数据处理中的各应用节点分别对应配置临时节点,并定期更新所述临时节点,其中,所述临时节点用于标记所述应用节点的数据处理状态。

于本发明的一实施例中,在所述应用节点的残留数据均处理完成或所述应用节点异常时,删除对应的所述临时节点。

于本发明的一实施例中,所述定期检测各应用节点的数据处理状态,直至所有应用节点的残留数据均处理完成具体包括:定期检测与各应用节点对应的临时节点数量,若在预设的连续多个周期内未检测到所述临时节点,则判断所有应用节点的残留数据均处理完成。

于本发明的一实施例中,各所述应用节点在继续处理已经收到的数据时,若有应用节点出现异常,将出现异常的应用节点所处理的数据重新分发至其它应用节点。

于本发明的一实施例中,所述分布式应用退出方法还包括:在所有应用节点的残留数据处理完成后,所述应用节点回调应用的退出回调函数,待所述退出回调函数执行完毕,退出应用。

于本发明的一实施例中,所述分布式应用退出方法采用Zookeeper及基于Zookeeper选举产生的管理节点实施。

本发明还提供一种分布式应用退出系统,所述分布式应用退出系统包括:残留数据处理模块,用于在接收到应用退出指令时,创建停止应用运行的通知指令,根据所述通知指令,控制各应用节点停止生产新数据并继续处理已经收到的数据,并定期检测各应用节点的数据处理状态,直至所有应用节点的残留数据均处理完成;退出模块,用于在所有应用节点的残留数据均处理完成后,控制各应用节点停止数据收发,退出应用。

于本发明的一实施例中,所述分布式应用退出系统还包括:临时节点处理模块,用于为处于数据处理中的各应用节点分别对应配置临时节点,并定期更新所述临时节点,其中,所述临时节点用于标记所述应用节点的数据处理状态,在所述应用节点的残留数据均处理完成或所述应用节点异常时,删除对应的临时节点。

于本发明的一实施例中,所述分布式应用退出系统还包括检测判断模块,用于所述定期检测各应用节点的数据处理状态,直至所有应用节点的残留数据均处理完成,具体包括:定期检测与各应用节点对应的临时节点数量,若在预设的连续多个周期内未检测到所述临时节点,则判断所有应用节点的残留数据均处理完成。

于本发明的一实施例中,各所述应用节点在继续处理已经收到的数据时,若有应用节点出现异常,所述残留数据处理模块将出现异常的应用节点所处理的数据重新分发至其它应用节点。

本发明还提供一种服务器,所述服务器包括如上所述的分布式应用退出系统。

如上所述,本发明的一种分布式应用退出方法、系统以及服务器,具有以下有益效果:

1、本发明在分布式应用退出时,停止数据生产,不关闭各应用节点间的数据收发,跟踪检测所有应用节点已收到数据的处理情况,确保所有数据处理完成后再退出,可以保证应用数据无丢失无重复,防止由于节点异常导致应用退出失败,同时,应用退出前,未处理数据不持久化,减少了系统资源和应用开发资源的额外耗费。

2、本发明将应用退出分为残留数据处理和应用退出回调两步,将往往耗时最多的应用退出回调放在最后一步,用户可以在残留数据处理完成后安全的进行后续操作。

附图说明

图1显示为本发明的一种分布式应用退出方法的具体流程示意图。

图2显示为本发明的一种分布式应用退出方法的数据处理具体流程示意图。

图3显示为本发明的一种分布式应用退出系统的原理框图。

元件标号说明

100 分布式应用退出系统

101 残留数据处理模块

102 退出模块

103 临时节点处理模块

104 检测判断模块

S101~S104 步骤

具体实施方式

以下通过特定的具体实例说明本发明的实施方式,本领域技术人员可由本说明书所揭露的内容轻易地了解本发明的其他优点与功效。本发明还可以通过另外不同的具体实施方式加以实施或应用,本说明书中的各项细节也可以基于不同观点与应用,在没有背离本发明的精神下进行各种修饰或改变。

本发明实施例提供一种分布式应用退出方法、系统以及服务器,用于解决现有技术中分布式应用退出时产生的负载量大、退出耗时长、数据丢失或需要数据重发的问题。以下将详细阐述本发明的一种分布式应用退出方法、系统以及服务器的原理及实施方式,使本领域技术人员不需要创造性劳动即可理解本发明的一种分布式应用退出方法、系统以及服务器。

本实施例中的分布式应用退出方法、系统以及服务器本系统为了解决分布式应用的安全退出问题。本实施例针对当前分布式应用退出的弊端,提出改进后的分布式应用安全退出的技术方案改进如下:

1)应用退出前,未处理的数据不持久化,减少了系统资源的和应用开发资源的额外耗费。

2)退出时应用节点停止数据生产,但不关闭各应用节点间的数据收发,避免了数据丢失或重发。

3)持续监控应用退出过程,完备的异常处理;将应用退出分为残留数据处理和应用退出回调两步,两步式退出,使退出操作更快返回。

以下对本实施例中的分布式应用退出方法、系统以及服务器进行具体说明。

本实施例提供一种分布式应用退出方法,于本实施例中,所述分布式应用退出方法例如采用Zookeeper及基于Zookeeper选举生成的管理节点(Leader)实施,通用性强,安全可靠性高,但并不以此限制本发明。

Zookeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。Zookeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。Zookeeper包含一个简单的原语集,提供Java和C的接口。Zookeeper是以Fast Paxos算法为基础的,Paxos算法存在活锁的问题,即当有多个proposer交错提交时,有可能互相排斥导致没有一个proposer能提交成功,而Fast Paxos作了一些优化,通过选举产生一个Leader,只有Leader才能提交proposer,具体算法可见Fast Paxos。Zookeeper的基本运转流程:1)选举Leader;2)同步数据;3)选举Leader过程中算法有很多,但要达到的选举标准是一致的;4)Leader要具有最高的zxid;集群中大多数的应用节点得到响应并follow选出的Leader。

具体地,如图1所示,所述分布式应用退出方法包括以下步骤:

步骤S101,在接收到应用退出指令时,创建停止应用运行的通知指令。

本实施例中,使用Zookeeper保证分布式应用各应用节点退出各个步骤的状态一致性,由动态选举出的Leader控制退出流程,防止由于节点异常导致应用退出失败。

于本实施例中,用户(User)通过执行应用管理程序发起应用退出请求,应用管理程序在Zookeeper创建停止分布式应用运行的应用退出指令。利用Leader定期查询Zookeeper路径是否有未处理指令(即应用退出指令),读取指令的内容,然后等待Zookeeper通知并获取操作结果。

步骤S102,根据所述通知指令,控制各应用节点停止生产新数据并继续处理已经收到的数据。

于本实施例中,分布式应用退出时,各应用节点停止数据生产,但不关闭应用节点间的数据收发。

于本实施例中,各所述应用节点在继续处理已经收到的数据时,若有应用节点出现异常,将出现异常的应用节点所处理的数据重新分发至其它应用节点。即于本实施例中,各个应用节点继续处理已收到的数据,并按需进行数据分发;如果某应用节点出现异常,数据重新分发,保证数据不丢失。

于本实施例中,所述分布式应用退出方法还包括:为处于数据处理中的各应用节点分别对应配置临时节点,并定期更新所述临时节点,其中,所述临时节点用于标记所述应用节点的数据处理状态。

需要说明的是,临时节点的创建和删除是根据应用节点的数据处理情况来更新的,如有未处理数据,则创建临时节点,数据处理完毕,则删除临时节点,故临时节点的创建和删除可能有多次,直至所有应用节点的参数数据处理完毕。具体地,所有应用节点的临时节点均保存于一个在线列表中。Leader监听应用节点在线列表,每个活动的应用节点会在这个列表下维护一个临时节点。

其中,在所述应用节点的残留数据均处理完成或所述应用节点异常时,删除对应的临时节点。

步骤S103,定期检测各应用节点的数据处理状态,直至所有应用节点的残留数据均处理完成。

于本实施例中,使用Zookeeper跟踪所有应用节点已收到数据的处理情况,确保所有数据处理完成后再退出。

具体地,于本实施例中,所述定期检测各应用节点的数据处理状态,直至所有应用节点的残留数据均处理完成具体包括:定期检测与各应用节点对应的临时节点数量,若在预设的连续多个周期内未检测到所述临时节点,则判断所有应用节点的残留数据均处理完成。

例如,各个应用节点定期(假设周期为T)检测本应用节点未处理的数据个数,如果连续多个周期(例如连续两个周期)内检测到的为处理的数据个数为0,删除临时节点;否则,创建临时节点。其中,如果某应用节点出现异常,临时节点会自动被Zookeeper删除,避免退出进度被阻塞。

其中,Leader定期(T)监听应用节点在线列表,当连续两个周期,在线列表为空,则说明所有残留数据已被处理完成。

当确定所有残留数据均已处理完成,Leader为各个应用节点创建新通知;然后将退出成功的操作结果写入Zookeeper,删除收到退出请求时创建的指令。用户从Zookeeper获取残留数据处理完毕的操作结果,可以进行后续的应用重启、应用升级等操作。

步骤S104,在所有应用节点的残留数据均处理完成后,控制各应用节点停止数据收发,退出应用。本实施例中,将应用退出分为残留数据处理和应用退出两步,将耗时最多的应用退出放在最后一步,用户可以在残留数据处理完成后安全的进行后续操作。

具体地,各个应用节点监听各自的通知路径,收到退出通知,判断本应用节点的应用进程是否在运行,如果是,关闭应用节点的数据收发模块,否则,应用已退出,删除通知。然后应用节点回调应用的退出回调函数,例如将应用的一些计算结果下载下来,等退出回调函数执行完,应用进程退出。完成分布式应用的退出。

下面举例来说明本发明实施例的分布式应用退出方法,但不以此为限。如图2所示,所述分布式应用退出方法具体流程如下:

1、用户(User)通过执行应用管理程序发起应用退出请求,应用管理程序在Zookeeper创建停止分布式应用运行的应用退出指令,例如用户创建新指令(Zookeeper路径command/$cid($指代变量,cid为command id的缩写,每个指令都有唯一的id)),写入指令内容stop:$app(app指代应用名称),然后等待Zookeeper通知并获取操作结果。

2、利用Leader定期查询Zookeeper路径command/是否有未处理指令(即应用退出指令),读取$cid指令的内容stop:$app。需要说明的是,如果应用退出过程中,Leader出现异常,自动选举出新的Leader重新读取指令的内容,避免因Leader异常导致退出失败。

3、然后Leader定期查询对应的应用状态(Zookeeper路径$app/status),如果是running,表示该应用正在运行中,故将$app/status改为stopping;如果是stopping,Leader为各个应用节点创建新通知(Zookeeper路径$app/$node/notify/$nid1),写入内容status:stopping。

4、Leader为各个应用节点创建新通知(Zookeeper路径$app/$node/notify/$nid1),写入内容status:stopping;Leader开始监听应用节点在线列表(Zookeeper路径$app/running/),其中每个活动的应用节点会在这个列表下维护一个临时节点$app/running/$node。

5、各个应用节点监听各自的通知路径(Zookeeper路径$app/$node/notify/$nid1),收到stopping通知,判断本节点应用进程是否在运行,如果是,停止应用节点的所有生产模块,不再生产新数据,然后删除通知。例如为删除通知$app/$node/notify/$nid1;否则,即该节点应用进程没有在运行,该应用节点已退出,删除通知,例如为删除通知$app/$node/notify/$nid1。

6、各个应用节点继续处理已收到的数据,并按需进行数据分发;如果某应用节点出现异常,由分布式平台进行数据重新分发,保证数据不丢失。

7、各个应用节点定期(假设为T)检测本节点未处理的数据个数,如果为0,删除临时节点$app/running/$node;否则,创建临时节点$app/running/$node;如果某应用节点出现异常,临时节点$app/running/$node会自动被Zookeeper删除,避免退出进度被阻塞。

8、Leader定期(T)监听应用节点在线列表$app/running/,当连续两个周期,在线列表为空,则说明所有残留数据已被处理完成。

9、当确定所有残留数据均已处理完成,Leader将应用节点状态$app/status改为stop,为各个应用节点创建新通知(Zookeeper路径$app/$node/notify/$nid2),写入内容status:stop;然后将退出成功的操作结果写入Zookeeper,删除收到退出请求时创建的指令command/$cid。

10、用户从Zookeeper获取残留数据处理完毕的操作结果,可以进行后续的应用重启、应用升级等操作。

11、各个应用节点监听各自的通知路径,收到stop通知,判断本节点应用进程是否在运行,如果是,关闭数据收发模块,删除通知$app/$node/notify/$nid2;否则,应用已退出,删除通知$app/$node/notify/$nid2。

12、应用节点回调应用的退出回调函数,等退出回调函数执行完,应用进程退出。

为实现上述分布式应用退出方法,本实施例还对应提供一种分布式应用退出系统,如图3所示,所述分布式应用退出系统100包括:残留数据处理模块101、退出模块102、临时节点处理模块103以及检测判断模块104。

以下对本实施例中的所述分布式应用退出系统100进行详细说明。

于本实施例中,所述分布式应用退出系统100采用Zookeeper及基于Zookeeper选举生成的Leader实施。

具体地,于本实施例中,所述残留数据处理模块101用于在接收到应用退出指令时,创建停止应用运行的通知指令,根据所述通知指令,控制各应用节点停止生产新数据并继续处理已经收到的数据,并定期检测各应用节点的数据处理状态,直至所有应用节点的残留数据均处理完成。

本实施例中,使用Zookeeper保证分布式应用各应用节点退出各个步骤的状态一致性,由动态选举出的Leader控制退出流程,防止由于节点异常导致应用退出失败。

具体地,用户通过Zookeeper创建停止分布式应用运行的应用退出指令,例如用户创建新指令,然后等待Zookeeper通知获取操作结果。

于本实施例中,利用Leader定期查询Zookeeper路径是否有未处理指令(即应用退出指令),读取指令的内容。其中,于本实施例中,如果指令退出过程中,Leader出现异常,自动选举出新的Leader重新读取。

于本实施例中,分布式应用退出时,各应用节点停止数据生产,但不关闭应用节点间的数据收发。

具体地,于本实施例中,各所述应用节点在继续处理已经收到的数据时,若有应用节点出现异常,所述残留数据处理模块101将出现异常的应用节点所处理的数据重新分发至其它应用节点。即于本实施例中,各个应用节点继续处理已收到的数据,并按需进行数据分发;如果某应用节点出现异常,数据重新分发,保证数据不丢失。

于本实施例中,所述临时节点处理模块103用于为处于数据处理中的各应用节点分别对应配置临时节点,并定期更新所述临时节点,其中,所述临时节点用于标记所述应用节点的数据处理状态。具体地,所有应用节点的临时节点均保存于一个在线列表中。Leader监听应用节点在线列表,每个活动的应用节点会在这个列表下维护一个临时节点。

在所述应用节点的残留数据均处理完成或所述应用节点异常时,所述临时节点处理模块103删除对应的临时节点。

于本实施例中,使用Zookeeper跟踪所有应用节点已收到数据的处理情况,确保所有数据处理完成后再退出。

于本实施例中,所述检测判断模块104用于所述定期检测各应用节点的数据处理状态,直至所有应用节点的残留数据均处理完成,具体包括:定期检测与各应用节点对应的临时节点数量,若在预设的连续多个周期内未检测到所述临时节点,则判断所有应用节点的残留数据均处理完成。

例如,各个应用节点定期(假设周期为T)检测本应用节点未处理的数据个数,如果连续多个周期(例如连续两个周期)内检测到的为处理的数据个数为0,删除临时节点;否则,创建临时节点。其中,如果某应用节点出现异常,临时节点会自动被Zookeeper删除,避免退出进度被阻塞。

其中,Leader定期(T)监听应用节点在线列表$app/running/,当连续两个周期,在线列表为空,则说明所有残留数据已被处理完成。

当确定所有残留数据均已处理完成,Leader为各个应用节点创建新通知;然后将退出成功的操作结果写入Zookeeper,删除收到退出请求时创建的指令。用户从Zookeeper获取残留数据处理完毕的操作结果,可以进行后续的应用重启、应用升级等操作。

于本实施例中,所述退出模块102用于在所有应用节点的残留数据均处理完成后,控制各应用节点停止数据收发,退出应用。

本实施例中,将应用退出分为残留数据处理和应用退出两步,将耗时最多的应用退出放在最后一步,用户可以在残留数据处理完成后安全的进行后续操作。

具体地,所述退出模块102控制各个应用节点监听各自的通知路径,收到stop通知,判断本应用节点的应用进程是否在运行,如果是,关闭应用节点的数据收发模块,删除通知;否则,应用已退出,删除通知。然后应用节点回调应用的退出回调函数,等退出回调函数执行完,应用进程退出。完成分布式应用的退出。

最后本实施例还提供一种服务器,所述服务器包括如上所述的分布式应用退出系统100。上述已经对所述分布式应用退出系统100进行了详细说明,在此不再赘述。

综上所述,本发明在分布式应用退出时,停止数据生产,不关闭各应用节点间的数据收发,跟踪检测所有应用节点已收到数据的处理情况,确保所有数据处理完成后再退出,可以保证应用数据无丢失无重复,防止由于节点异常导致应用退出失败,同时,应用退出前,未处理的数据不持久化,减少了系统资源和应用开发资源的额外耗费;本发明将应用退出分为残留数据处理和应用退出回调两步,将往往耗时最多的应用退出回调放在最后一步,用户可以在残留数据处理完成后安全的进行后续操作。所以,本发明有效克服了现有技术中的种种缺点而具高度产业利用价值。

上述实施例仅例示性说明本发明的原理及其功效,而非用于限制本发明。任何熟悉此技术的人士皆可在不违背本发明的精神及范畴下,对上述实施例进行修饰或改变。因此,举凡所属技术领域中具有通常知识者在未脱离本发明所揭示的精神与技术思想下所完成的一切等效修饰或改变,仍应由本发明的权利要求所涵盖。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1