CN103473287A - 一种自动分发、运行和更新可执行程序的方法及系统 - Google Patents
一种自动分发、运行和更新可执行程序的方法及系统 Download PDFInfo
- Publication number
- CN103473287A CN103473287A CN2013103859722A CN201310385972A CN103473287A CN 103473287 A CN103473287 A CN 103473287A CN 2013103859722 A CN2013103859722 A CN 2013103859722A CN 201310385972 A CN201310385972 A CN 201310385972A CN 103473287 A CN103473287 A CN 103473287A
- Authority
- CN
- China
- Prior art keywords
- executable program
- state storage
- storage cluster
- directory
- renewal
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Abstract
本发明涉及一种自动分发、运行和更新可执行程序的方法及系统,包括客户端将可执行程序及相关文件所在目录打包成一个文件,并采用大文件分割及索引存储方法将打包文件存储到状态存储集群;工作节点定期到状态存储集群检测索引状态,当检测到有新的索引或已有索引有更新,按照索引方式将可执行程序下载到本地目录;工作节点定期到状态存储集群获取程序相关信息;工作节点根据程序相关信息,每隔心跳时间到本地目录检测可执行程序的下载状态,直到检测到可执行程序下载完成时,执行可执行程序;本发明可实现可执行程序的自动分发、运行及更新,尤其在线更新正在执行的可执行程序,无需重新提交Job信息,增加了系统的灵活性与稳定性。
Description
技术领域
本发明涉及云计算领域,尤其涉及一种自动分发、运行和更新可执行程序的方法及系统。
背景技术
近年来,一种新的数据密集型应用——流动“大数据”处理已经得到了广泛的认同,这些应用的实例包括:网络监控、电信数据管理、Web应用、传感检测等等。在这种数据流模型中,数据以大量、快速、时变(可能是不可预知)的数据流形式持续到达,针对这种网络海量流动数据的实时处理需求,建立适合的平台是需要考虑的问题。
基于流水线处理的实时云计算是解决流数据处理的有效方法与手段,其关注的是海量数据流即时处理,是一种数据密集型计算平台。工业界和学术界开发了很多实时云平台。在国内,包括baidu下一代数据流系统DStream、淘宝Beatles实时流式数据分析平台等;在国外,包括斯坦福大学的STREAM、施乐公司的Tapestry、加州大学伯克利分校的Telegraph、布朗大学和麻省理工学院合作的Aurora、Apache的Hadoop Online、Twitter的Storm以及Yahoo的S4。这些系统从集中式演化到并行分布式,其主要目的就是为了提高数据流处理的性能,降低处理延迟。
目前,几乎所有实时云平台都采用类似hadoop map/reduce函数式/接口式编程模型为用户提供编程接口,用户可以在接口中完成自己的业务函数,定义处理流程及Job信息,并提交Job程序到集群中,并分发程序给每个工作节点运行。
然而,这种方式存在以下一些问题:
1、函数式/接口式编程模型看似逻辑松散,灵活度高,但实则用户依然需要按照接口编程,使用平台提供的方法,当面对一些特殊业务时,平台提供的接口与方法并不能满足实际需求。
2、在线更新业务或算法代价过高。将所有处理流程中的函数打包成Jar文件或动态库文件的形式,并作为Job提交。在这种模式下,哪怕是只对一个节点中的一个算法的细微改动,也需要将整个集群中的Job杀死、修改算法、重新打包、重新提交Job。
因此,我们需要一种可以摆脱函数式编程束缚、实现可执行程序分布式提交运行的方法;并能够提供在线更新某个指定业务程序,而非重新提交整个Job的方法。
发明内容
本发明所要解决的技术问题是针对现有技术的不足,提供一种自动分发、运行和更新可执行程序的方法及系统,本发明具有良好的鲁棒性及运行效率。
本发明解决上述技术问题的技术方案如下:一种自动分发、运行和更新可执行程序的方法,包括如下步骤:
步骤A:客户端将可执行程序及相关文件所在目录打包成一个文件,并存储在缓存中;
步骤B:客户端采用大文件分割及索引存储方法将缓存中的打包文件存储到状态存储集群的相应目录中;
步骤C:工作节点每隔心跳时间到状态存储集群中与其相关的目录中检测索引状态,当检测到有新的索引或已有索引有更新,按照索引方式将可执行程序下载到本地目录;
步骤D:工作节点每隔心跳时间到状态存储集群中与其相关的目录中获取包括程序名、程序地址的程序相关信息;
步骤E:工作节点根据程序相关信息,每隔心跳时间到本地目录检测可执行程序的下载状态,直到检测到可执行程序下载完成时,执行可执行程序。
本发明的有益效果是:
1.可执行程序自动分发、运行
通过将可执行程序上传到状态存储集群中,各工作节点定时检查状态存储集群中的父目录的状态,并下载可执行程序,进而执行可执行程序,实现可执行程序的自动分发;
2.可执行程序运行时自动更新
工作节点通过检查状态存储集群中父目录的版本号及更新时间,完成可执行程序的版本控制,且工作节点执行单元定期检查本地目录中正在执行的可执行程序的MD5值,如果MD5值发送变化,则终止现有可执行程序的执行,执行最新版本的可执行程序,这样便摆脱了更新程序时需要重新提交Job的束缚;
3.灵活性与稳定性增加
在传统函数式云计算编程模型基础上,增加可执行程序执行模式,使得灵活性大大增加;且通过状态存储集群读写锁与大文件读写增强系统鲁棒性。
4.业务程序崩溃自动重启
本发明的运行控制方式使得当线程中业务程序运行崩溃后,可自动重启业务程序,保证了平台及业务的鲁棒性。
在上述技术方案的基础上,本发明还可以做如下改进。
进一步,上述技术方案还包括:
步骤F:工作节点每隔心跳时间检查本地目录中正在执行的可执行程序;
步骤G:计算可执行程序的MD5值,当发现可执行程序的MD5值发生变化时则终止对原可执行程序的执行,重新执行更新的可执行程序。
采用上述进一步方案的有益效果是:业务程序运行时自动更新,本发明采用心跳检查程序的MD5值,当发现程序的MD5值改变时,更新程序并重新执行,实现可执行程序随时更新随时自动运行功能;而程序更新也支持简单的替换操作,无需重新提交整个Job,不仅效率大大提高,且流处理业务连续运行得到保持。
进一步,所述步骤B中客户端采用大文件分割及索引存储方法将缓存中的打包文件存储到状态存储集群的具体实现为:
步骤B1:判断状态存储集群中是否存在与打包文件相对应的父目录,如果存在,执行步骤B2;如果不存在,则新建父目录,执行步骤B2;
步骤B2:将打包件分割成若干个分片文件;
步骤B3:在状态存储集群中的父目录中存储包括分片文件数目、每片分片文件的大小、末尾分片文件大小在内的分片信息;
步骤B4:根据父目录中存储的分片信息创建相应数量的子目录;
步骤B5:将各分片文件存入相应的子目录中。
采用上述进一步方案的有益效果是:大文件存储服务,本发明实现了大文件分割索引存储方式,解决了状态存储集群中存储大文件超时、同步困难甚至导致状态存储集群崩溃的问题。
进一步,所述步骤C中工作节点从状态存储集群下载可执行程序的具体实现为:
步骤C1:工作节点每隔心跳时间检查状态存储集群中父目录的版本号及更新时间;
步骤C2:根据父目录的版本号是否更新且更新时间小于心跳时间,判断是否有新的可执行程序需要执行或原可执行程序需要更新,如果有则执行步骤C3;否则等待心跳时间,返回步骤C1;
步骤C3:所述工作节点根据父目录中存储的分片信息,将子目录中存储的分片文件拼接读取到工作节点的本地目录。
采用上述进一步方案的有益效果是:采用心跳检查状态存储集群中父目录的版本号及更新时间,当父目录的版本号更新且更新时间小于心跳时间时,将该父目录相应子目录中的文件读取到工作节点,实现业务程序随时更新;而程序更新也支持简单的替换操作,无需重新提交整个Job,不仅效率大大提高,且流处理业务连续运行得到保持。
进一步,客户端向状态存储集群上传分片文件前,要对父目录加写锁,上传完毕,解除对父目录的写锁;工作节点从状态存储集群下载可执行程序前,要对父目录加读锁,下载完毕后,解除对父目录的读锁。
进一步,对父目录加读、写锁的具体实现为:
想获得锁的进程在父目录下创建临时节点,读锁的临时节点前缀设置为read+编号,写锁的前缀设置为write+编号;
创建读锁的时候,检查是否有编号小于自己的写锁存在,若存在则对编号刚好小于自己的写锁节点进行监听,直到监听的写锁被撤销,便可获得读锁;
创建写锁时,检查创建的临时节点编号是否为最小,如不是最小,则需要对编号刚好小于自己的读锁或写锁进行监听,直到监听的锁被撤销,便可获得写锁;
撤销读锁或写锁只需删除临时节点。
采用上述进一步方案的有益效果是:分布式读写锁服务,采用分别建立父目录的读临时节点与写临时节点,并监听前序节点动作的方式,实现读锁与写锁,相比于状态存储集群中提供的互斥锁方法效率更高,安全性更好。
本发明解决上述技术问题的另一技术方案如下:一种自动分发、运行和更新可执行程序的系统,包括客户端、状态存储集群和若干个工作节点;
所述客户端,其用于将可执行程序及相关文件所在目录打包成一个文件,存储在缓存中;并采用大文件分割及索引存储方法将缓存中的打包文件存储到状态存储集群;
所述状态存储集群,其用于以索引方式存储客户端上传的文件,还用于保存其客户端和各工作节点的工作状态及心跳信息;
所述工作节点,其用于每隔心跳时间到状态存储集群检测索引状态,当检测到有新的索引或已有索引有更新,按照索引方式将可执行程序下载到本地目录,下载完成时,启动工作进程执行可执行程序。
本发明的有益效果是:
1.业务逻辑实现灵活
本发明采用传统函数式编程模型接口与可执行程序编程接口相结合的方式,使实时云平台对于业务的局限性大大降低,业务逻辑的实现方式更加灵活。使用户只需关心业务逻辑层面,使平台更加透明化。
2.分布式读写锁服务
本发明采用分别建立服目录的读临时节点与写临时节点,并监听前序节点动作的方式,实现读锁与写锁,相比于Zookeeper中提供的互斥锁方法效率更高,安全性更好。
3.大文件存储服务
本发明实现了索引——分割存储大文件的方法,解决了Zookeeper中存储大文件超时、同步困难甚至导致Zookeeper崩溃的问题。
4.业务程序运行时更新
本发明采用心跳检查程序更新时间、版本号、MD5值等策略,实现业务程序随时更新随时自动运行功能;而程序更新也支持简单的替换操作,无需重新提交整个Job,不仅效率大大提高,且流处理业务连续运行得到保持。
在上述技术方案的基础上,本发明还可以做如下改进。
进一步,所述工作节点执行单元还用于每隔心跳时间检测本地目录中正在执行的可执行程序是否有更新,如果有则终止执行现有的可执行程序,重新执行更新的可执行程序。
进一步,所述工作节点中包括监听单元和执行单元;
所述监听单元,其用于监听状态存储集群中是否有新上传的可执行程序,等到上传完成时,将可执行程序下载到本地程序目录;
所述执行单元,其用于每隔心跳时间检查本地目录中的可执行程序是否下载完成,等到可执行程序下载完成,则执行可执行程序;其还用于每隔心跳时间检查本地目录中正在执行的可执行程序的MD5值是否发生变化,如果发生变化则表面可执行程序有更新,终止执行现有的可执行程序,启动新线程执行更新的可执行程序。
进一步,所述状态存储集群中包括若干个状态存储节点,且状态存储集群中部署有zookeeper开源软件。
附图说明
图1为本发明所述一种自动分发、运行和更新可执行程序的系统结构图;
图2为本发明所述一种自动分发、运行和更新可执行程序的方法流程图;
图3为本发明所述客户端的工作流程图;
图4为本发明所述工作节点中监听单元工作流程图;
图5为本发明所述工作节点中执行单元的工作流程图。
附图中,各标号所代表的部件列表如下:
1、客户端,2、状态存储集群,3、工作节点。
具体实施方式
以下结合附图对本发明的原理和特征进行描述,所举实例只用于解释本发明,并非用于限定本发明的范围。
数据源Spring:一个Spring是一个流数据接收单元程序,它从外部数据源读取流数据并且把它们发射到Job中
Processer:一个Processer是一个流数据处理单元程序,它接收Spring或者其他Processer发射的一个或者多个Streams,输出零个或者多个Streams
Job:一个流处理的应用封装为一个Job。一个Job是一个由数据源Spring和Processor通过流分组形成的有向无环图,Job是一次流处理计算工作的总称,包括指定业务程序和申请资源(机器数、工作进程数、业务程序执行的并行度)等信息而提交job的过程,不仅包括将上述内容提交到zookeeper中,还包括任务调度的计算,即计算某worker执行哪个程序,这个程序执行结果发送到哪个下游的程序中而当可执行程序更新时,只需要简单的提交新的可执行程序目录,或者在工作节点直接覆盖旧的程序,无需kill掉Job、回收计算资源并重新提交Job。
Client:客户端程序。主要负责向系统提交客户指令,例如,提交Job、删除Job、申请工作节点等指令。
Zookeeper:是Google的Chubby的开源实现,针对大型分布式系统的可靠协调系统,提供的功能包括:配置维护、名字服务、分布式同步、组服务等。在本系统中作为高可用性状态存储模块使用,保存其他各模块的工作状态及心跳信息。
Supervisor:工作节点运行的后台程序。主要负责监听分配给工作节点的工作进程,根据需要启动/关闭工作进程,并监听zookeeper上存储可执行程序的节点是否有新的可执行程序或更新已存在的可执行程序,如果有则下载到本地程序目录。
Worker:执行Job的工作进程。一个工作进程属于一个指定的Job,可以在Job中的每个组件(Spring或者Processor)上运行多个Task,负责执行本体程序目录中的可执行程序。
Task:由一个工作进程(Worker)产生的一个线程,执行数据处理的程序。
Scheduler:(客户端中的任务分配模块)当Worker足够时,所有Task被均匀的分配到所有机器的Worker;当Worker不足时,所有的Task分配到仅有的Worker。
Heartbeat心跳信息:各模块定期向Zookeeper发送心跳信息,其中包括当前时间各模块的工作状态信息。Master读取Zookeeper中的心跳信息判断各模块、各节点运行状态,并执行相应动作。
如图1所示,一种自动分发、运行和更新可执行程序的系统,包括客户端1、状态存储集群2和若干个工作节点3;
所述客户端1,其用于将可执行程序及相关文件所在目录打包成一个文件,存储在缓存中;并采用大文件分割及索引存储方法将缓存中的打包文件存储到状态存储集群2的相应目录中;
所述状态存储集群2,其用于以索引方式存储客户端上传的文件,还用于保存其客户端和各工作节点的工作状态及心跳信息;
所述工作节点3,其用于每隔心跳时间到状态存储集群与其相关的目录中检测索引状态,当检测到有新的索引或已有索引有更新,按照索引方式将可执行程序下载到本地目录,下载完成时,执行可执行程序。
其中,所述工作节点3中的工作节点执行单元还用于每隔心跳时间检测本地目录中正在执行的可执行程序是否有更新,如果有则终止执行现有的可执行程序,重新执行更新的可执行程序。
其中,所述工作节点中包括监听单元和执行单元;
所述监听单元,其用于监听状态存储集群中是否有客户端新上传的可执行程序,等到上传完成时,将可执行程序下载到本地程序目录;
所述执行单元,其用于每隔心跳时间检查本地目录中的可执行程序是否下载完成,等到可执行程序下载完成,则执行可执行程序;其还用于每隔心跳时间检查本地目录中正在执行的可执行程序的MD5值是否发生变化,如果发生变化则表面可执行程序有更新,终止执行现有的可执行程序,启动新线程执行更新的可执行程序。
其中,所述状态存储集群的状态存储功能采用Zookeeper实现。
如图2所示,一种自动分发、运行和更新可执行程序的方法,包括如下步骤:
步骤A:客户端将可执行程序及相关文件所在目录打包成一个文件,并存储在缓存中;
步骤B:客户端采用大文件分割及索引存储方法将缓存中的打包文件存储到状态存储集群的相应目录中;
步骤C:工作节点每隔心跳时间到状态存储集群中与其相关的目录检测索引状态,当检测到有新的索引或已有索引有更新,按照索引方式将可执行程序下载到本地目录;
步骤D:工作节点每个心跳时间到状态存储集群中与其相关的目录获取包括程序名、程序地址的程序相关信息;
步骤E:工作节点根据程序相关信息,每隔心跳时间到本地目录检测可执行程序的下载状态,直到检测到可执行程序下载完成时,启动工作进程执行可执行程序。
上述技术方案还包括:
步骤F:工作节点执行单元每隔心跳时间检查本地目录中正在执行的可执行程序;
步骤G:计算可执行程序的MD5值,当发现可执行程序的MD5值发生变化时则终止对原可执行程序的执行,启动新线程执行更新的可执行程序。
如图3所示,所述步骤B中客户端采用大文件分割及索引存储方法将缓存中的打包文件存储到状态存储集群的具体实现为:
步骤B1:判断状态存储集群中是否存在与打包文件相对应的父目录,如果存在,执行步骤B2;如果不存在,则新建父目录,执行步骤B2;
步骤B2:将打包件分割成若干个分片文件;
步骤B3:在状态存储集群中的父目录中存储包括分片文件数目、每片分片文件的大小、末尾分片文件大小在内的分片信息;
步骤B4:根据父目录中存储的分片信息创建相应数量的子目录;
步骤B5:将各分片文件存入相应的子目录中。
如图4所示,所述步骤C中工作节点从状态存储集群下载可执行程序的具体实现为(该过程是工作节点中的监听单元实现的):
步骤C1:工作节点每隔心跳时间检查状态存储集群中父目录的版本号及更新时间;
步骤C2:根据父目录的版本号是否更新且更新时间小于心跳时间,判断是否有新的可执行程序需要执行或原可执行程序需要更新,如果有则执行步骤C3;否则等待心跳时间,返回步骤C1;
步骤C3:所述工作节点根据父目录中存储的分片信息,将子目录中存储的分片文件拼接读取到工作节点的本地目录。
其中,客户端向状态存储集群上传分片文件前,要对父目录加写锁,上传完毕,解除对父目录的写锁;工作节点从状态存储集群下载可执行程序前,要对父目录加读锁,下载完毕后,解除对父目录的读锁。
对父目录加读、写锁的具体实现为:想获得锁的进程在父目录下创建临时节点,读锁的临时节点前缀设置为read+编号,写锁的前缀设置为write+编号;创建读锁的时候,检查是否有编号小于自己的写锁存在,若存在则对编号刚好小于自己的写锁节点进行监听,直到监听的写锁被撤销,便可获得读锁;创建写锁时,检查创建的临时节点编号是否为最小,如不是最小,则需要对编号刚好小于自己的读锁或写锁进行监听,直到监听的锁被撤销,便可获得写锁;撤销读锁或写锁只需删除临时节点。
如图5所示,工作节点中执行单元的工作流程如下:
步骤D1:执行单元定期从状态存储集群获取Task信息(包括程序名、程序地址、并行度和下级流水等信息);
步骤D2:查看Task信息状态,存在三种情况,情况一,有新可执行程序,执行步骤D3,有正在执行的可执行程序,执行步骤D4,无新可执行程序也无正在执行的可执行程序,执行D5;
D3:则检查本地目录,判断可执行程序是否下载完成,如果下载完成则执行可执行程序;否则等待,直至下载完成,执行可执行程序;
D4:检查正在执行的程序的MD5值,判断MD5值是否发生改变,如果改变,退出当前任务线程,启动新任务线程执行新可执行程序;如果未改变则等待心跳时间,返回步骤D1;
D5:等待心跳时间,返回步骤D1。
本实施例中,使用三台服务器作为状态存储集群(通过Zookeeper实现),负责全局状态存储并负责与其他模块通信;使用五台服务器作为工作节点,其中监听单元(Supervisor),负责监控及控制执行单元(Worker)的进程工作;使用一台服务器作为客户端(Client),负责向集群发布命令、提交Job及可执行程序等;并使用千兆网卡与交换机提供集群网络通信。
本发明通过客户端(Client)配置Job信息,使得五台工作节点中每个执行单元(Worker)进程中运行一个Task线程,Task线程中的程序为简单的控制台循环输出“hello world!”,观察每个节点程序运行情况,验证可执行程序自动分发方法,具体运行流程如下:
(一)自动分发、运行可执行程序
1.用户通过客户端(Client)配置Job信息,其中包括所需计算资源数目(Worker数)、程序执行并行度、程序间逻辑拓扑、程序所在目录等,并通过接口命令提交。
2.客户端(Client)分析Job信息,得到Worker、Task、程序等所在状态存储集群(Zookeeper)中的地址,将结果对应上传到状态存储集群(Zookeeper)中。
由于可执行程序及其相关文件可能较大,状态存储集群(Zookeeper)中单个父目录无法满足存储要求,因此需将可执行程序及其相关文件分片存储。首先,建立父目录;然后,父目录加写锁,并将大文件分片的索引信息存入父目录;最后,将分片内容存储到子目录中,接触父目录的写锁。
3.工作节点的监听单元(Supervisor)将状态存储集群(Zookeeper)中的可执行程序下载到本地,具体为:
监听单元(Supervisor)定时检查状态存储集群(Zookeeper)中父目录,发现程序上传成功后,将程序下载到本地。
下载时,先给父目录加读锁,再根据父目录中索引信息将子目录中数据拼接完整,存储到本地目录中,接触父目录的读锁。
4.工作节点的执行单元(Worker)执行下载到本地的程序,具体为:
执行单元(Worker)首先接收到Task执行信息,检查本地程序目录,如此时程序还没有下载完成,则等待心跳时间后循环检查,直到程序下载完成,启动Task线程执行下载的可执行程序。
(二)自动更新可执行程序
1.将可执行程序改为循环输出“HELLO WORLD!”,并不对Job做修改,只是将更新过的程序和程序目录打包上传到状态存储集群(Zookeeper)中(上传方法与提交Job时相同),通过客户端(Client)接口替换状态存储集群(Zookeeper)中的原程序,或直接复制替换某台工作节点中下载的本地程序,观察各工作节点输出变化,验证程序运行时更新及更新无需重新提交Job的方法。
2.监听单元(Supervisor)自动下载更新的程序,监听单元(Supervisor)定期检查状态存储集群(Zookeeper)中父目录,当发现父目录版本号及更新时间发生改变时,删除本地原始程序,更新为新版本程序(下载方法与第一次下载时相同)。
3.执行单元(Worker)自动执行更新的程序,执行单元(Worker)循环检查本地目录可执行程序,通过检查程序MD5值的变化,发现监听单元(Supervisor)下载的更新的程序,原Task线程退出,并启动新Task线程执行更新的程序。
4.也可手动替换本地目录中可执行程序,通过手动复制替换的方法,将某台工作节点的本地目录中的可执行程序更新为新的可执行程序。
执行单元(Worker)自动执行手动更新的程序,执行单元(Worker)循环检查本地目录可执行程序,通过检查程序MD5值变化,发现监听单元(Supervisor)下载的更新的程序,原Task线程退出,并启动新Task线程执行更新的程序。
运行结果如下:
第一次客户端提交Job后,各Supervisor控制台打印“hello world!”,响应时间为1.75秒;
第二次客户端更新可执行程序后,各Supervisor控制台打印“HELLOWORLD!”,响应时间为1.33秒;
第三次手动更新某Supervisor可执行程序后,其控制台打印“HELLOWORLD!”,响应时间为0.76秒,其他Supervisor运行情况不变。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种自动分发、运行和更新可执行程序的方法,其特征在于,包括如下步骤:
步骤A:客户端将可执行程序及相关文件所在目录打包成一个文件,并存储在缓存中;
步骤B:客户端采用大文件分割及索引存储方法将缓存中的打包文件存储到状态存储集群的相应目录中;
步骤C:工作节点每隔心跳时间到状态存储集群中与其相关的目录检测索引状态,当检测到有新的索引或已有索引有更新,按照索引方式将可执行程序下载到本地目录;
步骤D:工作节点每隔心跳时间到状态存储集群中与其相关的目录获取包括程序名、程序地址的程序相关信息;
步骤E:工作节点根据程序相关信息,每隔心跳时间到本地目录检测可执行程序的下载状态,直到检测到可执行程序下载完成时,启动工作进程执行可执行程序。
2.根据权利要求1所述一种自动分发、运行和更新可执行程序的方法,其特征在于,上述技术方案还包括:
步骤F:工作节点执行单元每隔心跳时间检查本地目录中正在执行的可执行程序;
步骤G:计算可执行程序的MD5值,当发现可执行程序的MD5值发生变化时则终止对原可执行程序的执行,重新执行更新的可执行程序。
3.根据权利要求1所述一种自动分发、运行和更新可执行程序的方法,其特征在于,所述步骤B中客户端采用大文件分割及索引存储方法将缓存中的打包文件存储到状态存储集群的相应目录中的具体实现为:
步骤B1:判断状态存储集群中是否存在与打包文件相对应的父目录,如果存在,执行步骤B2;如果不存在,则新建父目录,执行步骤B2;
步骤B2:将打包文件分割成若干个分片文件;
步骤B3:在状态存储集群中的父目录中存储包括分片文件数目、每片分片文件的大小、末尾分片文件大小在内的分片信息;
步骤B4:根据父目录中存储的分片信息创建相应数量的子目录;
步骤B5:将各分片文件存入相应的子目录中。
4.根据权利要求3所述一种自动分发、运行和更新可执行程序的方法,其特征在于,所述步骤C中工作节点从状态存储集群下载可执行程序的具体实现为:
步骤C1:工作节点每隔心跳时间检查状态存储集群中与其相关的父目录的版本号及更新时间;
步骤C2:根据父目录的版本号是否更新且更新时间小于心跳时间,判断是否有新的可执行程序需要执行或原可执行程序需要更新,如果有则执行步骤C3;否则等待心跳时间,返回步骤C1;
步骤C3:所述工作节点根据父目录中存储的分片信息,将子目录中存储的分片文件拼接读取到工作节点的本地目录。
5.根据权利要求4所述一种自动分发、运行和更新可执行程序的方法,其特征在于,客户端向状态存储集群上传分片文件前,要对父目录加写锁,上传完毕,解除对父目录的写锁;工作节点从状态存储集群下载可执行程序前,要对父目录加读锁,下载完毕后,解除对父目录的读锁。
6.根据权利要求5所述一种自动分发、运行和更新可执行程序的方法,其特征在于,对父目录加读、写锁的具体实现为:
想获得锁的进程在父目录下创建临时节点,读锁的临时节点前缀设置为read+编号,写锁的前缀设置为write+编号;
创建读锁的时候,检查是否有编号小于自己的写锁存在,若存在则对编号刚好小于自己的写锁节点进行监听,直到监听的写锁被撤销,便可获得读锁;
创建写锁时,检查创建的临时节点编号是否为最小,如不是最小,则需要对编号刚好小于自己的读锁或写锁进行监听,直到监听的锁被撤销,便可获得写锁;
撤销读锁或写锁只需删除临时节点。
7.一种自动分发、运行和更新可执行程序的系统,其特征在于,包括客户端、状态存储集群和若干个工作节点;
所述客户端,其用于将可执行程序及相关文件所在目录打包成一个文件,存储在缓存中;并采用大文件分割及索引存储方法将缓存中的打包文件存储到状态存储集群的相应目录中;
所述状态存储集群,其用于以索引方式存储客户端上传的文件,还用于保存其客户端和各工作节点的工作状态及心跳信息;
所述工作节点,其用于每隔心跳时间到状态存储集群检测索引状态,当检测到有新的索引或已有索引有更新,按照索引方式将可执行程序下载到本地目录,下载完成时,启动工作进程执行可执行程序。
8.根据权利要求7所述一种自动分发、运行和更新可执行程序的系统,其特征在于,所述工作节点执行单元用于每隔心跳时间检测本地目录中正在执行的可执行程序是否有更新,如果有则终止执行现有的可执行程序,重新执行更新的可执行程序。
9.根据权利要求7所述一种自动分发、运行和更新可执行程序的系统,其特征在于,所述工作节点中包括监听单元和执行单元;
所述监听单元,其用于监听状态存储集群中是否有新上传的可执行程序,等到上传完成时,将可执行程序下载到本地程序目录;
所述执行单元,其用于每隔心跳时间检查本地目录中的可执行程序是否下载完成,等到可执行程序下载完成,则执行可执行程序;其还用于每隔心跳时间检查本地目录中正在执行的可执行程序的MD5值是否发生变化,如果发生变化则表面可执行程序有更新,终止执行现有的可执行程序,启动新线程执行更新的可执行程序。
10.根据权利要求7所述一种自动分发、运行和更新可执行程序的系统,其特征在于,所述状态存储集群中包括若干个状态存储节点,且状态存储集群中部署有zookeeper开源软件。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2013103859722A CN103473287A (zh) | 2013-08-30 | 2013-08-30 | 一种自动分发、运行和更新可执行程序的方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2013103859722A CN103473287A (zh) | 2013-08-30 | 2013-08-30 | 一种自动分发、运行和更新可执行程序的方法及系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN103473287A true CN103473287A (zh) | 2013-12-25 |
Family
ID=49798135
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2013103859722A Pending CN103473287A (zh) | 2013-08-30 | 2013-08-30 | 一种自动分发、运行和更新可执行程序的方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103473287A (zh) |
Cited By (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105204972A (zh) * | 2015-09-09 | 2015-12-30 | 北京思特奇信息技术股份有限公司 | 一种可执行程序统一发布及管理的方法及系统 |
CN106067886A (zh) * | 2016-08-03 | 2016-11-02 | 广州唯品会信息科技有限公司 | 安全策略更新方法及系统 |
CN106254346A (zh) * | 2016-08-03 | 2016-12-21 | 广州唯品会信息科技有限公司 | 安全策略更新方法及系统 |
CN106371912A (zh) * | 2015-07-21 | 2017-02-01 | 阿里巴巴集团控股有限公司 | 一种流式计算系统的资源调度方法和装置 |
CN106570113A (zh) * | 2016-10-25 | 2017-04-19 | 中国电力科学研究院 | 一种海量矢量切片数据云存储方法及系统 |
CN107423122A (zh) * | 2017-07-25 | 2017-12-01 | 苏州博纳讯动软件有限公司 | 一种复杂运维作业编排与调度系统及其方法 |
CN107423121A (zh) * | 2017-05-02 | 2017-12-01 | 千寻位置网络有限公司 | Gnss精密后处理任务的调度系统及方法 |
CN108388474A (zh) * | 2018-02-06 | 2018-08-10 | 北京易沃特科技有限公司 | 基于dag的智能分布式计算管理系统及方法 |
CN108595166A (zh) * | 2018-05-09 | 2018-09-28 | 中国科学院计算技术研究所 | 一种分布式物联网应用执行引擎实现方法及系统 |
CN109783201A (zh) * | 2017-11-13 | 2019-05-21 | 北京京东尚科信息技术有限公司 | 数据交换方法及其系统 |
CN110175677A (zh) * | 2019-04-16 | 2019-08-27 | 平安普惠企业管理有限公司 | 自动更新方法、装置、计算机设备及存储介质 |
CN110618996A (zh) * | 2019-08-07 | 2019-12-27 | 北京东方国信科技股份有限公司 | 一种应用于分布式数据库的函数库热更新方法 |
CN111258726A (zh) * | 2018-11-30 | 2020-06-09 | 北京京东尚科信息技术有限公司 | 任务调度方法和装置 |
CN111737018A (zh) * | 2020-08-26 | 2020-10-02 | 腾讯科技(深圳)有限公司 | ZooKeeper配置文件存储处理方法、装置、设备及其介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060179059A1 (en) * | 2005-02-07 | 2006-08-10 | International Business Machines Corporation | Cluster monitoring system with content-based event routing |
CN101615175A (zh) * | 2009-08-11 | 2009-12-30 | 深圳市五巨科技有限公司 | 一种读取移动终端电子书的系统和方法 |
CN101719073A (zh) * | 2009-11-20 | 2010-06-02 | 浪潮集团山东通用软件有限公司 | 一种基于智能客户端的按需下载实现方法 |
-
2013
- 2013-08-30 CN CN2013103859722A patent/CN103473287A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060179059A1 (en) * | 2005-02-07 | 2006-08-10 | International Business Machines Corporation | Cluster monitoring system with content-based event routing |
CN101615175A (zh) * | 2009-08-11 | 2009-12-30 | 深圳市五巨科技有限公司 | 一种读取移动终端电子书的系统和方法 |
CN101719073A (zh) * | 2009-11-20 | 2010-06-02 | 浪潮集团山东通用软件有限公司 | 一种基于智能客户端的按需下载实现方法 |
Non-Patent Citations (1)
Title |
---|
刘钊: "《云同步中文件分割算法的研究与实现》", 《中国优秀硕士学位论文全文数据库信息科技辑》 * |
Cited By (23)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106371912A (zh) * | 2015-07-21 | 2017-02-01 | 阿里巴巴集团控股有限公司 | 一种流式计算系统的资源调度方法和装置 |
CN106371912B (zh) * | 2015-07-21 | 2019-11-26 | 阿里巴巴集团控股有限公司 | 一种流式计算系统的资源调度方法和装置 |
CN105204972A (zh) * | 2015-09-09 | 2015-12-30 | 北京思特奇信息技术股份有限公司 | 一种可执行程序统一发布及管理的方法及系统 |
CN106254346B (zh) * | 2016-08-03 | 2019-04-19 | 广州品唯软件有限公司 | 安全策略更新方法及系统 |
CN106254346A (zh) * | 2016-08-03 | 2016-12-21 | 广州唯品会信息科技有限公司 | 安全策略更新方法及系统 |
CN106067886A (zh) * | 2016-08-03 | 2016-11-02 | 广州唯品会信息科技有限公司 | 安全策略更新方法及系统 |
CN106067886B (zh) * | 2016-08-03 | 2019-06-14 | 广州品唯软件有限公司 | 安全策略更新方法及系统 |
CN106570113A (zh) * | 2016-10-25 | 2017-04-19 | 中国电力科学研究院 | 一种海量矢量切片数据云存储方法及系统 |
CN106570113B (zh) * | 2016-10-25 | 2022-04-01 | 中国电力科学研究院 | 一种海量矢量切片数据云存储方法及系统 |
CN107423121A (zh) * | 2017-05-02 | 2017-12-01 | 千寻位置网络有限公司 | Gnss精密后处理任务的调度系统及方法 |
CN107423121B (zh) * | 2017-05-02 | 2020-12-01 | 千寻位置网络有限公司 | Gnss精密后处理任务的调度系统及方法 |
CN107423122A (zh) * | 2017-07-25 | 2017-12-01 | 苏州博纳讯动软件有限公司 | 一种复杂运维作业编排与调度系统及其方法 |
CN107423122B (zh) * | 2017-07-25 | 2020-08-18 | 苏州博纳讯动软件有限公司 | 一种复杂运维作业编排与调度系统及其方法 |
CN109783201A (zh) * | 2017-11-13 | 2019-05-21 | 北京京东尚科信息技术有限公司 | 数据交换方法及其系统 |
CN108388474A (zh) * | 2018-02-06 | 2018-08-10 | 北京易沃特科技有限公司 | 基于dag的智能分布式计算管理系统及方法 |
CN108595166A (zh) * | 2018-05-09 | 2018-09-28 | 中国科学院计算技术研究所 | 一种分布式物联网应用执行引擎实现方法及系统 |
CN108595166B (zh) * | 2018-05-09 | 2020-12-11 | 中国科学院计算技术研究所 | 一种分布式物联网应用执行引擎实现方法及系统 |
CN111258726A (zh) * | 2018-11-30 | 2020-06-09 | 北京京东尚科信息技术有限公司 | 任务调度方法和装置 |
CN111258726B (zh) * | 2018-11-30 | 2023-09-22 | 北京京东尚科信息技术有限公司 | 任务调度方法和装置 |
CN110175677A (zh) * | 2019-04-16 | 2019-08-27 | 平安普惠企业管理有限公司 | 自动更新方法、装置、计算机设备及存储介质 |
CN110618996A (zh) * | 2019-08-07 | 2019-12-27 | 北京东方国信科技股份有限公司 | 一种应用于分布式数据库的函数库热更新方法 |
CN110618996B (zh) * | 2019-08-07 | 2023-08-22 | 北京东方国信科技股份有限公司 | 一种应用于分布式数据库的函数库热更新方法 |
CN111737018A (zh) * | 2020-08-26 | 2020-10-02 | 腾讯科技(深圳)有限公司 | ZooKeeper配置文件存储处理方法、装置、设备及其介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103473287A (zh) | 一种自动分发、运行和更新可执行程序的方法及系统 | |
US11314698B2 (en) | Dynamically performing data processing in a data pipeline system | |
US11016944B2 (en) | Transferring objects between different storage devices based on timestamps | |
US10585691B2 (en) | Distribution system, computer, and arrangement method for virtual machine | |
US9244983B2 (en) | Platform for continuous graph update and computation | |
US9489443B1 (en) | Scheduling of splits and moves of database partitions | |
US20190065241A1 (en) | Orchestration service for multi-step recipe composition with flexible, topology-aware, and massive parallel execution | |
US20160048408A1 (en) | Replication of virtualized infrastructure within distributed computing environments | |
CN110825420B (zh) | 分布式集群的配置参数更新方法、装置、设备及存储介质 | |
US10922303B1 (en) | Early detection of corrupt data partition exports | |
CN103581332A (zh) | HDFS架构及HDFS架构中NameNode节点的压力分解方法 | |
US10747643B2 (en) | System for debugging a client synchronization service | |
CN110019138A (zh) | 一种基于Zabbix的传输表空间自动迁移方法和系统 | |
JP2017091533A (ja) | 製品ライフサイクル管理(plm)システムとソースコード管理(scm)システムとの間のデータの双方向同期 | |
CN110347385A (zh) | 一种分布式web静态资源共享的方法及系统 | |
Memishi et al. | Fault tolerance in MapReduce: A survey | |
JP2017091531A (ja) | ソースコード管理(scm)システムから製品ライフサイクル管理(plm)システムへの階層的なデータのエクスポート | |
US10970193B2 (en) | Debugging a client synchronization service | |
CN107465709B (zh) | 分布式镜像构建任务方法及装置、系统 | |
Abbes et al. | Dynamic replication factor model for Linux containers-based cloud systems | |
US20210397599A1 (en) | Techniques for generating a consistent view of an eventually consistent database | |
US11329930B2 (en) | Generating scenarios for automated execution of resources in a cloud computing environment | |
CN114065724A (zh) | 用于元数据比较的方法、设备和计算机程序产品 | |
Ren et al. | Application Massive Data Processing Platform for Smart Manufacturing Based on Optimization of Data Storage | |
US11330079B2 (en) | Environment for developing of distributed multicloud applications |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20131225 |
|
RJ01 | Rejection of invention patent application after publication |