专利名称:业务不中断升级的方法和系统的制作方法
技术领域:
本发明属于通信领域,特别涉及一种业务不中断升级的方法和系统。
背景技术:
随着计算机和通讯事业的发展,各类电信业务逐渐深入国民经济的各个层面。视 频监控作为一种与日常生活息息相关的业务也得到了迅猛的发展,业务容量增长明显。由 于其与公安、交通、环保等事业的紧密联系,视频监控平台及相关前端等设备往往有很高的 稳定性要求,业务的不中断是其中最基本的一点。在以前的视频监控平台的开发过程中所有处理都集中在一个业务进程中,一旦需 要修改一部分功能,就需要替换整个进程的可执行文件。升级前需要进行完整的系统功能 验证,升级过程中需要中断业务,工作量非常大。
发明内容
为了在不中断业务的情况下完成系统升级,并减少工作量,本发明提供了一种业 务不中断升级的方法和系统,技术方案如下一种业务不中断升级的方法,包括将业务操作封装在各个模块中,业务处理单元定义与业务相关的信息,并保存与 业务相关的全局数据;当需要更新指定模块时,业务处理单元的第一处理单元备份所述指定模块,将所 述指定模块替换成新版本的模块;所述业务处理单元的第一处理单元加载所述新版本的模块,如果加载成功,则判 断是否需要进行业务等待;如果需要进行业务等待,则所述业务处理单元的第一处理单元向所述指定模块涉 及的第二处理单元发送业务等待命令消息,并在接收到所述第二处理单元返回的业务等待 成功消息时,卸载所述指定模块。进一步,该方法还包括如果加载失败,在没有所述与业务相关信息被替换时,则 所述业务处理单元的第一处理单元恢复所述指定模块,或在存在所述与业务相关信息被替 换时,则重新加载所述备份的模块。进一步地,该方法还包括如果不需要进行业务等待,则卸载所述指定模块。进一步地,该方法还包括在需要修改所述与业务相关的全局数据时,所述业务处 理单元的第一处理单元通过加载临时模块的方式进行修改。进一步地,所述与业务相关的信息包括全局变量和/或函数。一种业务不中断升级的方法,包括将业务操作封装在各个模块中,业务处理单元定义与业务相关的信息,并保存与 业务相关的全局数据;当需要更新指定模块时,业务处理单元的第一处理单元备份所述指定模块,将所
4述指定模块替换成新版本的模块;所述业务处理单元的第一处理单元加载所述新版本的模块,并卸载所述指定模 块。进一步地,如果加载失败,在没有所述与业务相关信息被替换时,则恢复所述指定 模块,在存在所述与业务相关信息被替换时,则重新加载所述备份的模块。进一步地,该方法还包括在需要修改所述与业务相关的全局数据时,所述业务处 理单元的第一处理单元通过加载临时模块的方式进行修改。一种业务不中断升级的系统,包括第一设置模块,用于将业务操作封装在各个模块中,业务处理单元定义与业务相 关的信息,并保存与业务相关的全局数据;第一备份和替换模块,用于当需要更新指定模块时,业务处理单元的第一处理单 元备份所述指定模块,将所述指定模块替换成新版本的模块;第一加载与判断模块,用于所述业务处理单元的第一处理单元加载所述新版本的 模块,如果加载成功,则判断是否需要进行业务等待;收发和卸载模块,用于在所述第一加载与判断模块判断需要进行业务等待时,则 所述业务处理单元的第一处理单元向所述指定模块涉及的第二处理单元发送业务等待命 令消息,并在接收到所述第二处理单元返回的业务等待成功消息时,卸载所述指定模块。进一步地,所述第一加载与判断模块,还用于如果加载失败,在没有所述与业务相 关信息被替换时,则所述业务处理单元的第一处理单元恢复所述指定模块,或在存在所述 与业务相关信息被替换时,则重新加载所述备份的模块。进一步地,该方法还包括修改模块,用于在需要修改所述全局数据时,所述业务 处理单元的第一处理单元通过加载临时模块的方式进行修改。进一步地,所述第一加载与判断模块,还用于在判断不需要进行业务等待时,通知 所述收发和卸载模块卸载所述指定模块。进一步地,所述与业务相关的信息包括全局变量和/或函数。一种业务不中断升级的系统,包括第二设置模块,用于将业务操作封装在各个模块中,业务处理单元定义与业务相 关的信息,并保存与业务相关的全局数据;第二备份与替换模块,用于当需要更新指定模块时,业务处理单元的第一处理单 元备份所述指定模块,并将所述指定模块替换成新版本的模块;加载和卸载模块,用于所述业务处理单元的第一处理单元加载所述新版本的模 块,并卸载所述指定模块。进一步地,所述加载和卸载模块,还用于如果加载失败,在没有所述与业务相关信 息被替换时,则恢复指定模块,在存在所述与业务相关信息被替换时,则重新加载备份的模 块。进一步地,该系统还包括修改模块,用于在需要修改所述全局数据时,所述业务 处理单元的第一处理单元通过加载临时模块的方式进行修改。本发明通过对现有业务处理单元进行模块化管理,将业务处理单元分解并封装成 多个模块,正常运行时,业务处理单元是由多个处理单元和多个可动态加载的模块组成。各个模块的开发、编译和执行等相对独立,使开发和维护工作更有针对性;同时,各个模块,由 业务处理单元进行调用。在更改现场故障时,可以只更新对应的模块文件而无需再重启业 务,只需通知业务处理单元重新调用模块即可,可以把升级验证和工程变更限制在以模块 为单位的系统内部,大大减少工作量。
图1是本发明提供的业务不中断升级的方法的流程图;图2是本发明提供的业务不中断升级的方法的另一种流程图;图3是本发明提供的对动态链接库进行模块化后系统架构图;图4是本发明提供的业务不中断升级的方法的详细流程图;图5是本发明提供的业务不中断升级的系统结构图;图6是本发明提供的业务不中断升级的系统另一种结构图。
具体实施例方式为了使本发明所要解决的技术问题、技术方案及有益效果更加清楚、明白,以下结 合附图和实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅 用以解释本发明,并不用于限定本发明。本发明通过对现有业务处理单元进行模块化管理,将业务处理单元分解并封装成 多个模块,该业务处理单元可以是业务进程,该模块可以是动态链接库。正常运行时,业务 处理单元是由多个处理单元和多个可动态加载的模块组成,该处理单元可以是业务进程中 线程。各个模块的开发、编译和执行等相对独立,使开发和维护工作更有针对性;同时,各个 模块,由业务处理单元进行调用。在更改现场故障时,可以只更新对应的模块文件而无需再 重启业务,只需通知业务处理单元重新调用模块即可,可以把升级验证和工程变更限制在 以模块为单位的系统内部,大大减少工作量。如图1所示,本发明提供了一种业务不中断升级的方法,包括步骤101,将业务操作封装在各个模块中,业务处理单元定义与业务相关的信息, 并保存与业务相关的全局数据;其中,该模块可以是动态链接库;该与业务相关的信息可以是全局函数和/或变量。步骤102,当需要更新指定模块时,业务处理单元的第一处理单元备份该指定模 块,将该指定模块替换成新版本的模块;步骤103,该业务处理单元的第一处理单元加载该新版本的模块,如果加载成功, 则判断是否需要进行业务等待;步骤104,如果需要进行业务等待,则该业务处理单元的第一处理单元向该指定模 块涉及的第二处理单元发送业务等待命令消息,并在接收到该第二处理单元返回的业务等 待成功消息时,卸载该指定模块。进一步地,该方法还包括如果加载失败,在没有与业务相关信息被替换时,则该 业务处理单元的第一处理单元恢复该指定模块,或在存在与业务相关信息被替换时,则重 新加载备份的模块。
6
进一步地,该方法还包括如果不需要进行业务等待,则卸载该指定模块。进一步地,该方法还包括在需要修改与业务相关的全局数据时,该业务处理单元 的第一处理单元通过加载临时模块的方式进行修改。其中,临时模块可以是临时动态链接库,该临时动态链接库和普通的动态链接库 在本质上是一样的,只是操作不同,前者加载后立即卸载,后者是加载后不再卸载常驻内 存。因此,可以将临时动态链接库定义成加载后立即卸载、不会常驻内存、不需要在线升级 的动态链接库。其中,业务处理单元可以是业务进程,处理单元可以是业务进程中的线程。本发明提供了一种业务不中断升级的方法,该方法适用于业务处理单元中只有一 个处理单元的场景。如图2所示,该方法包括步骤201,将业务操作封装在各个模块中,业务处理单元定义与业务相关的信息, 并保存与业务相关的全局数据;步骤202,当需要更新指定模块时,业务处理单元的第一处理单元备份该指定模 块,将该指定模块替换成新版本的模块;步骤203,业务处理单元的第一处理单元加载新版本的模块,并卸载该指定模块。进一步地,该方法还包括如果加载失败,在没有与业务相关信息被替换时,则恢 复指定模块,在存在与业务相关信息被替换时,则重新加载备份的模块。进一步地,该方法还包括在需要修改与业务相关的全局数据时,该业务处理单元 的第一处理单元通过加载临时模块的方式进行修改。 其中,该模块可以是动态链接库。其中,该与业务相关的信息可以是全局函数和/或变量。其中,业务处理单元可以是业务进程,处理单元可以是业务进程中的线程。下面结合具体的实施例对本发明进行详细的描述,但该实施例并不构成对本发明 保护范围的限制。其中,业务处理单元是业务进程,处理单元是业务进程中的线程,本实施 例中第一处理单元可以是线程A,第二处理单元可以是线程B,模块为动态链接库,临时模 块为临时动态链接库。图3所示为对动态链接库进行模块化后系统架构图。为了简化升级操作过程,将 业务数据和操作过程分离。业务进程包含了所有的全局变量和函数的定义,全局数据将以 动态分配内存的方式保存在业务进程中,而业务操作过程则封装在各个动态链接库中,由 业务进程负责加载和卸载。这种数据和操作分离的系统架构的优点是对数据的维护和动态 链接库的升级可以分开来操作,互不干扰,不会出现某一个动态链接库升级后所有对这个 库中某个变量的引用都要变更的情况。在本发明这个架构下,如果是操作过程的变更,可以只替换动态链接库即可,无需 同时进行数据的维护,因为数据是定义和保持在业务进程中,在业务不中断升级的情况下, 对数据的引用和维护方式就不会变更;而如果需要修改内存中的数据也可以通过加载临时 动态链接库的方式进行修改。当需要更新某个动态链接库,必须重载动态链接库,即在程序运行过程中替换某 个动态链接库。此时,如图4所示,本发明实施例提供的基于动态链接库的业务不中断升级 的方法,包括
步骤400,业务进程的线程A接收到重载命令,要求重载指定动态链接库。步骤401,业务进程的线程A备份原动态链接库文件,备份文件名按标准的 BAK. so。步骤402,业务进程的线程A将原动态链接库文件替换成新版本的动态链接库文 件。步骤403,业务进程的线程A重新加载新版本的动态链接库文件,如果加载成功, 则转入步骤405 ;如果加载失败,转入步骤404。步骤404,如果没有任何函数指针和变量被替换,则重载过程中止,将动态链接库 文件恢复;如果加载失败时已有函数指针和变量被替换,则重新加载备份的lib__BAK. so, 并将动态链接库替换回备份的动态链接库文件。步骤405,根据升级配置判断是否需要进行业务等待,如果是,则转入步骤406 ;如 果不是,则可以自动卸载指定的动态链接库文件。在业务动态链接库化后,每个动态链接库卸载前需要确保不会有任何对这个动态 链接库的引用,这时就需要进行业务等待来使当前正在执行的旧动态链接库内容执行完 毕。对于不同动态链接库,业务等待的方式各有不同,可在升级脚本中进行选择。对于底层动态链接库,尽管是分布于各个业务线程和子线程,但底层动态链接库 内都是业务简单,执行时间很短的函数。在动态链接库重载时可在管理动态链接库重载的 线程中,待新动态链接库加载完毕后,等待10秒钟的时间,即可确保对旧动态链接库的所 有引用都已执行完毕,旧动态链接库的卸载不会受影响。对于上层动态链接库,程序操作分布于各个业务线程和子线程,执行时间可能会 比较长。这种情况需要管理线程与此动态链接库所涉及的其他线程进行消息交互,确保动 态链接库内部函数未被引用。而具体需要哪些线程进行等待,需要根据修改的内容进行分 析。处理业务等待的原则就是把影响控制在最小的范围,不需要让动态链接库涉及的 所有线程都进行等待,也不需要让线程内所有动态链接库的消息都进行等待。步骤406,业务进程的线程A开始指定动态链接库的业务等待。步骤407,业务进程的线程A将这个动态链接库的等待标志置1。其中,在本实施例中,等待标志为1只是为了举例需要,本发明的保护范围并不限 于此。步骤408,业务进程的线程A向该动态链接库所涉及的其他线程发送业务等待命 令消息。其他各个线程在接收到关于该动态链接库的消息时不再调用此模块动态链接库 的入口函数进行处理,而是直接将消息缓存到一个list (列表)中。每个线程都定义一个 消息缓存的list,list中每个元素都会表明所属动态链接库。在此为了描述方便,其他线程仅以线程B举例,多个其他线程的原理与此类似,不 再赘述。步骤409,业务进程的线程B收到线程A的消息后,根据动态链接库定义判断该动 态链接库是否有子线程,如果有,则按照升级配置来进行子线程处理,并进入步骤410 ;如果没有,则进入步骤410。具体地,对子线程进行处理有两种处理方式,根据升级脚本来选择a)直接杀子线程。适合于重要性较低,但执行时间较长的消息。b)等待一个预设的时间,由子线程处理完毕。适合于长线程和执行时间较短的流 程。该等待的时间也有超时机制,超时后,直接杀子线程。步骤410,业务进程的线程B在执行子进程处理成功后,向线程A回应业务等待成 功消息。步骤411,业务进程的线程A在收到业务等待成功消息后,完成动态链接库的卸载。具体地,动态链接库卸载只需要调用dlclose函数即可。步骤412,业务进程的线程A将等待标志清0。其中,在本实施例中,等待标志清0只是为了举例需要,本发明的保护范围并不限 于此。步骤413,线程B开始从线程A接收消息,接收消息前优先从list中读取消息。以上实施例是关于业务进程中有两个或多个线程的实施例,如果在业务进程中, 只有一个线程,则不要进行业务等待过程,进行升级的过程如下业务进程的线程接收到重 载命令,要求重载指定动态链接库。业务进程的线程备份原动态链接库文件,备份文件名按 标准的lib__BAK. S0o业务进程的线程将原动态链接库文件替换成新版本的动态链接库文 件。业务进程的线程重新加载新版本的动态链接库文件,如果加载失败,在没有任何函数指 针和变量被替换,则重载过程中止,将指定的动态链接库文件恢复;如果加载失败时已有函 数指针和变量被替换,则重新加载备份的lib__BAK. so,并将动态链接库替换回备份的动 态链接库文件。如果加载成功,则完成升级过程。基于与方法相同的发明构思,本发明实施例提供了一种业务不中断升级的系统, 如图5所示,包括第一设置模块501,用于将业务操作封装在各个模块中,业务处理单元定义与业务 相关的信息,并保存与业务相关的全局数据;第一备份和替换模块502,用于当需要更新指定模块时时,业务处理单元的第一处 理单元备份该指定模块,将该指定模块替换成新版本的模块;加载与判断模块503,用于该业务处理单元的第一处理单元加载该新版本的模块, 如果加载成功,则判断是否需要进行业务等待;收发和卸载模块504,用于在加载与判断模块503判断需要进行业务等待时,则该 业务处理单元的第一处理单元向该指定模块涉及的第二处理单元发送业务等待命令消息, 并在接收到该第二处理单元返回的业务等待成功消息时,卸载该指定模块。其中,该与业务相关的信息可以是全局函数和/或变量。进一步地,加载与判断模块503,还用于如果加载失败,在没有与业务相关信息被 替换时,则该业务处理单元的第一处理单元恢复指定的模块,或在存在与业务相关信息被 替换时,则重新加载备份的模块。进一步地,该加载与判断模块503,还用于在判断不需要进行业务等待时,通知收 发和卸载模块卸载该指定模块。
进一步地,该系统还包括修改模块,用于在需要修改全局数据时,该业务处理单 元的第一处理单元通过加载临时模块的方式进行修改。其中,临时模块可以是临时动态链接库,该临时动态链接库和普通的动态链接库 在本质上是一样的,只是操作不同,前者加载后立即卸载,后者是加载后不再卸载常驻内 存。因此,可以将临时动态链接库定义成加载后立即卸载、不会常驻内存、不需要在线升级 的动态链接库。基于与方法相同的发明构思,本发明实施例提供了一种业务不中断升级的系统, 如图6所示,包括第二设置模块601,用于将业务操作封装在各个模块中,业务处理单元定义与业务 相关的信息,并保存与业务相关的全局数据;第二备份与替换模块602,用于当需要更新指定模块时,业务处理单元的第一处理 单元备份所述指定模块,将所述指定模块替换成新版本的模块;加载和卸载模块603,用于所述业务处理单元的第一处理单元加载所述新版本的 模块,并卸载所述指定模块。进一步地,加载和卸载模块603,还用于如果加载失败,在没有与业务相关信息被 替换时,则恢复指定模块,在存在与业务相关信息被替换时,则重新加载备份的模块。其中,该与业务相关的信息可以是全局函数和/或变量。进一步地,该系统还包括修改模块,用于在需要修改全局数据时,所述业务处理 单元的第一处理单元通过加载临时模块的方式进行修改。其中,临时模块可以是临时动态链接库,该临时动态链接库和普通的动态链接库 在本质上是一样的,只是操作不同,前者加载后立即卸载,后者是加载后不再卸载常驻内 存。因此,可以将临时动态链接库定义成加载后立即卸载、不会常驻内存、不需要在线升级 的动态链接库。本发明的技术方案不仅适用于视频监控,通过简单变形,还适用于其他业务进程 的架构设计。本发明通过对现有业务处理单元进行模块化管理,将业务处理单元分解并封装成 多个模块,该业务处理单元可以是业务进程,该模块可以是动态链接库。正常运行时,业务 处理单元是由多个处理单元和多个可动态加载的模块组成,该处理单元可以是业务进程中 线程。各个模块的开发、编译和执行等相对独立,使开发和维护工作更有针对性;同时,各个 模块,由业务处理单元进行调用。在更改现场故障时,可以只更新对应的模块文件而无需再 重启业务,只需通知业务处理单元重新调用模块即可,可以把升级验证和工程变更限制在 以模块为单位的系统内部,大大减少工作量。上述说明示出并描述了本发明的一个优选实施例,但如前所述,应当理解本发明 并非局限于本文所披露的形式,不应看作是对其他实施例的排除,而可用于各种其他组合、 修改和环境,并能够在本文所述发明构想范围内,通过上述教导或相关领域的技术或知识 进行改动。而本领域人员所进行的改动和变化不脱离本发明的精神和范围,则都应在本发 明所附权力要求的保护范围内。
10
权利要求
一种业务不中断升级的方法,其特征在于,包括将业务操作封装在各个模块中,业务处理单元定义与业务相关的信息,并保存与业务相关的全局数据;当需要更新指定模块时,业务处理单元的第一处理单元备份所述指定模块,将所述指定模块替换成新版本的模块;所述业务处理单元的第一处理单元加载所述新版本的模块,如果加载成功,则判断是否需要进行业务等待;如果需要进行业务等待,则所述业务处理单元的第一处理单元向所述指定模块涉及的第二处理单元发送业务等待命令消息,并在接收到所述第二处理单元返回的业务等待成功消息时,卸载所述指定模块。
2.如权利要求1所述的方法,其特征在于,还包括如果加载失败,在没有所述与业务 相关信息被替换时,则所述业务处理单元的第一处理单元恢复所述指定模块,或在存在所 述与业务相关信息被替换时,则重新加载所述备份的模块。
3.如权利要求1所述的方法,其特征在于,还包括如果不需要进行业务等待,则卸载 所述指定模块。
4.如权利要求1所述的方法,其特征在于,还包括在需要修改所述与业务相关的全局 数据时,所述业务处理单元的第一处理单元通过加载临时模块的方式进行修改。
5.如权利要求1-4任意一项所述的方法,其特征在于,所述与业务相关的信息包括全 局变量和/或函数。
6.一种业务不中断升级的方法,其特征在于,包括将业务操作封装在各个模块中,业务处理单元定义与业务相关的信息,并保存与业务 相关的全局数据;当需要更新指定模块时,业务处理单元的第一处理单元备份所述指定模块,将所述指 定模块替换成新版本的模块;所述业务处理单元的第一处理单元加载所述新版本的模块,并卸载所述指定模块。
7.如权利要求6所述的方法,其特征在于,如果加载失败,在没有所述与业务相关信息 被替换时,则恢复所述指定模块,在存在所述与业务相关信息被替换时,则重新加载所述备 份的模块。
8.如权利要求6所述的方法,其特征在于,还包括在需要修改所述与业务相关的全局 数据时,所述业务处理单元的第一处理单元通过加载临时模块的方式进行修改。
9.一种业务不中断升级的系统,其特征在于,包括第一设置模块,用于将业务操作封装在各个模块中,业务处理单元定义与业务相关的 信息,并保存与业务相关的全局数据;第一备份和替换模块,用于当需要更新指定模块时,业务处理单元的第一处理单元备 份所述指定模块,将所述指定模块替换成新版本的模块;第一加载与判断模块,用于所述业务处理单元的第一处理单元加载所述新版本的模 块,如果加载成功,则判断是否需要进行业务等待;收发和卸载模块,用于在所述第一加载与判断模块判断需要进行业务等待时,则所述 业务处理单元的第一处理单元向所述指定模块涉及的第二处理单元发送业务等待命令消息,并在接收到所述第二处理单元返回的业务等待成功消息时,卸载所述指定模块。
10.如权利要求9所述的系统,其特征在于,所述第一加载与判断模块,还用于如果加 载失败,在没有所述与业务相关信息被替换时,则所述业务处理单元的第一处理单元恢复 所述指定模块,或在存在所述与业务相关信息被替换时,则重新加载所述备份的模块。
11.如权利要求9所述的系统,其特征在于,还包括修改模块,用于在需要修改所述全 局数据时,所述业务处理单元的第一处理单元通过加载临时模块的方式进行修改。
12.如权利要求9所述的系统,其特征在于,所述第一加载与判断模块,还用于在判断 不需要进行业务等待时,通知所述收发和卸载模块卸载所述指定模块。
13.如权利要求9-12任意一项所述的系统,其特征在于,所述与业务相关的信息包括 全局变量和/或函数。
14.一种业务不中断升级的系统,其特征在于,包括第二设置模块,用于将业务操作封装在各个模块中,业务处理单元定义与业务相关的 信息,并保存与业务相关的全局数据;第二备份与替换模块,用于当需要更新指定模块时,业务处理单元的第一处理单元备 份所述指定模块,并将所述指定模块替换成新版本的模块;加载和卸载模块,用于所述业务处理单元的第一处理单元加载所述新版本的模块,并 卸载所述指定模块。
15.如权利要求14所述的系统,其特征在于,所述加载和卸载模块,还用于如果加载失 败,在没有所述与业务相关信息被替换时,则恢复指定模块,在存在所述与业务相关信息被 替换时,则重新加载备份的模块。
16.如权利要求14所述的系统,其特征在于,还包括修改模块,用于在需要修改所述 全局数据时,所述业务处理单元的第一处理单元通过加载临时模块的方式进行修改。
全文摘要
本发明公开了一种业务不中断升级的方法和系统,属于通信领域。该方法包括将业务操作封装在各个模块中,业务处理单元定义与业务相关的信息,并保存与业务相关的全局数据;当需要更新指定模块时,业务处理单元的第一处理单元备份指定模块,将指定模块替换成新版本的模块;业务处理单元的第一处理单元加载新版本的模块,如果加载成功,则判断是否需要进行业务等待;如果需要进行业务等待,则业务处理单元的第一处理单元向指定模块涉及的第二处理单元发送业务等待命令消息,并在接收到第二处理单元返回的业务等待成功消息时,卸载所述指定模块。本发明可以在不中断业务的情况下完成系统升级,并减少工作量。
文档编号H04L12/24GK101964725SQ20101027220
公开日2011年2月2日 申请日期2010年9月1日 优先权日2010年9月1日
发明者秦定宇 申请人:中兴通讯股份有限公司