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