CN103064711B - 一种基于Spread分布式应用系统的热加载方法 - Google Patents
一种基于Spread分布式应用系统的热加载方法 Download PDFInfo
- Publication number
- CN103064711B CN103064711B CN201210581392.6A CN201210581392A CN103064711B CN 103064711 B CN103064711 B CN 103064711B CN 201210581392 A CN201210581392 A CN 201210581392A CN 103064711 B CN103064711 B CN 103064711B
- Authority
- CN
- China
- Prior art keywords
- module
- message
- upgrading
- spread
- version module
- 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.)
- Active
Links
Landscapes
- Stored Programmes (AREA)
Abstract
本发明涉及一种基于Spread分布式应用系统的热加载方法,包括:步骤1,部署常驻内存的升级消息监听模块;步骤2,启动新版本模块,与原版本模块并运行;步骤3,启动升级消息发布模块,发送新版本模块的升级消息;步骤4:升级消息监听模块接收到升级消息后,对共享内存中原版本模块所连接的消息组名进行切换,并将结果返回给升级消息发布进程;步骤5,升级消息发布模块收到所有发布成功结果返回后,提示升级成功,并退出;步骤6:原版本模块将消息组切换前收到的所有消息处理完成后,停止原版本模块运行。本发明提供了一个统一的稳定的热加载方式,使得模块升级不再受时间的限制,实现在不中断业务的情况下完成程序加载。
Description
技术领域
本发明涉及分布式应用系统技术领域,具体涉及一种基于Spread消息总线的分布式应用系统的热加载技术。
背景技术
分布式应用系统,是目前在企业级应用中普遍采用的一种软件系统架构,应用系统按功能被切分成多个模块,部署在若干独立的计算机上,模块之间通过某种消息机制进行信息交互,协同完成工作。
Spread,是一套开源工具包,可以作为一个分布式应用系统的消息总线,提供高可靠性、高性能、支持异构环境的分布式分组消息传递,详见http://www.spread.org/。在一个典型的环境中,通常每台服务器上运行一个Spreadserver,各服务器上的应用本地连接server,发送消息到指定组,而这台服务器上的Spreadserver会传递消息给其他订阅该组消息的应用。
由于Spread作为消息总线所体现的突出优势,因此,基于Spread的分布式应用系统是目前广泛采用的一种分布式应用系统架构。典型的一类分布式应用系统如图1所示,就是将各接口模块和内部处理(非接口)模块分离,通过Spread消息总线的分组传递实现模块之间的数据交互。由于这种架构具有高度的灵活性且模块划分明晰,因此对于那些接口众多、业务逻辑变化较快的应用系统来说特别适用。这类应用有一个特点:接口模块相对稳定,内部业务处理(非接口)模块由于业务上“随需而变”的要求,升级比较频繁。传统的内部处理模块程序升级是先停止原模块进程,然后启动新模块进程,这种升级方式必然导致应用的中断,对于那些有7*24小时严格要求的企业级应用来说是无法容忍的。
发明内容
本发明所要解决的技术问题是为基于Spread消息总线的分布式应用系统,提供一种新的内部处理(非接口)模块的程序热加载方法,用于实现不中断业务应用的程序升级。
本发明解决上述技术问题的技术方案如下:一种基于Spread分布式应用系统的热加载方法,包括以下步骤:
步骤1:部署常驻在内存的升级消息监听模块,并将其连接至指定的Spread消息组;
步骤2:启动新版本模块,将新版本模块连接到一个新的Spread消息组,并让新版本模块与原版本模块并运行;
步骤3:启动升级消息发布模块,发送原版本模块的升级消息至升级消息监听模块;
步骤4:升级消息监听模块接收到原版本模块的升级消息后,将原版本模块对应的Spread消息组名切换成新版本模块对应的Spread消息组名,并将切换结果反馈给升级消息发布模块;
步骤5:升级消息发布模块收到所有反馈结果后,提示升级成功,并退出运行;
步骤6:在确保原版本模块将Spread消息组切换前收到的所有消息处理完成后,停止原版本模块的运行,完成热加载过程。
在上述技术方案的基础上,本发明还可以做如下改进。
进一步,所述步骤3具体包括:启动升级消息发布模块,读取原版本模块信息,将原版本模块信息组成原版本模块的升级消息,并发送至升级消息监听模块。
进一步,所述原版本模块信息包括原版本模块连接的Spread消息组在共享内存中的索引名和新版本模块连接的Spread消息组名。
进一步,所述方法中各模块间通信的数据保存在共享内存或共享物理存储机制中,且所述共享物理机制包括数据库和文件。
进一步,执行所述步骤4后,还包括:向原版本模块发送消息时,会根据共享内存中更新的新版本模块连接Spread消息组名,将消息由Spread消息总线转发到新版本模块。
进一步,所述步骤5中升级消息发布模块将收到的反馈结果打印到控制台上。
本发明只针对分布式系统内部处理模块,即非接口模块,因为其基本原理是通过切换模块间通信的Spread消息组来完成进程切换,而接口模块与外部系统的通信协议是不确定的,因此本发明不适用于接口模块。
在上述技术方案中,本发明中涉及的各模块相当于应用进程。
本发明的有益效果是:主要有以下几个方面的特点:
一、本发明适用的分布式应用系统,其模块(进程)间的通信全部是通过Spread消息总线完成,且模块(进程)间通信的数据(包括通信使用的消息组名)会在共享内存(其他共享物理存储亦可,如:数据库、文件等)中保存,以便新老模块(进程)之间、模块(进程)与升级监听进程之间可以共享数据。
二、本发明通过引入模块升级发布/监听进程,并配合共享内存技术的应用,达到了在分布式系统中将内部处理模块升级消息发布到消息总线、通知其他模块(进程)对升级模块接收消息组进行切换的目的,实现了内部处理模块在不中断业务情况下的加载。
三、本发明技术方案基于Spread消息总线架构,其模块(进程)间的通信全部是通过Spread消息总线完成,具有跨平台、跨语言的特性,各业务模块可以部署在windows、unix、linux操作系统上,在可以用不同编程语言开发,如C语言、JAVA语言、Python语言等。
四、本发明不同于传统的先停止原进程、再启动新进程的加载方式,其加载方式是:在不停止原进程的情况下,先启动新进程,再通过一套升级消息发布/监听进程完成升级消息发布及升级模块(进程)连接Spread消息组切换,确保新老进程在并运行期间无缝完成功能切换,最后再停止原进程。
附图说明
图1为基于Spread消息总线的分布式系统示意图;
图2为本发明实施例中的分布式应用系统示意图;
图3为本发明实施例中热加载方法的流程示意图;
图4为本发明实施例在热加载前的系统示意图;
图5为本发明实施例中热加载中的系统示意图;
图6为本发明实施例中热加载后的系统示意图。
具体实施方式
以下结合附图对本发明的原理和特征进行描述,所举实例只用于解释本发明,并非用于限定本发明的范围。
如图2所示,本实施例中以一个简单的分布式系统作为应用场景,若要在具有更多模块的复杂分布式系统中应用,其方法的操作是相同的,只不过要部署更多的升级消息监听模块。
本实施例中,分布式系统分为两个独立模块(进程),即一个接口模块(进程)IF,一个业务处理模块(进程)P,两个模块之间的通信由Spread消息总线完成,IF连接到消息组G_IF_RCV,P连接到消息组G_P_RCV,分别用于接收各自的Spread消息。
如图3所示,本实施例中的热加载方法即是将业务处理模块进程从P升级到P1,具体步骤为:
步骤1:如图4所示,在接口模块(进程)IF所在服务器的相同用户下,部署常驻内存的升级消息监听进程Upd_Listener,连接到消息组G_UPD_SEND,用于接收模块升级消息。
这里,步骤1是在第一次使用此方法时操作,今后按此方法做热加载可直接从步骤2开始。
步骤2:在待升级模块(即原版本模块)P所在服务器的相同用户下,启动新业务处理模块(即新版本模块)P1,连接到新的Spread消息组G_P_RCV_1,与原版本模块(进程)P并运行,但此时P1并不参与系统业务处理,因为接口模块(进程)IF还未收到升级通知,不会将消息发送到P1连接的消息组G_P_RCV_1。
步骤3:启动升级消息发布进程Upd_Publisher,读取待升级模块信息,包括升级进程连接的消息组在共享内存中的索引名、新进程连接的消息组名(确保新组名唯一,不与已定义组名冲突),组成模块升级消息包,发送到消息组G_UPD_SEND,并连接到G_UPD_RCV消息组,接收反馈结果。这里,先将待升级模块信息配置成升级发布配置文件(可参加下述的样例),进行热加载时再从相应配置文件中读取升级消息。
步骤4:升级消息监听进程Upd_Listener一旦接收到模块升级消息,依据消息数据内容,对共享内存中升级模块(进程)所连接的消息组名进行切换,并将结果通过Spread返回给升级消息发布进程Upd_Publisher;接口模块(进程)IF后续向业务处理模块发送消息时,会根据共享内存中更新的升级模块连接的新消息组名,将请求发送到新的Spread消息组G_P_RCV_1中,从而由Spread将请求转发到新版本模块(进程)P1,此时新版本模块(进程)P1就真正参与到系统业务处理中。
如图5所示,为加载过程中的系统状态,IF发送消息到P的虚线和IF发送消息到P1实线反映了这个切换过程。
步骤5:升级消息发布进程Upd_Publisher从G_UPD_RCV消息组陆续收到各升级消息监听进程反馈的结果,并将结果打印到控制台上,当收到预期数目的成功返回后,升级消息发布进程会提示升级成功,并退出。
步骤6:等待一定时间(确保原模块进程将消息组切换前收到的所有请求完成处理,可通过日志记录确认)后,停止原模块(进程)P,如图6所示,为加载完毕后的系统状态,这标志一次完整的业务处理模块程序热加载过程结束。
本实施例很好地解决了这种基于Spread消息总线的分布式应用系统的内部处理模块(非接口模块)的热加载问题,其实现需要将各步骤的技术方案编制成相应的程序,程序样例主要有升级发布配置文件样例、升级消息发布程序Upd_Publisher关键流程样例和升级消息监听程序Upd_Listener关键流程样例,如下所述:
一、升级发布配置文件样例。
#升级进程连接的消息组名在共享内存中的索引名
Upd_Group_Key=1
#新进程连接的消息组名
Upd_Group_New=G_P_RCV_1
#与升级进程有交互的进程个数(此例中只有1个接口模块进程,因此配置为1)
Upd_Count=1
二、升级消息发布程序Upd_Publisher关键流程样例。
三、升级消息监听程序Upd_Listener关键流程样例。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (6)
1.一种基于Spread分布式应用系统的热加载方法,其特征在于,包括:
步骤1:部署常驻在内存的升级消息监听模块,并将其连接至指定的Spread消息组;
步骤2:启动新版本模块,将新版本模块连接到一个新的Spread消息组,并让新版本模块与原版本模块并运行;
步骤3:启动升级消息发布模块,发送原版本模块的升级消息至升级消息监听模块;
步骤4:升级消息监听模块接收到升级消息后,将原版本模块对应的Spread消息组名切换成新版本模块对应的Spread消息组名,并将切换结果反馈给升级消息发布模块;
步骤5:升级消息发布模块收到所有反馈结果后,提示升级成功,并退出运行;
步骤6:在确保原版本模块将Spread消息组切换前收到的所有消息处理完成后,停止原版本模块的运行,完成热加载过程。
2.根据权利要求1所述的热加载方法,其特征在于,所述步骤3具体包括:启动升级消息发布模块,读取原版本模块信息,将原版本模块信息组成原版本模块的升级消息,并发送至升级消息监听模块。
3.根据权利要求2所述的热加载方法,其特征在于,所述原版本模块信息包括原版本模块连接的Spread消息组在共享内存中的索引名和新版本模块连接的Spread消息组名。
4.根据权利要求1所述的热加载方法,其特征在于,所述方法中各模块间通信的数据保存在共享内存或共享物理存储机制中,且所述共享物理存储机制包括数据库和文件。
5.根据权利要求1所述的热加载方法,其特征在于,执行所述步骤4后,还包括:向原版本模块发送消息时,会根据共享内存中更新的新版本模块连接的Spread消息组名,将消息由Spread消息总线转发到新版本模块。
6.根据权利要求1所述的热加载方法,其特征在于,所述步骤5中升级消息发布模块将收到的反馈结果打印到控制台上。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210581392.6A CN103064711B (zh) | 2012-12-27 | 2012-12-27 | 一种基于Spread分布式应用系统的热加载方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210581392.6A CN103064711B (zh) | 2012-12-27 | 2012-12-27 | 一种基于Spread分布式应用系统的热加载方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103064711A CN103064711A (zh) | 2013-04-24 |
CN103064711B true CN103064711B (zh) | 2016-03-16 |
Family
ID=48107348
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210581392.6A Active CN103064711B (zh) | 2012-12-27 | 2012-12-27 | 一种基于Spread分布式应用系统的热加载方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103064711B (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103533064A (zh) * | 2013-10-21 | 2014-01-22 | 济南政和科技有限公司 | 不间断网络用户在线状态的服务器程序升级方法 |
CN105634767A (zh) * | 2014-10-29 | 2016-06-01 | 中兴通讯股份有限公司 | 北向接口分布式管理方法及装置 |
CN106161110B (zh) * | 2016-08-31 | 2019-05-17 | 东软集团股份有限公司 | 一种网络设备中的数据处理方法及系统 |
CN108170464A (zh) * | 2017-12-27 | 2018-06-15 | 联想(北京)有限公司 | 一种版本升级方法、服务平台及电子设备 |
CN108712298B (zh) * | 2018-08-28 | 2021-08-13 | 深信服科技股份有限公司 | 网络设备升级方法、装置、网络设备及存储介质 |
CN110750313B (zh) * | 2019-10-21 | 2023-07-25 | 北京百度网讯科技有限公司 | 一种中间件的热加载方法、装置、电子设备及存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1514611A (zh) * | 2002-12-10 | 2004-07-21 | 国际商业机器公司 | 用于分布式消息传送系统中匿名群组消息传送的方法和设备 |
CN1783003A (zh) * | 2004-12-02 | 2006-06-07 | 华为技术有限公司 | 一种程序在线加载方法 |
CN101179430A (zh) * | 2007-12-03 | 2008-05-14 | 中兴通讯股份有限公司 | 一种分布式系统软件版本更新控制装置及方法 |
CN102053853A (zh) * | 2010-12-30 | 2011-05-11 | 北京像素软件科技股份有限公司 | 一种网络游戏版本更新方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9300486B2 (en) * | 2007-08-16 | 2016-03-29 | International Business Machines Corporation | Dynamically managing a system of servers |
-
2012
- 2012-12-27 CN CN201210581392.6A patent/CN103064711B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1514611A (zh) * | 2002-12-10 | 2004-07-21 | 国际商业机器公司 | 用于分布式消息传送系统中匿名群组消息传送的方法和设备 |
CN1783003A (zh) * | 2004-12-02 | 2006-06-07 | 华为技术有限公司 | 一种程序在线加载方法 |
CN101179430A (zh) * | 2007-12-03 | 2008-05-14 | 中兴通讯股份有限公司 | 一种分布式系统软件版本更新控制装置及方法 |
CN102053853A (zh) * | 2010-12-30 | 2011-05-11 | 北京像素软件科技股份有限公司 | 一种网络游戏版本更新方法 |
Also Published As
Publication number | Publication date |
---|---|
CN103064711A (zh) | 2013-04-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103064711B (zh) | 一种基于Spread分布式应用系统的热加载方法 | |
EP3758293A1 (en) | Service upgrade management method, apparatus, and storage medium | |
US9141491B2 (en) | Highly available server system based on cloud computing | |
JP6514687B2 (ja) | ローカルまたは分散型コンピュータ・システムにおける柔軟なノード構成方法およびシステム | |
CN104579719A (zh) | 一种固件的升级方法和系统、上位机和光模块 | |
CN103647849A (zh) | 一种业务迁移方法、装置和一种容灾系统 | |
US20220413937A1 (en) | Node management method, device and apparatus, storage medium, and system | |
CN103532823A (zh) | 物联网消息处理方法、装置及系统 | |
WO2015158120A1 (zh) | 一种软件版本升级的方法及装置 | |
CN106982133B (zh) | 一种更改虚拟网卡配置信息的方法、设备及系统 | |
CN101673205B (zh) | 接口板升级方法及系统 | |
CN103077034B (zh) | 混合虚拟化平台java应用迁移方法与系统 | |
CN103856349A (zh) | 多核路由器的版本升级处理方法及多核路由器 | |
CN114285695B (zh) | 通信方法、装置、设备、系统和存储介质 | |
CN104683486A (zh) | 分布式系统中处理同步消息的方法、装置、分布式系统 | |
US20220231907A1 (en) | METHOD AND APPARATUS FOR TRIGGERING vOMCI FUNCTION FROM OLT TO SEND OMCI MESSAGES | |
WO2013135016A1 (zh) | 版本的构建系统及方法 | |
EP3316518B1 (en) | Method and device for upgrading virtual network element, and computer storage medium | |
CN114679349B (zh) | 一种数据通信方法及装置 | |
CN107220129B (zh) | 一种软件模块间的通信方法和系统 | |
CN102355370B (zh) | 以太网板级保护的方法、装置和系统 | |
CN104320282A (zh) | 虚拟边缘端口汇聚系统中虚拟机主备切换方法及物理主机 | |
CN102651877B (zh) | 一种多模设备数据管理方法及多模设备 | |
CN111813001A (zh) | 设备协同控制方法、可协同控制的设备及协同系统 | |
CN101436139A (zh) | Fpga下载方法和装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |