动态升级程序的方法

文档序号:6651173阅读:129来源:国知局
专利名称:动态升级程序的方法
技术领域
本发明涉及一种程序升级方法,特别是一种可令服务程序在运行过程中进行升级的动态升级程序的方法。
背景技术
目前,在一些关键性行业的关键业务的运行中,服务器端运行的服务程序通常需要7×24小时不间断运行。这些服务程序往往是由不同的功能组件组合起来的,每个功能组件通常会做成动态链接库的形式。动态链接库(DynamicLink Library,缩写为DLL)是一种作为共享函数库的可执行文件,它使程序可以存取不属于本身可执行代码中的函数。函数的可执行代码位于一个独立的动态链接库文件中,这样可以节省内存和磁盘的存储空间,同时使程序更易于升级。当某一个或几个功能组件需要升级的时候,一般的方法是先将服务程序停掉,并用新的动态链接库手动替换掉需要升级的动态链接库,然后再次启动服务程序,这样就完成了对服务程序的功能组件的升级。
但是这种现有的升级方法存在缺陷,那就是往往这些服务程序是不能间断运行的,如果为了升级而暂时停掉服务程序,很可能会给用户造成严重的损失。

发明内容
本发明所要解决的主要问题在于提供一种动态升级程序的方法,用以当服务器端运行的服务程序处于运行过程中时,对服务程序的功能组件所属的动态链接库进行升级。
为了实现上述目的,本发明所提供的第一种动态升级程序的方法,包含以下步骤在服务器内建立并存储一动态链接库的信息表,用以记录并维护服务程序的多个动态链接库升级所需的相关信息;服务器利用动态链接库的信息表,采取多种方式获取需要升级的动态链接库的相关信息;服务器暂停对需要升级的动态链接库的存取请求,并等待已运行的对动态链接库的存取结束;当所有对动态链接库的存取结束后,卸载动态链接库,并加载动态链接库的新版动态链接库;以及更新动态链接库的信息表,并接受对新版动态链接库的存取请求。
本发明所提供的第二种动态升级程序的方法,包含以下步骤在服务器内建立并存储一动态链接库的信息表,用以记录并维护服务程序的多个动态链接库升级所需的相关信息;服务器利用动态链接库的信息表,采取多种方式获取需要升级的动态链接库的相关信息;服务器加载需要升级的动态链接库的新版动态链接库,并将加载之后对旧版动态链接库的所有存取请求,均发送至新版动态链接库,且监测已运行的对旧版动态链接库的存取是否结束;以及当所有对旧版动态链接库的存取结束后,卸载旧版动态链接库,并更新动态链接库的信息表。
上述本发明的两种动态升级程序的方法中,动态链接库的信息表所记录的服务程序的多个动态链接库升级所需的相关信息包含每一动态链接库的名称、版本信息及位置信息。而需要升级的动态链接库的相关信息应包含需要升级的动态链接库的名称和位置信息。
另外,上述本发明的两种动态升级程序的方法中,服务器获取需要升级的动态链接库的相关信息的方式包含服务器主动探知和服务器被动通知两种获取方式。其中,服务器主动探知需要升级的动态链接库的相关信息的方式可采用一配置文件的形式,在服务程序所知位置处存放一配置文件,并于配置文件中实时存储需要升级的动态链接库的相关信息;此外服务器主动探知需要升级的动态链接库的相关信息的方式也可采用一轮询的形式,令服务器每隔一固定时间检查指定目录中的动态链接库,并得到动态链接库的名称和版本信息,然后与动态链接库的信息表相对照,以得到需要升级的动态链接库的相关信息。关于服务器被动通知需要升级的动态链接库的相关信息的方式可采用一网络服务的形式,令服务器实时监听是否有升级信息,如果有则解析此升级信息,以得到需要升级的动态链接库的相关信息。
综上所述,本发明的优点在于本发明的动态升级程序的方法通过在服务器内建立并存储一动态链接库的信息表,以记录并维护服务程序的动态链接库升级所需的相关信息;并利用此信息表,采取三种方式获取需要升级的动态链接库的相关信息;然后,又采用两种不同的升级方式将需要升级的动态链接库在服务程序不间断运行的情况下实时地升级为新版的动态链接库,从而有效地避免了现有技术的升级方法中因升级而暂时关闭服务程序所可能造成的损失。
此外,即使服务程序因为某些原因发生异常终止,在重新启动服务程序时,加载的动态链接库也总能保持最新的版本。


图1为本发明的第一种动态升级程序的方法的流程图;图2为本发明的第二种动态升级程序的方法的流程图;以及图3为本发明的动态升级程序的方法中的动态链接库的信息表的示意图。
其中,附图标记步骤100在服务器内建立并存储一动态链接库的信息表步骤101服务器利用动态链接库的信息表,采取多种方式获取需要升级的动态链接库的相关信息步骤102服务器暂停对需要升级的动态链接库的存取请求,并等待已运行的对动态链接库的存取结束步骤103判断对动态链接库的存取是否结束步骤104卸载动态链接库,并加载动态链接库的新版动态链接库步骤105更新动态链接库的信息表,接受对新版动态链接库的存取请求步骤200在服务器内建立并存储一动态链接库的信息表步骤201服务器利用动态链接库的信息表,采取多种方式获取需要升级的动态链接库的相关信息步骤202服务器加载需要升级的动态链接库的新版动态链接库步骤203将加载之后对旧版动态链接库的所有存取请求,均发送至新版动态链接库步骤204判断已运行的对旧版动态链接库的存取是否结束步骤205卸载旧版动态链接库,并更新动态链接库的信息表具体实施方式
有关本发明的特征与实施例,现配合附图详细说明如下。
请参考图1,此图为本发明的第一种动态升级程序的方法的流程图,如图所示,本发明的第一种动态升级程序的方法用以当服务器端运行的服务程序处于运行过程中时,对服务程序的功能组件所属的动态链接库进行升级,此方法包含以下步骤在服务器内建立并存储一动态链接库的信息表,用以记录并维护服务程序的多个动态链接库升级所需的相关信息(步骤100);其中动态链接库的信息表所记录的服务程序的多个动态链接库升级所需的相关信息包含每一动态链接库的名称、版本信息及位置信息(请参考图3)。
服务器利用动态链接库的信息表,采取多种方式获取需要升级的动态链接库的相关信息(步骤101);其中需要升级的动态链接库的相关信息应包含需要升级的动态链接库的名称和位置信息(请参考图3)。本发明的第一种动态升级程序的方法中服务器获取需要升级的动态链接库的相关信息的方式包含服务器主动探知和服务器被动通知两种方式。服务器主动探知的方式较少需要人的参与,而是由服务器来决定何时升级。其中,服务器主动探知需要升级的动态链接库的相关信息的方式可采用一配置文件的形式。在服务程序所知位置处存放一配置文件,并于配置文件中实时存储需要升级的动态链接库的相关信息,采用此种方式获取需要升级的动态链接库的相关信息,则可以在服务器负载较轻的时间段内通过后续升级步骤集中升级动态链接库;此外服务器主动探知需要升级的动态链接库的相关信息的方式也可采用一轮询的形式,令服务器每隔一固定时间检查指定目录中的动态链接库,并得到动态链接库的名称和版本信息,然后与动态链接库的信息表相对照,以得到需要升级的动态链接库的相关信息。采用此种方式获取需要升级的动态链接库的相关信息,可以当每遇到一个新的动态链接库版本时,就通过后续升级步骤执行升级动作。服务器被动通知的方式只有在服务器被通知到的情况下,才采取升级动作,这种方式把升级的时机交给系统管理员,由其决定何时升级。关于服务器被动通知需要升级的动态链接库的相关信息的方式可采用一网络服务的形式,令服务器实时监听是否有升级信息,如果有则解析此升级信息,以得到需要升级的动态链接库的相关信息。
通过以上几种方式,服务器获取到了需要升级的动态链接库的相关信息,就可以开始下一步的升级动作。
服务器暂停对需要升级的动态链接库的存取请求,并等待已运行的对动态链接库的存取结束(步骤102);服务器采用的是一种类似于信号灯的方法来暂停对动态链接库的存取请求。服务器中凡是需要存取动态链接库的地方,都必须先查看附加于这个动态链接库的信号灯(此信号灯是在加载动态链接库时,由服务器附加给它的)。如果信号灯为红色,则表示存取被暂停;如果信号灯是绿色则表示可以正常存取,存取动态链接库前还要对这个被存取的动态链接库的引用计数加1,存取后要对这个动态链接库的引用计数减1。在服务器对动态链接库进行升级时,首先设置这个动态链接库的信号灯为红色,这样就可以暂停对这个动态链接库的后续的存取,直至对这个动态链接库的引用计数为0。
判断对动态链接库的存取是否结束(步骤103),即判断对这个动态链接库的引用计数是否为0;当所有对动态链接库的存取结束后(即对这个动态链接库的引用计数为0时),卸载动态链接库,并加载动态链接库的新版动态链接库(步骤104);服务器不断查看对这个动态链接库的引用计数,直到其引用计数减为0,表明再没有对这个动态链接库的存取,这时就可以卸载旧的动态链接库,并加载这个动态链接库的新版本。以及更新动态链接库的信息表,并接受对新版动态链接库的存取请求(步骤105),当加载新版动态链接库完毕后,更新动态链接库的信息表,并将新版动态链接库的信号灯设置为绿色,则以前被暂停的存取请求开始可以存取新的动态链接库,这样就完成了对服务程序的动态链接库的升级,并且不会中断服务程序的运行。
一个具体的实施例服务器serverl有一个动态链接库k.1.0.dll,由于业务需要,要将其升级到新版本的动态链接库k.1.1.dll。k中包含两个方法k1和k2。
时刻1,服务器将信号灯设置为红色,但这之前k2正在被存取,引用计数为1,表示对k2的存取还没有结束;而这之后需要存取k1的请求被信号灯暂停,其会一直等待直至信号灯变为绿色;时刻2,对k2的存取结束了,其引用计数变为0;而对k1的存取请求还在暂停;
时刻3,服务器得知动态链接库k.1.0.dll的引用计数为0,即对动态链接库k.1.0.dll的所有存取结束,则卸载动态链接库k.1.0.dll,并加载新版本的动态链接库k.1.1.dll;此时对k1的存取请求还在暂停;时刻4,服务器重新设置信号灯为绿色;此时对k1的存取请求还在暂停;时刻5,存取方获知信号灯变为绿色,对k1的存取请求得以执行,但是此时存取的k1已经是升级后新版本的动态链接库k.1.1.dll中的k1方法。
现在请参考图2,此图为本发明的第二种动态升级程序的方法的流程图,如图所示,本发明的第二种动态升级程序的方法用以当服务器端运行的服务程序处于运行过程中时,对服务程序的功能组件所属的动态链接库进行升级,此方法包含以下步骤在服务器内建立并存储一动态链接库的信息表,用以记录并维护服务程序的多个动态链接库升级所需的相关信息(步骤200);其中动态链接库的信息表所记录的服务程序的多个动态链接库升级所需的相关信息包含每一动态链接库的名称、版本信息及位置信息(请参考图3)。
服务器利用动态链接库的信息表,采取多种方式获取需要升级的动态链接库的相关信息(步骤201);其中需要升级的动态链接库的相关信息应包含需要升级的动态链接库的名称和位置信息(请参考图3)。本发明的第二种动态升级程序的方法中服务器获取需要升级的动态链接库的相关信息的方式包含服务器主动探知和服务器被动通知两种获取方式。服务器主动探知的方式较少需要人的参与,而是由服务器来决定何时升级。其中,服务器主动探知需要升级的动态链接库的相关信息的方式采用一配置文件的形式,在服务程序所知位置处存放一配置文件,并于配置文件中实时存储需要升级的动态链接库的相关信息,采用此种方式获取需要升级的动态链接库的相关信息,则可以在服务器负载较轻的时间段内通过后续升级步骤集中升级动态链接库;此外服务器主动探知需要升级的动态链接库的相关信息的方式也可采用一轮询的形式,令服务器每隔一固定时间检查指定目录中的动态链接库,并得到动态链接库的名称和版本信息,然后与动态链接库的信息表相对照,以得到需要升级的动态链接库的相关信息。采用此种方式获取需要升级的动态链接库的相关信息,可以当每遇到一个新的动态链接库版本时,就通过后续升级步骤执行升级动作。服务器被动通知的方式只有在服务器被通知到的情况下,才采取升级动作。这种方式把升级的时机交给系统管理员,由其决定何时升级。关于服务器被动通知需要升级的动态链接库的相关信息的方式可采用一网络服务的形式,令服务器实时监听是否有升级信息,如果有则解析此升级信息,以得到需要升级的动态链接库的相关信息。
通过以上几种方式,服务器获取到了需要升级的动态链接库的相关信息,就可以开始下一步的升级动作。
服务器加载需要升级的动态链接库的新版动态链接库(步骤202),并将加载之后对旧版动态链接库的所有存取请求,均发送至新版动态链接库(步骤203),且监测判断已运行的对旧版动态链接库的存取是否结束(步骤204);以及当所有对旧版动态链接库的存取结束后,卸载旧版动态链接库,并更新动态链接库的信息表(步骤205)。其中服务器通过一存取转发器(transmitter)加载新版动态链接库,并将加载之后对旧版动态链接库的所有存取请求,均转发至新版动态链接库,且当所有对旧版动态链接库的存取结束后,由存取转发器卸载掉旧版动态链接库。
服务器对应每个动态链接库都设有一个存取转发器,所有对动态链接库的存取都要通过存取转发器来完成,并且存取转发器会给加载的动态链接库分配一个引用计数器。通常,存取转发器只加载一个动态链接库,所有来自服务器的存取请求都通过存取转发器传递到当前使用的动态链接库中。而在本发明第二种动态升级程序的方法的动态升级的过程中,存取转发器会将新版的动态链接库也加载进来并且为其分配一个引用计数器。这时,新旧动态链接库共存于存取转发器的控制之下。在新版动态链接库加载进来后,所有对旧版动态链接库的存取请求都由存取转发器转发至新版的动态链接库中。随着时间的流逝,所有在新版动态链接库加载之前进入旧版动态链接库的存取相继结束,最后,对旧版动态链接库的引用计数变为0,这时,存取转发器就会卸载旧版的动态链接库并更新动态链接库的信息表。从此时刻起,所有对旧版动态链接库的存取请求都由存取转发器转发至新版动态链接库中,从而完成了对服务程序的动态链接库的升级,并且不会中断服务程序的运行。
一个具体的实施例
服务器serverl有一个动态链接库k.1.0.dll,由于业务需要,要将其升级到新版本的动态链接库k.1.1.dll。k中包含两个方法k1和k2。
时刻1,通过存取转发器加载新版本的动态链接库k.1.1.dll,这之前一个对k2的存取已经进入旧版本的动态链接库k.1.0.dll,其引用计数为1,并且对k2的存取还没有结束;而这之后对k1的存取请求均被存取转发器转发至新版本的动态链接库k.1.1.dll;时刻2,对k2的存取结束了,其引用计数变为0,因此,存取转发器将旧版本的动态链接库k.1.0.dll卸载;时刻3,又有一个对k2的存取,其存取请求被存取转发器转发至新版本的动态链接库k.1.1.dll,至此,对动态链接库k.1.0.dll的升级完成。
最后请参考图3,此图中表示了本发明的动态升级程序的方法中的动态链接库的信息表,如图所示,本发明的动态链接库的信息表中记录的服务程序的多个动态链接库升级所需的相关信息包含每一动态链接库的名称、版本信息以及位置信息。例如可以使用这样的命名规则libname(库名).version.revison(版本信息).extendname(扩展名,即后缀名)。因此,例如一个检查拼写的动态链接库的名字可以是spell.1.0.dll,其中spell是动态链接库的名称,1.0是动态链接库的主次版本号(即版本信息),dll表示这是一个动态链接库(以.dll为后缀的文件,dll即Dynamic Link Library,动态链接库,windows系统使用.dll的后缀名,而Linux系统使用.so的后缀名)。另外,每一个动态链接库作为一个可执行文件,其所存放的位置信息可以用例如C:\wordcheck\dll这样的位置信息来表示。
作为需要升级的动态链接库的相关信息应当包含需要升级的动态链接库的名称和位置信息,图3所示的表格中便表示了三个用于字处理程序动态链接库的名称和位置信息(请参见图3)。当服务器利用动态链接库的信息表,采取不同方式获取这些需要升级的动态链接库的名称和位置信息后,便很容易对这些需要升级的动态链接库展开后续的升级工作了。
虽然本发明以前述的较佳实施方式公开如上,但并非用以限定本发明。本领域的普通技术人员在不违背本发明的范围和精神的情况下,所做的更动与修改,均属本发明的专利保护范围。关于本发明所界定的保护范围请参考所附的权利要求书。
权利要求
1.一种动态升级程序的方法,用以当服务器端运行的服务程序处于运行过程中时,对该服务程序的功能组件所属的动态链接库进行升级,其特征在于,该方法包含以下步骤在该服务器内建立并存储一动态链接库的信息表,用以记录并维护该服务程序的多个动态链接库升级所需的相关信息;该服务器利用该动态链接库的信息表,采取多种方式获取需要升级的动态链接库的相关信息;该服务器暂停对该需要升级的动态链接库的存取请求,并等待已运行的对该动态链接库的存取结束;当所有对该动态链接库的存取结束后,卸载该动态链接库,并加载该动态链接库的新版动态链接库;以及更新该动态链接库的信息表,并接受对该新版动态链接库的存取请求。
2.如权利要求1所述的动态升级程序的方法,其特征在于,该动态链接库的信息表所记录的该服务程序的多个动态链接库升级所需的相关信息包含该每一动态链接库的名称、版本信息及位置信息。
3.如权利要求1所述的动态升级程序的方法,其特征在于,该服务器获取需要升级的动态链接库的相关信息的方式包含该服务器主动探知和该服务器被动通知两种获取方式。
4.如权利要求3所述的动态升级程序的方法,其特征在于,该服务器主动探知需要升级的动态链接库的相关信息的方式采用一配置文件的形式,在该服务程序所知位置处存放一配置文件,并于该配置文件中实时存储需要升级的动态链接库的相关信息。
5.如权利要求3所述的动态升级程序的方法,其特征在于,该服务器主动探知需要升级的动态链接库的相关信息的方式采用一轮询的形式,令该服务器每隔一固定时间检查指定目录中的动态链接库,并得到该动态链接库的名称和版本信息,然后与该动态链接库的信息表相对照,以得到需要升级的动态链接库的相关信息。
6.如权利要求3所述的动态升级程序的方法,其特征在于,该服务器被动通知需要升级的动态链接库的相关信息的方式采用一网络服务的形式,令该服务器实时监听是否有升级信息,如果有则解析该升级信息,以得到需要升级的动态链接库的相关信息。
7.如权利要求1所述的动态升级程序的方法,其特征在于,该需要升级的动态链接库的相关信息包含该需要升级的动态链接库的名称和位置信息。
8.一种动态升级程序的方法,用以当服务器端运行的服务程序处于运行过程中时,对该服务程序的功能组件所属的动态链接库进行升级,其特征在于,该方法包含以下步骤在该服务器内建立并存储一动态链接库的信息表,用以记录并维护该服务程序的多个动态链接库升级所需的相关信息;该服务器利用该动态链接库的信息表,采取多种方式获取需要升级的动态链接库的相关信息;该服务器加载该需要升级的动态链接库的新版动态链接库,并将加载之后对该旧版动态链接库的所有存取请求,均发送至该新版动态链接库,且监测已运行的对该旧版动态链接库的存取是否结束;以及当所有对该旧版动态链接库的存取结束后,卸载该旧版动态链接库,并更新该动态链接库的信息表。
9.如权利要求8所述的动态升级程序的方法,其特征在于,该服务器通过一存取转发器加装载该新版动态链接库,并将加载之后对该旧版动态链接库的所有存取请求,均转发至该新版动态链接库,且当所有对该旧版动态链接库的存取结束后,由该存取转发器卸载掉该旧版动态链接库。
10.如权利要求8所述的动态升级程序的方法,其特征在于,该动态链接库的信息表所记录的该服务程序的多个动态链接库升级所需的相关信息包含该每一动态链接库的名称、版本信息及位置信息。
11.如权利要求8所述的动态升级程序的方法,其特征在于,该服务器获取需要升级的动态链接库的相关信息的方式包含该服务器主动探知和该服务器被动通知两种获取方式。
12.如权利要求11所述的动态升级程序的方法,其特征在于,该服务器主动探知需要升级的动态链接库的相关信息的方式采用一配置文件的形式,在该服务程序所知位置处存放一配置文件,并于该配置文件中实时存储需要升级的动态链接库的相关信息。
13.如权利要求11所述的动态升级程序的方法,其特征在于,该服务器主动探知需要升级的动态链接库的相关信息的方式采用一轮询的形式,令该服务器每隔一固定时间检查指定目录中的动态链接库,并得到该动态链接库的名称和版本信息,然后与该动态链接库的信息表相对照,以得到需要升级的动态链接库的相关信息。
14.如权利要求11所述的动态升级程序的方法,其特征在于,该服务器被动通知需要升级的动态链接库的相关信息的方式采用一网络服务的形式,令该服务器实时监听是否有升级信息,如果有则解析该升级信息,以得到需要升级的动态链接库的相关信息。
15.如权利要求8所述的动态升级程序的方法,其特征在于,该需要升级的动态链接库的相关信息包含该需要升级的动态链接库的名称和位置信息。
全文摘要
本发明涉及一种动态升级程序的方法,用以当服务器端运行的服务程序处于运行过程中时,对服务程序的功能组件所属的动态链接库进行升级。其通过在服务器内建立并存储一动态链接库的信息表,以记录并维护服务程序的多个动态链接库升级所需的相关信息;并利用此信息表,采取多种方式获取需要升级的动态链接库的相关信息;然后,采用两种不同的升级方式将需要升级的动态链接库升级为新版的动态链接库。本发明的升级方法可在服务程序不间断运行的情况下实时地升级其功能组件所属的动态链接库,从而有效避免了因升级而暂时关闭服务程序所造成的损失。
文档编号G06F17/30GK1979418SQ20051012790
公开日2007年6月13日 申请日期2005年12月7日 优先权日2005年12月7日
发明者张玥, 陈玄同, 刘文涵 申请人:英业达股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1