发明内容
本发明的主要目的在于提供一种实时系统更新方法及装置,以解决实时系统更新时存在数据丢失的问题。
为了实现上述目的,根据本发明的一个方面,提供了一种实时系统更新方法。
实时系统包括第一节点,第一节点包含多个实例,根据本发明的实时系统更新方法包括:检测第一节点的守护进程的配置文件是否发生更新,其中,第一节点的守护进程用于启动第一节点的实例,第一节点的守护进程的配置文件中配置有第一节点的多个实例中需要启动的实例;在检测到配置文件发生更新时,加载更新后的配置文件;以及根据更新后的配置文件启动第一节点的实例。
进一步地,检测第一节点的守护进程的配置文件是否发生更新包括:检测第一节点的守护进程的配置文件是否发生修改;如果检测出第一节点的守护进程的配置文件发生修改,则确定第一节点的守护进程的配置文件发生更新;以及如果检测出第一节点的守护进程的配置文件未发生修改,则确定第一节点的守护进程的配置文件未发生更新。
进一步地,实时系统还包括第二节点,第二节点用于存储实时系统中的实例相关的数据,在检测到配置文件发生更新时,加载更新后的配置文件之后,方法包括:从更新后的配置文件中获取新增加的实例和删除的实例;在第二节点中存储与新增加的实例相关的数据;以及从第二节点中删除与删除的实例相关的数据。
进一步地,从更新后的配置文件中获取新增加的实例和删除的实例包括:获取更新前的配置文件中的实例集合,得到第一实例集合;获取更新后的配置文件中的实例集合,得到第二实例集合;以及根据第一实例集合和第二实例集合得到新增加的实例和删除的实例。
进一步地,在第二节点中存储与新增加的实例相关的数据包括:调用第二节点的第一预设操作,其中,第一预设操作用于存储数据至第二节点中;以及通过执行第一预设操作在预设字典中存储新增加的实例相关的数据,其中,预设字典用于存储实时系统的实例相关的数据,预设字典包含标识列和属性值列,标识列用于存储实例的编号,属性值列用于存储实例相关的数据。
进一步地,在通过执行第一预设操作在预设字典中存储新增加的实例相关的数据之后,该方法还包括:为新增加的实例中的每一个实例创建对应的存储文件;以及将新增加的实例相关的数据存储至对应的存储文件中。
进一步地,从第二节点中删除与删除的实例相关的数据包括:调用第二节点的第二预设操作,其中,第二预设操作用于从第二节点中删除预先存储的数据;以及通过执行第二预设操作从第二节点中删除与删除的实例相关的数据。
为了实现上述目的,根据本发明的另一方面,提供了一种实时系统更新装置。
实时系统包括第一节点,第一节点包含多个实例,根据本发明的实时系统更新装置包括:检测单元,用于检测第一节点的守护进程的配置文件是否发生更新,其中,第一节点的守护进程用于启动第一节点的实例,第一节点的守护进程的配置文件中配置有第一节点的多个实例中需要启动的实例;加载单元,用于在检测到配置文件发生更新时,加载更新后的配置文件;以及启动单元,用于根据更新后的配置文件启动第一节点的实例。
进一步地,检测单元包括:检测模块,用于检测第一节点的守护进程的配置文件是否发生修改;以及确定模块,用于在检测出第一节点的守护进程的配置文件发生修改时,确定第一节点的守护进程的配置文件发生更新,在检测出第一节点的守护进程的配置文件未发生修改时,确定第一节点的守护进程的配置文件未发生更新。
进一步地,实时系统还包括第二节点,第二节点用于存储实时系统中的实例相关的数据,装置包括:获取单元,用于从更新后的配置文件中获取新增加的实例和删除的实例;存储单元,用于在第二节点中存储与新增加的实例相关的数据;以及删除单元,用于从第二节点中删除与删除的实例相关的数据。
通过本发明,采用实时检测第一节点的守护进程的配置文件的变化,在检测到配置文件发生更新时,加载更新后的配置文件,并根据更新后的配置文件启动第一节点的实例,实现了在实时系统更新过程中无需停掉整个实时系统,解决了实时系统更新时存在数据丢失的问题,进而达到了减少实时系统更新时数据丢失的效果。
具体实施方式
需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本发明。
为了使本技术领域的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分的实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。
需要说明的是,本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
根据本发明实施例,提供了一种实时系统更新方法,图2是根据本发明实施例的实时系统更新方法的流程图。
该实时系统包括第一节点,第一节点包含多个实例,如图2所示,该实时系统更新方法包括如下的步骤S202至步骤S206:
步骤S202:检测第一节点的守护进程的配置文件是否发生更新,其中,第一节点的守护进程用于启动第一节点的实例,第一节点的守护进程的配置文件中配置有第一节点的多个实例中需要启动的实例。
第一节点可以是实时系统中任意接收数据的节点,例如,计算节点、中心节点等。第一节点包含多个实例,其中,实例可以是第一节点的进程。第一节点的多个实例可以全部同时运行,也可以部分同时运行,用户可以根据实时系统的数据处理量来设定。第一节点的守护进程可以根据该守护进程的配置文件启动第一节点的实例,还可以监控正在运行的实例,当实例停止运行时重新启动实例。守护进程的配置文件中配置有需要启动的实例集合,具体地,在该守护进程的配置文件中包含需要启动的实例的编号和每个实例使用的程序文件路径,实例的编号用于唯一的表示实例,实例使用的程序文件路径是指实例使用的程序文件的存储位置,实例使用的程序文件可以是可执行文件,守护进程通过该程序文件启动对应的实例。
可选地,检测第一节点的守护进程的配置文件是否发生更新包括:检测第一节点的守护进程的配置文件是否发生修改;如果检测出第一节点的守护进程的配置文件发生修改,则确定第一节点的守护进程的配置文件发生更新;以及如果检测出第一节点的守护进程的配置文件未发生修改,则确定第一节点的守护进程的配置文件未发生更新。
守护进程的配置文件的修改可以是从配置文件中删除了实例,也可以是在配置文件中添加了实例,也可以是更改了配置文件中实例使用的程序文件路径,等等。在检测到配置文件发生上述修改后,说明守护进程的配置文件发生了更新,如果没有检测到上述修改,则说明守护进程的配置文件没有发生更新。
步骤S204:在检测到配置文件发生更新时,加载更新后的配置文件。
步骤S206:根据更新后的配置文件启动第一节点的实例。
当守护进程的配置文件的更新仅为在配置文件中添加新的实例或是更改了实例使用的程序文件路径,可以直接根据更新后的配置文件启动第一节点的实例。当守护进程的配置文件的更新包括从配置文件中删除实例时,在守护进程的配置文件更新前预先需要修改实时系统中向第一节点发送数据的节点的目标地址,使得该发送数据的节点不再向将从第一节点的守护进程的配置文件中删除的实例发送数据。具体地,以第一节点为中心节点、向第一节点发送数据的节点为计算节点为例进行说明。在更新中心节点的守护进程的配置文件之前,预先修改计算节点的配置文件,其中,计算节点的配置文件中配置有计算节点的实例发送数据的目标地址,该目标地址为中心节点中运行的实例的地址。将中心节点中将要停止运行的实例的地址从计算节点的配置文件中删除,其中,中心节点中将要停止运行的实例即为将要从中心节点的守护进程的配置文件中删除的实例。计算节点实例监测到计算节点的配置文件变化后,加载计算节点最新的配置文件,从而不再向这些将要停止运行的实例发送数据。完成上述操作时,再修改中心节点的守护进程的配置文件,并加载中心节点的守护进程最新的配置文件,并根据最新的配置文件启动中心节点的实例。由于在中心节点的守护进程的配置文件的更新过程中,中心节点始终存在实例运行,相比于现有技术中必须停掉整个实时系统,减少了数据的丢失。通过配合上述计算节点的配置文件的修改,可以完全避免由于实时系统更新造成的数据丢失的问题。
本发明实施例通过检测第一节点的守护进程的配置文件是否发生更新,在检测到配置文件发生更新时,加载更新后的配置文件,并根据更新后的配置文件启动第一节点的实例。本发明实施例通过实时监测第一节点的守护进程的配置文件,实现了在实时系统更新过程中无需停掉整个系统,从而避免了由于实时系统更新导致的数据丢失的问题,解决了相关技术中实时系统更新时存在数据丢失的问题。
优选地,实时系统还包括第二节点,第二节点用于存储实时系统中的实例相关的数据,在检测到配置文件发生更新时,加载更新后的配置文件之后,该方法包括:从更新后的配置文件中获取新增加的实例和删除的实例;在第二节点中存储与新增加的实例相关的数据;以及从第二节点中删除与删除的实例相关的数据。
第二节点用于存储实时系统中的实例的相关数据,实例相关的数据包括实例处理的数据和实例运行的状态数据。用户可以根据需要设置实时系统中需要存储数据的实例,如图3所示,实时系统包括请求转发节点、计算节点、中心节点、查询节点和存储节点,存储节点用于存储计算节点的实例相关的数据和中心节点的实例的相关数据。
具体地,第二节点也包含多个实例和守护进程,通过第二节点的守护进程启动第二节点的实例。第二节点的实例启动时使用第二节点的实例的编号作为名称创建一个目录,该目录下包含多个存储文件,每个存储文件用于存储一个实例相关的数,可选的,可以用需要存储数据的实例的编号命名存储文件,在该实例第一次存储数据至第二节点时创建存储文件,并将实例相关的数据存储至对应的存储文件中。第二节点预先定义了一个字典,该预设字典采用键值(KeyValue)的存储方式,即包含标识和属性值两列,在本发明实施例中,标识列用于存储实例的编号,属性值列用于存储实例相关的数据。此外,该第二节点还预设了如下四种数据操作:
数据存储操作,例如,Put函数,参数为实例的编号、数据集合,无返回值。该操作首先检查实例的编号在该预设字典中是否存在,如果该实例的编号不存在于预设字典中时,在预设字典中新加一项,Key为实例的编号,Value为空集合;如果该实例的编号存在于预设字典中时,根据该实例的编号,获取这个实例的已有数据集合,将新数据集合添加到已有数据集合中。在完成向预设字典中存储实例的数据后,继续将实例的数据存储至这个实例对应的存储文件中,如果该实例不存在对应的存储文件时,先创建该实例对应的存储文件。
数据读取操作,例如,Get函数,参数为实例的编号,返回该实例在第二节点中存储的数据。该操作用于根据实例的编号从预设字典中查找该实例对应的数据。
删除实例操作,例如,DeleteInstance函数,参数为实例的编号、无返回值。该操作用于从预设字典中移除该实例的数据,并将对应的存储文件删除。
删除数据操作,例如,DeleteData函数,参数为实例的编号、要删除的数据集合,无返回值。该操作用于从预设字典中查找该实例的数据集合,将要删除的数据集合从预设字典中删除。
实时系统中所有需要保存数据的实例都配备第二节点实例,保存数据时调用第二节点中的数据存储操作将数据保存到第二节点中。由于第二节点仅实现非常简单的数据存取逻辑,几乎不会变化,因此,每次发布新的实时系统时,第二节点都不需要重新发布。此外,第二节点的实例每次启动时,根据该第二节点的实例的编号,检查是否包含对应的目录,如果包含的话,读取目录中的存储文件的内容到预设字典中,从而保证预设字典中的数据不丢失。通过第二节点实时保存实时系统中的实例相关的数据,保证实时系统的实例停止运行后实例相关的数据不会丢失。
本发明实施例在检测到配置文件发生更新时,加载更新后的配置文件之后,获取新增加的实例和删除的实例,其中,新增加的实例是指在不存在于原配置文件中却存在于更新后的配置文件中的实例,删除的实例是指存在于原配置文件中却不存在于更新后的配置文件中的实例。可选地,从更新后的配置文件中获取新增加的实例和删除的实例包括:获取更新前的配置文件中的实例集合,得到第一实例集合;获取更新后的配置文件中的实例集合,得到第二实例集合;以及根据第一实例集合和第二实例集合得到新增加的实例和删除的实例。
第一实例集合是指原配置文件中需要启动的第一节点的实例的集合,第二实例集合是指更新后的配置文件中需要启动的第一节点的实例的集合。具体地,可以将第一实例集合中的每一个实例分别和第二实例集合中的每一个实例比较,如果两个实例的编号和使用的程序文件路径均相同,则说明是同一个实例,其他情况则为不相同的实例。那些存在于第一实例集合且不存在于第二实例集合中的实例即为删除的实例,那些不存在于第一实例集合且存在于第二实例集合的实例即为新增加的实例。
为了实时的保存第一节点的实例相关的数据,在第二节点中存储与新增加的实例相关的数据,优选地,在第二节点中存储与新增加的实例相关的数据包括:调用第二节点的第一预设操作,其中,第一预设操作用于存储数据至第二节点中;以及通过执行第一预设操作在预设字典中存储新增加的实例相关的数据,其中,预设字典用于存储实时系统的实例相关的数据,预设字典包含标识列和属性值列,标识列用于存储实例的编号,属性值列用于存储实例相关的数据。
第一预设操作用于存储实例相关的数据至第二节点中,可以是上述数据存储操作。当新增加的实例启动运行后,会调用第一预设操作,通过执行第一预设操作将该实例相关的数据存储至第二节点,具体地,将新增加的实例相关的数据存储至预设字典中,该预设字典如上所述,采用键值(KeyValue)的存储方式,标识列和属性值列,标识列用于存储实例的编号,用于唯一的识别实例,属性值列用于存储实例相关的数据。通过实例的编号可以从预设字典中查找到该实例相关的数据。通过将实时系统的实例相关的数据实时的存储至预设字典中,保证实时系统的实例停止运行后实例相关的数据不会丢失。例如,一个用于实时处理网站的访问数据的实时系统,现有技术中仅能够保存该网站的访问次数在时间维度的数据,例如,仅保存在各个时刻该网站的访问次数,而无法提供更多维度的数据,例如,不同浏览器访问该网站的次数,对于其他维度的数据,在实时系统的实例停止运行后就会丢失,本发明实施例可以将实时系统的实例相关的数据存储于第二节点中,从而可以避免实例停止运行后产生数据丢失的问题。
优选地,在通过执行第一预设操作在预设字典中存储新增加的实例相关的数据之后,该方法还包括:为新增加的实例中的每一个实例创建对应的存储文件;以及将新增加的实例相关的数据存储至对应的存储文件中。
为了进一步避免由于第二节点的实例停止运行导致第二节点存储的数据丢失,将新增加的实例中的每一个实例创建对应的存储文件,为了方便查找,可以将存储文件命名为需要存储数据的实例的编号,并将新增加的实例相关的数据存储至对应的存储文件中,该存储文件可以位于磁盘文件中。如上所述,在第二节点的实例每次启动时,根据该第二节点的实例的编号,检查是否包含对应的目录,如果包含的话,读取目录中的存储文件的内容到预设字典中,从而保证预设字典中的数据不丢失。
为了减少内存的占用,可以从第二节点中删除与删除的实例相关的数据。优选地,从第二节点中删除与删除的实例相关的数据包括:调用第二节点的第二预设操作,其中,第二预设操作用于从第二节点中删除预先存储的数据;以及通过执行第二预设操作从第二节点中删除与删除的实例相关的数据。
第二预设操作用于从第二节点中删除预先存储的实例相关的数据,可以是上述删除实例操作,也可以是上述删除数据操作。通过执行第二预设操作从第二节点中删除与删除的实例相关的数据,一方面可以减少第二节点内存的占用量,另一方面,由于数据量的减少,便于从第二节点中查找其他实例相关的数据,提高查找效率。
具体地,以图3所示的实时系统为例说明本发明实施例的实时系统更新方法。
实时系统更新包括两个方面,一是节点的实例的程序文件的更新,二是节点的性能瓶颈,需要在节点的守护进程的配置文件中添加新实例的更新。
对于第一种情况,实时系统按照中心节点、计算节点、请求转发节点、查询节点的顺序依次更新各个节点。如果某个节点不存在更新,则直接跳过。以下以中心节点为例进行说明:
步骤一:修改计算节点的配置文件,将多个中心节点实例从计算节点配置文件中删除,计算节点实例监听到配置文件变化后,加载最新配置文件后,就不再向删除的中心节点的实例发送数据。
步骤二:修改中心节点的守护进程的配置文件,将不在接收数据的实例的程序文件地址修改为最新地址,当守护进程监听到配置文件变化后,重新加载更新后的配置文件。中心节点中不再接收数据的实例都使用最新程序启动,这些实例已经被更新,同时这些实例使用的还是相同的编号,因此通过存储节点实例,依然可以查到之前存储的数据,保证数据不会丢失,但是目前这些更新后的实例仍不会接收到任何数据。
步骤三:再次修改计算节点的配置文件,将中心节点中已经更新的实例重新添加到计算节点的配置文件中,而将中心节点中之前没有更新的实例从计算节点的配置文件中删除,此时计算节点实例监听到配置文件变化,加载最新配置文件后,将向中心节点中已经更新的实例发送数据,并且不再向中心节点中没有更新的实例发送数据。
步骤四:再次修改中心节点的守护进程的配置文件,将没有更新的实例的程序文件地址修改为最新地址,当守护进程监听到配置文件变化后,重新加载最新的配置文件,实现之前未更新的实例的更新,并且由于实例的编号不变,从而实例相关的数据不会丢失。
通过上述四个步骤即可实现中心节点全部实例的更新。对于请求转发节点和查询节点来说,这些节点的实例不会作为发送数据的目标实例,因此,可以直接更新。
对于第二种情况,即实时系统的节点遇到性能瓶颈,需要添加实例,此时可以按照如下方式添加新实例:
首先修改该节点对应的守护进程的配置文件,添加新实例,当守护进程监听到配置文件变化后,加载最新配置文件,并启动新增加的实例。其次,如果更新的实例是发送数据的目标实例的话,修改发送数据的节点的配置文件,添加上述新增加的实例作为目标实例,当发送数据的节点监听到配置文件变化后,加载更新后的配置文件,并向这些新增加的实例发送数据;如果新增加的实例不是发送数据的目标实例,则无需执行第二个步骤。
本发明实施例在每次更新实时系统时,在保证存储节点不进行升级时,实时系统所有其他节点的更新都不会影响实时系统的数据处理,而存储节点只提供了非常简单的数据存取功能,一次发布后就不需要再次发布,从而可以保证实时系统更新过程中不会出现数据缺失,真正做到实时系统的无缝发布。此外,实时系统中所有实例都监听配置文件变化话,一旦配置文件发送变化,加载新的配置,这样修改配置后,数据被发送到新的实例。实时系统的所有守护进程监听守护进程的配置文件的变化,一旦配置文件发生变化,加载新的配置。从而,本发明实施例可以在实时系统运行时,根据线上运行状况,动态调整各个节点的实例,而不影响整个实时系统的数据处理。
从以上的描述中,可以看出,本发明实现了如下技术效果:
本发明实施例通过检测第一节点的守护进程的配置文件是否发生更新,在检测到配置文件发生更新时,加载更新后的配置文件,并根据更新后的配置文件启动第一节点的实例。本发明实施例通过实时监测第一节点的守护进程的配置文件,实现了在实时系统更新过程中无需停掉整个系统,从而避免了由于实时系统更新导致的数据丢失的问题,解决了相关技术中实时系统更新时存在数据丢失的问题。此外,通过将第一节点的实例相关的数据实时的存储至第二节点中,从而可以避免实例停止运行后导致该实例相关的数据丢失的问题。
需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
根据本发明实施例的另一方面,提供了一种实时系统更新装置,该实时系统更新装置可以用于执行本发明实施例的实时系统更新方法,本发明实施例的实时系统更新方法也可以通过本发明实施例的实时系统更新装置来执行。
该实时系统包括第一节点,第一节点包含多个实例,如图4所示,该实时系统更新装置包括:
检测单元10,用于检测第一节点的守护进程的配置文件是否发生更新,其中,第一节点的守护进程用于启动第一节点的实例,第一节点的守护进程的配置文件中配置有第一节点的多个实例中需要启动的实例。
第一节点可以是实时系统中任意接收数据的节点,例如,计算节点、中心节点等。第一节点包含多个实例,其中,实例可以是第一节点的进程。第一节点的多个实例可以全部同时运行,也可以部分同时运行,用户可以根据实时系统的数据处理量来设定。
可选地,检测单元10包括:检测模块,用于检测第一节点的守护进程的配置文件是否发生修改;以及确定模块,用于在检测出第一节点的守护进程的配置文件发生修改时,确定第一节点的守护进程的配置文件发生更新,在检测出第一节点的守护进程的配置文件未发生修改时,确定第一节点的守护进程的配置文件未发生更新。
加载单元20,用于在检测到配置文件发生更新时,加载更新后的配置文件。。
启动单元30,用于根据更新后的配置文件启动第一节点的实例。
当守护进程的配置文件的更新仅为在配置文件中添加新的实例或是更改了实例使用的程序文件路径,可以直接根据更新后的配置文件启动第一节点的实例。当守护进程的配置文件的更新包括从配置文件中删除实例时,在守护进程的配置文件更新前预先需要修改实时系统中向第一节点发送数据的节点的目标地址,使得该发送数据的节点不再向将从第一节点的守护进程的配置文件中删除的实例发送数据。
本发明实施例通过检测单元10检测第一节点的守护进程的配置文件是否发生更新,加载单元20在检测到配置文件发生更新时,加载更新后的配置文件,启动单元30根据更新后的配置文件启动第一节点的实例。本发明实施例通过实时监测第一节点的守护进程的配置文件,实现了在实时系统更新过程中无需停掉整个系统,从而避免了由于实时系统更新导致的数据丢失的问题,解决了相关技术中实时系统更新时存在数据丢失的问题。
优选地,实时系统还包括第二节点,第二节点用于存储实时系统中的实例相关的数据,该装置包括:获取单元,用于从更新后的配置文件中获取新增加的实例和删除的实例;存储单元,用于在第二节点中存储与新增加的实例相关的数据;以及删除单元,用于从第二节点中删除与删除的实例相关的数据。
第二节点用于存储实时系统中的实例的相关数据,实例相关的数据包括实例处理的数据和实例运行的状态数据。实时系统中所有需要保存数据的实例都配备第二节点实例,保存数据时调用第二节点中的数据存储操作将数据保存到第二节点中。由于第二节点仅实现非常简单的数据存取逻辑,几乎不会变化,因此,每次发布新的实时系统时,第二节点都不需要重新发布。通过第二节点实时保存实时系统中的实例相关的数据,保证实时系统的实例停止运行后实例相关的数据不会丢失。
显然,本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。