CN111010422B - 一种优雅停机的系统及方法 - Google Patents

一种优雅停机的系统及方法 Download PDF

Info

Publication number
CN111010422B
CN111010422B CN201911125871.5A CN201911125871A CN111010422B CN 111010422 B CN111010422 B CN 111010422B CN 201911125871 A CN201911125871 A CN 201911125871A CN 111010422 B CN111010422 B CN 111010422B
Authority
CN
China
Prior art keywords
application
nginx
platform
node
consul
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
Application number
CN201911125871.5A
Other languages
English (en)
Other versions
CN111010422A (zh
Inventor
刘勤红
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Xiyun Information Technology Co ltd
Original Assignee
Beijing Xiyun Information Technology Co ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Beijing Xiyun Information Technology Co ltd filed Critical Beijing Xiyun Information Technology Co ltd
Priority to CN201911125871.5A priority Critical patent/CN111010422B/zh
Publication of CN111010422A publication Critical patent/CN111010422A/zh
Application granted granted Critical
Publication of CN111010422B publication Critical patent/CN111010422B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/02Protocols based on web technology, e.g. hypertext transfer protocol [HTTP]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/31Programming languages or programming paradigms
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/50Network services
    • H04L67/51Discovery or management thereof, e.g. service location protocol [SLP] or web services
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/50Network services
    • H04L67/60Scheduling or organising the servicing of application requests, e.g. requests for application data transmissions using the analysis and optimisation of the required network resources

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computing Systems (AREA)
  • Management, Administration, Business Operations System, And Electronic Commerce (AREA)

Abstract

一种优雅停机系统及方法。所述系统包括:请求端;网络代理模块;应用模块;CI/CD模块;资源模块。基于所述系统,实现一种低侵入式优雅停机方法,包括以下步骤:S1:优雅停机服务启动;S2:优雅停机服务停止。所述系统和方法能够统一进行优雅停机,从而避免影响下游应用,保持系统的稳定性。

Description

一种优雅停机的系统及方法
技术领域
本发明涉及本发明涉及服务器技术领域,尤其涉及一种低侵入式优雅停机系统和方法。
背景技术
近年来,随着互联网技术的快速发展,Docker作为开源的应用容器引擎,受到很多公司的欢迎。他们都在采用基于docker的微服务架构,这使得应用被拆的越来越细,应用之间的依赖关系也越来越复杂。与此同时,传统的基于虚拟机的服务也仍然在继续运行着,这两种方式使得系统的架构越来越复杂。如何保证在这种复杂的系统架构中上游应用上线升级时不影响下游业务的稳定性变得越来越困难,也越来越重要,尤其是在高并发的支付场景中。
为了避免业务异常情形,优雅停机方法成为各大互联网基础组件所采用的方法,但都不能保证完全不丢请求。优雅停机,是在对应用进程发送停止指令之后,能保证正在执行的业务操作不受影响。应用接收到停止指令之后的步骤应该是,停止接收访问请求,等待已经接收到的请求处理完成,并能成功返回,这时才真正停止应用。常用方法有以下几种:Nginx在转发请求时,如果反向代理节点不通,则摘除该节点10秒,10秒后再次将该节点挂载回来,如此反复。tomcat、resin这些容器的优雅停机只提供了内部的优雅停机能力,并不能将自身节点从链路上移除。并且,这些容器stop流程并不会执行jvm hook。RPC框架dubbo则没有实现优雅停机,服务消费者在收到停止信号时会直接断开和服务提供者的连接。而且在现有技术中至少还存在以下问题:在请求链路的各个节点上都有简单的实现优雅停机,但都各自为政,没有形成统一的整体,并且不能达到上游应用部署上线不影响下游应用的稳定的目的。
发明内容
本发明旨在至少在一定程度上解决相关技术中的技术问题之一。为此,本发明的一个目的是提供一种低侵入式优雅停机系统,以使其能够统一进行优雅停机,从而避免影响下游应用,保持系统的稳定性。
为了实现上述目的,本发明第一方面实施例的一种低侵入式优雅停机系统,包括:请求端;网络代理模块;应用模块;CI/CD模块;资源模块;
另外,根据本发明上述应用于低侵入式优雅停机系统还可以具有如下附加的技术特征:
在本发明的一个实施例中,所述请求端为APP客户端和/或Web浏览器。
在本发明的一个实施例中,所述网络代理模块,包括:Nginx服务器;所述Nginx服务器支持lua语言动态编程,在本发明的优雅停机中,所述lua语言动态编程实现:
(1)将每个应用对应的Nginx地址写入Redis,以便应用停止时摘除流量知道调用的Nginx地址;
(2)动态的将指定节点从Nginx upstream列表中删除。
在本发明的一个实施例中,所述应用模块包括Web应用以及中心应用;所述Web应用以及中心应用还进一步包括docker引擎及虚拟机;所述web应用为业务的入口;所述中心应用为不直接对外提供服务的应用,提供dubbo服务给web应用调用;
在本发明的一个实施例中,所述中心应用为交易中心。
在本发明的一个实施例中,所述应用模块还包括Pandora Shutdown组件,所述Pandora Shutdown组件为优雅停机核心Java组件,负责应用停止时摘除节点和应用启动时挂载节点。
在本发明的一个实施例中,所述Pandora Shutdown组件,进一步地包括如下组件:Consul Template:Consul-Template是基于Consul的自动替换配置文件的应用,负责将docker节点信息写入Nginx upstream;Consul:docker容器的注册发现服务;Redis:负责存储每个应用部署的Nginx地址;ZK:分布式的注册发现服务zookeeper;所述ZK是RPC框架dubbo的注册中心;
在本发明的一个实施例中,所述CI/CD模块为持续集成(CI)和持续交付(CD)模块。所述CI/CD模块进一步的包括:CE平台,所述CE平台为集成基础平台,应用发布上线入口;SW平台,所述SW平台为智能运维平台,驱动OpenStack,发布虚拟机应用;TS平台,所述TS平台为持续集成平台,驱动Marathon,发布docker容器应用;Jenkins服务器,所述Jenkins服务器为可扩展的自动化服务器。
在本发明的一个实施例中,所述资源模块还包括Marathon平台、Mesos平台、OpenStack平台;所述Marathon平台为:容器编排平台,与Mesos配合使用;
所述Mesos平台为:资源管理和调度平台,容器应用的载体;所述OpenStack平台为:虚拟机资源调度和管理平台。
本发明的第二个目的是提供一种低侵入式优雅停机方法,以使其能够统一进行优雅停机,从而避免影响下游应用,保持系统的稳定性。
为了实现上述目的,本发明第二方面实施例的一种低侵入式优雅停机方法,包括以下步骤:S1:优雅停机服务启动;S2:优雅停机服务停止。
另外,根据本发明上述应用于低侵入式优雅停机方法还可以具有如下附加的技术特征:
所述步骤S1优雅停机服务启动,进一步地包括:S11:初始化;S12:反射;S13:注册Pandora jvm hook;S14:将本机挂载到Nginx;S15:完成初始化;
在本发明的一个实施例中,所述S11:初始化,采用spring框架,并对其对象bean进行初始化;
在本发明的一个实施例中,所述S12:反射的具体步骤为:应用在启动时会加载Pandora Shutdown提供的GracefulShutdownBean,GracefulShutdownBean初始化时会通过反射移除dubbo jvm hook。
在本发明的一个实施例中,所述步骤S14:将本机挂载到Nginx进一步包括:启动新线程,并执行下述步骤:S141:执行健康检查,判断是否完成;S142:若完成,则判断是否进行容器部署;若是,则转入步骤S143;若否则转入步骤S146-S147;S143:调用consul查询节点列表接口;S144:判断本节点是否注册到consul,若是则结束当前线程;若否,则执行步骤S145:调用consul节点注册接口注册本节点;注册完成后结束当前线程。S146:从redis获取挂在了本工程的Nginx列表;S147:调用Nginx的lua接口挂载本节点;挂载完成后结束当前线程。
在本发明的一个实施例中,所述S141:执行健康检查,判断是否完成;是指循环检测本节点是否能够正常提供服务。
在本发明的一个实施例中,所述S14:将本机挂载到Nginx,通过调用Consul或者Nginx lua注册本节点。其中,虚拟机应用调用的是Nginx lua接口将本节点直接加到Nginxupstream中;docker容器应用调用Consul接口,将本节点写入Consul节点列表中,Consul会自动触发Consul Template刷新Nginx upstream并reload。
所述步骤S2优雅停机服务停止,进一步地包括:S21:收到停止触发信号;S22:pandora hook开始执行;S23:标记jvm hook已经开始执行;S24:断开dubbo注册中心;S25:判断是否进行容器部署;若是,则执行步骤S26;若否,则执行步骤s29-S30;S26:调用consul接口摘除本节点;S27:执行dubbo hook;S28:休眠,直至第一阈值时间结束,流程结束。S29:从redis获取Nginx列表;S30:摘除Nginx流量;继续转入步骤S27。
所述第一阈值时间最佳为5秒。
在本发明的一个实施例中,所述S21:收到停止触发信号,包括:收到kill信号或收到resin stop或restart信号。
在本发明的一个实施例中,若所述S21:收到停止触发信号为收到resin stop或restart信号,则执行:步骤S31:bean对象撤销;步骤S32:判断jvm hook是否已经执行,若已经执行,则流程结束;若未执行,则执行步骤S33;S33:反射执行ApplicationShutdownHooks.runHooks;并转入步骤S22后依次执行,直至流程结束。
本发明的有益效果在于:1.本发明解决了上述由于现有网络架构的多样性和应用之间依赖关系的复杂性而导致应用发布上线时造成用户访问服务失败的情况:1)、应用停止前摘除链路上自身节点;2)、应用停止中不应该有新的请求进入应用;3)、应用停止过程应该有足够的时间来保证已进入应用的请求能够正常执行完;4)、支持业务方实现自己的应用停机逻辑。
2.本发明能够整个发布上线流程保证了上线过程中应用的可用节点数不会少于设定的节点数,不会因为上线而造成系统性能下降,影响下游服务的稳定性。
3.本发明一种低侵入的方式实现了可靠的优雅停机,保证了无论是虚拟机服务还是docker服务在上线部署的时候不会丢失任何一个请求。对于web应用来说,在应用收到停机指令之后,Pandora Shutdown立即将本节点从Nginx upstream中摘除,也就是应用收到停机指令之后就不会有新的请求进来。同时,我们延时了dubbo jvm hook的执行时间,保证了已进入本节点的请求都能正常执行完。对于中心应用来说,应用收到停机指令之后会立即通过反射调用dubbo的degister函数将本节点从ZK中删除,保证服务消费者不再调用本节点服务。
附图说明
图1是根据本发明一个实施例的优雅停机系统的示意图;
图2是根据本发明一个实施例的用于优雅停机方法的启动流程图;
图3是根据本发明一个实施例的用于优雅停机方法的停止流程图。
具体实施方式
下面详细描述本发明的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,旨在用于解释本发明,而不能理解为对本发明的限制。
下面参考附图描述根据本发明实施例的用于地图边界处理的方法。
图1是根据本发明一个实施例的优雅停机系统的示意图。如图1所示,该系统包括:请求端;网络代理模块;应用模块;CI/CD模块;资源模块;
另外,根据本发明上述应用于低侵入式优雅停机系统还可以进一步地具有如下特征:
在本发明的一个实施例中,所述请求端为APP客户端和/或Web浏览器。
在本发明的一个实施例中,所述网络代理模块,包括:Nginx服务器;所述Nginx服务器支持lua语言动态编程,在本发明的优雅停机中,所述lua语言动态编程实现:
(1)将每个应用对应的Nginx地址写入Redis,以便应用停止时摘除流量知道调用的Nginx地址;
(2)动态的将指定节点从Nginx upstream列表中删除。
在本发明的一个实施例中,所述应用模块包括Web应用以及中心应用;所述Web应用以及中心应用还进一步包括docker引擎及虚拟机;所述web应用为业务的入口;所述中心应用为不直接对外提供服务的应用,提供dubbo服务给web应用调用;
在本发明的一个实施例中,所述中心应用为交易中心。
在本发明的一个实施例中,所述应用模块还包括Pandora Shutdown组件,所述Pandora Shutdown组件为优雅停机核心Java组件,负责应用停止时摘除节点和应用启动时挂载节点。
在本发明的一个实施例中,所述Pandora Shutdown组件,进一步地包括如下组件:Consul Template:Consul-Template是基于Consul的自动替换配置文件的应用,负责将docker节点信息写入Nginx upstream;Consul:docker容器的注册发现服务;Redis:负责存储每个应用部署的Nginx地址;ZK:分布式的注册发现服务zookeeper;所述ZK是RPC框架dubbo的注册中心;
在本发明的一个实施例中,所述CI/CD模块为持续集成(CI)和持续交付(CD)模块。所述CI/CD模块进一步的包括:CE平台,所述CE平台为集成基础平台,应用发布上线入口;SW平台,所述SW平台为智能运维平台,驱动OpenStack,发布虚拟机应用;TS平台,所述TS平台为持续集成平台,驱动Marathon,发布docker容器应用;Jenkins服务器,所述Jenkins服务器为可扩展的自动化服务器。
在本发明的一个实施例中,所述资源模块还包括Marathon平台、Mesos平台、OpenStack平台;所述Marathon平台为:容器编排平台,与Mesos配合使用;
所述Mesos平台为:资源管理和调度平台,容器应用的载体;所述OpenStack平台为:虚拟机资源调度和管理平台。
功能模块解释:
lua:Nginx支持lua语言动态编程,在优雅停机中,lua主要负责两件事:
将每个应用对应的Nginx地址写入Redis,以便应用停止时摘除流量知道调用的Nginx地址;
动态的将指定节点从Nginx upstream列表中删除。
web应用:调用链中紧跟在Nginx后面的应用,也就是我们业务的入口;
中心应用:不直接对外提供服务的应用,提供dubbo服务给web应用调用,比如交易中心;
Pandora Shutdown:优雅停机核心Java组件,负责应用停止时摘除节点和应用启动时挂载节点;
Consul Template:Consul-Template是基于Consul的自动替换配置文件的应用,负责将docker节点信息写入Nginx upstream;
Consul:docker容器的注册发现服务;
Redis:负责存储每个应用部署的Nginx地址;
ZK:分布式的注册发现服务zookeeper,这里充当是RPC框架dubbo的注册中心;
CE:自研持续集成基础平台,应用发布上线入口;
SW:自研智能运维平台,驱动OpenStack,发布虚拟机应用;
TS:自研持续集成平台,负责驱动Marathon,发布docker容器应用;
Marathon:容器编排平台,与Mesos配合使用;
Mesos:资源管理和调度平台,容器应用的载体;
OpenStack:虚拟机资源调度和管理平台。
图2是根据本发明一个实施例的用于上述系统的优雅停机方法的启动流程图。图3是根据本发明一个实施例的用于上述系统的优雅停机方法的停止流程图。如图2和图3所示,该处理方法包括以下步骤:
为了实现上述目的,本发明第二方面实施例的一种低侵入式优雅停机方法,包括以下步骤:S1:优雅停机服务启动;S2:优雅停机服务停止。
另外,根据本发明上述应用于低侵入式优雅停机方法还可以具有如下附加的技术特征:
所述步骤S1优雅停机服务启动,进一步地包括:S11:初始化;S12:反射;S13:注册Pandora jvm hook;S14:将本机挂载到Nginx;S15:完成初始化;
在本发明的一个实施例中,所述S11:初始化,采用spring框架,并对其对象bean进行初始化;
在本发明的一个实施例中,所述S12:反射的具体步骤为:应用在启动时会加载Pandora Shutdown提供的GracefulShutdownBean,GracefulShutdownBean初始化时会通过反射移除dubbo jvm hook。
在本发明的一个实施例中,所述步骤S14:将本机挂载到Nginx进一步包括:启动新线程,并执行下述步骤:S141:执行健康检查,判断是否完成;S142:若完成,则判断是否进行容器部署;若是,则转入步骤S143;若否则转入步骤S146-S147;S143:调用consul查询节点列表接口;S144:判断本节点是否注册到consul,若是则结束当前线程;若否,则执行步骤S145;S145:调用consul节点注册接口注册本节点;注册完成后结束当前线程。S146:从redis获取挂在了本工程的Nginx列表;S147:调用Nginx的lua接口挂载本节点;挂载完成后结束当前线程。
在本发明的一个实施例中,所述S141:执行健康检查,判断是否完成;是指循环检测本节点是否能够正常提供服务。
在本发明的一个实施例中,所述S14:将本机挂载到Nginx,通过调用Consul或者Nginx lua注册本节点。其中,虚拟机应用调用的是Nginx lua接口将本节点直接加到Nginxupstream中;docker容器应用调用Consul接口,将本节点写入Consul节点列表中,Consul会自动触发Consul Template刷新Nginx upstream并reload。
所述步骤S2优雅停机服务停止,进一步地包括:S21:收到停止触发信号;S22:pandora hook开始执行;S23:标记jvm hook已经开始执行;S24:断开dubbo注册中心;S25:判断是否进行容器部署;若是,则执行步骤S26;若否,则执行步骤s29-S30;S26:调用consul接口摘除本节点;S27:执行dubbo hook;S28:休眠,直至第一阈值时间结束,流程结束。S29:从redis获取Nginx列表;S30:摘除Nginx流量;继续转入步骤S27。
在本发明的一个实施例中,所述S21:收到停止触发信号,包括:收到kill信号或收到resin stop或restart信号;
在本发明的一个实施例中,若所述S21:收到停止触发信号为收到resin stop或restart信号,则执行:步骤S31:bean对象撤销;步骤S32:判断jvm hook是否已经执行,若已经执行,则流程结束;若未执行,则执行步骤S33;S33:反射执行ApplicationShutdownHooks.runHooks;并转入步骤S22后依次执行,直至流程结束。
如图2所示,应用在启动时会加载Pandora Shutdown提供的GracefulShutdownBean,GracefulShutdownBean初始化时会通过反射移除dubbo jvmhook,并注册Pandora jvm hook。原因是dubbo jvm hook一旦执行,所有正在进行中的dubbo调用会立即失败。在这之后,GracefulShutdownBean会启动一个线程,新线程循环检测本节点能够正常提供服务之后调用Consul或者Nginx lua注册本节点。其中,虚拟机应用调用的是Nginx lua接口将本节点直接加到Nginx upstream中;docker容器应用调用Consul接口,将本节点写入Consul节点列表中,Consul会自动触发Consul Template刷新Nginx upstream并reload。
如图3所示,在应用停止时,不论是调用resin的stop、restart命令还是直接收到系统的kill信号都会触发优雅停机流程,也就是在服务初始化时注册的Pandora jvmhook。其中,虚拟机应用停机触发resin stop,docker容器应用停机是接收到系统kill信号。
从图3的流程上,我们可以看到,不论是虚拟机应用停机还是docker容器应用停机都会保证所有jvm hook能够执行。所以业务方要想在停机时实现自己的逻辑,只需要注册一个jvm hook即可,非常简单方便。
下面以docker容器应用为例,详细说明发布上线流程。
持续集成平台(CE+SW+TS+Jenkins)提交上线计划并构建docker镜像;
继续集成平台调用Marathon部署镜像;
Marathon调用Mesos启动一半节点数的新节点;
GracefulShutdownBean通过反射移除dubbo jvm hook;
GracefulShutdownBean注册Pandora jvm hook;
GracefulShutdownBean启动线程AddFlow准备挂载本节点;
AddFlow循环检测节点是否正常启动,直至正常启动为止;
AddFlow调用Consul节点列表接口判断本节点是否已经注册到Consul,如果已经注册,则结束本流程;
AddFlow调用Consul节点注册接口,注册本节点;
Consul触发Consul Template刷新Nginx配置文件
Consul Template触发Nginx reload
Marathon调用Mesos停止一半节点数老节点;
docker服务执行镜像中finish脚本;
java进程收到kill信号;
jvm执行java.lang.ApplicationShutdownHooks.runHooks函数;
jvm执行Pandora jvm hook;
Pandora jvm hook调用Consul节点列表接口,查找本节点在Consul中的注册ID;
Pandora jvm hook调用Consul摘除节点接口
Consul触发Consul Template刷新Nginx配置文件
Consul Template触发Nginx reload
Marathon调用Mesos启动剩下一半节点数的新节点;
Marathon调用Mesos停止剩下一半节点数老节点。
整个发布上线流程保证了上线过程中应用的可用节点数不会少于设定的节点数,不会因为上线而造成系统性能下降,影响下游服务的稳定性。
通过本发明的方法,1.解决了上述由于现有网络架构的多样性和应用之间依赖关系的复杂性而导致应用发布上线时造成用户访问服务失败的情况:1)、应用停止前摘除链路上自身节点;2)、应用停止中不应该有新的请求进入应用;3)、应用停止过程应该有足够的时间来保证已进入应用的请求能够正常执行完;4)、支持业务方实现自己的应用停机逻辑。
2.本发明能够整个发布上线流程保证了上线过程中应用的可用节点数不会少于设定的节点数,不会因为上线而造成系统性能下降,影响下游服务的稳定性。
3.本发明一种低侵入的方式实现了可靠的优雅停机,保证了无论是虚拟机服务还是docker服务在上线部署的时候不会丢失任何一个请求。对于web应用来说,在应用收到停机指令之后,Pandora Shutdown立即将本节点从Nginx upstream中摘除,也就是应用收到停机指令之后就不会有新的请求进来。同时,我们延时了dubbo jvm hook的执行时间,保证了已进入本节点的请求都能正常执行完。对于中心应用来说,应用收到停机指令之后会立即通过反射调用dubbo的degister函数将本节点从ZK中删除,保证服务消费者不再调用本节点服务。
虽然已经参考优选实施例对本发明进行了描述,但在不脱离本发明的范围的情况下,可以对其进行各种改进并且可以用等效物替换其中的部件。尤其是,只要不存在结构冲突,各个实施例中所提到的各项技术特征均可以任意方式组合起来。以上仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。

Claims (8)

1.一种低侵入式优雅停机方法,其特征在于,包括如下步骤:S1:优雅停机服务启动;S2:优雅停机服务停止;
所述步骤S1优雅停机服务启动,进一步地包括:S11:初始化,采用spring框架,并对其对象bean进行初始化;S12:应用在启动时会加载Pandora Shutdown提供的GracefulShutdownBean,GracefulShutdownBean初始化时会通过反射移除dubbo jvmhook;S13:注册Pandora jvm hook;S14:将本机挂载到Nginx,通过调用Consul或者Nginxlua注册本节点;其中,虚拟机应用调用的是Nginxlua接口将本节点直接加到Nginxupstream中;docker容器应用调用Consul接口,将本节点写入Consul节点列表中,Consul会自动触发Consul Template刷新Nginx upstream并reload;S15:完成初始化;
所述步骤S2优雅停机服务停止,进一步地包括:S21:收到停止触发信号;S22:pandorahook开始执行;S23:标记jvm hook已经开始执行;S24:断开dubbo注册中心;S25:判断是否进行容器部署;若是,则执行步骤S26;若否,则执行步骤S29-S30;S26:调用consul接口摘除本节点;S27:执行dubbo hook;S28:休眠,直至第一阈值时间结束,流程结束;S29:从redis获取Nginx列表;S30:摘除Nginx流量;继续转入步骤S27。
2.如权利要求1所述的低侵入式优雅停机方法,其特征在于,所述步骤S14:将本机挂载到Nginx进一步包括:启动新线程,并执行下述步骤:S141:执行健康检查,判断是否完成;S142:若完成,则判断是否进行容器部署;若是,则转入步骤S143;若否则转入步骤S146-S147;S143:调用consul查询节点列表接口;S144:判断本节点是否注册到consul,若是则结束当前线程;若否,则执行步骤S145:调用consul节点注册接口注册本节点;注册完成后结束当前线程;S146:从redis获取挂在了本工程的Nginx列表;S147:调用Nginx的lua接口挂载本节点;挂载完成后结束当前线程。
3.一种应用权利要求1所述低侵入式优雅停机方法的低侵入式优雅停机系统,其特征在于,包括:请求端;网络代理模块;应用模块;CI/CD模块;资源模块;
所述请求端为APP客户端和/或Web浏览器;
所述网络代理模块,包括:Nginx服务器;
所述应用模块包括Web应用以及中心应用、Pandora Shutdown组件;
所述CI/CD模块为持续集成(CI)和持续交付(CD)模块;
所述资源模块还包括Marathon平台、Mesos平台、OpenStack平台。
4.如权利要求3所述的低侵入式优雅停机系统,其特征在于,所述Nginx服务器支持lua语言动态编程,所述lua语言动态编程实现:(1)将每个应用对应的Nginx地址写入Redis,以便应用停止时摘除流量知道调用的Nginx地址;(2)动态的将指定节点从Nginx upstream列表中删除。
5.如权利要求4所述的低侵入式优雅停机系统,其特征在于,所述Web应用以及中心应用还进一步包括docker引擎及虚拟机;所述web应用为业务的入口;所述中心应用为不直接对外提供服务的应用,提供dubbo服务给web应用调用。
6.如权利要求5所述的低侵入式优雅停机系统,其特征在于,所述Pandora Shutdown组件为优雅停机核心Java组件,负责应用停止时摘除节点和应用启动时挂载节点;所述Pandora Shutdown组件,进一步地包括如下组件:ConsulTemplate:Consul-Template是基于Consul的自动替换配置文件的应用,负责将docker节点信息写入Nginx upstream;Consul:docker容器的注册发现服务;Redis:负责存储每个应用部署的Nginx地址;ZK:分布式的注册发现服务zookeeper;所述ZK是RPC框架dubbo的注册中心。
7.如权利要求6所述的低侵入式优雅停机系统,其特征在于,所述CI/CD模块进一步的包括:CE平台,所述CE平台为集成基础平台,应用发布上线入口;SW平台,所述SW平台为智能运维平台,驱动OpenStack,发布虚拟机应用;TS平台,所述TS平台为持续集成平台,驱动Marathon,发布docker容器应用;Jenkins服务器,所述Jenkins服务器为可扩展的自动化服务器。
8.如权利要求7所述的低侵入式优雅停机系统,其特征在于,所述Marathon平台为:容器编排平台,与Mesos配合使用;所述Mesos平台为:资源管理和调度平台,容器应用的载体;所述OpenStack平台为:虚拟机资源调度和管理平台。
CN201911125871.5A 2019-11-18 2019-11-18 一种优雅停机的系统及方法 Active CN111010422B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201911125871.5A CN111010422B (zh) 2019-11-18 2019-11-18 一种优雅停机的系统及方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201911125871.5A CN111010422B (zh) 2019-11-18 2019-11-18 一种优雅停机的系统及方法

Publications (2)

Publication Number Publication Date
CN111010422A CN111010422A (zh) 2020-04-14
CN111010422B true CN111010422B (zh) 2022-07-15

Family

ID=70112634

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201911125871.5A Active CN111010422B (zh) 2019-11-18 2019-11-18 一种优雅停机的系统及方法

Country Status (1)

Country Link
CN (1) CN111010422B (zh)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112114881B (zh) * 2020-08-24 2023-05-02 上海汇付支付有限公司 一种基于微服务的上线方法和上线系统
CN112532722B (zh) * 2020-11-27 2023-03-24 中国—东盟信息港股份有限公司 一种基于Kubernetes云原生集群节点优雅关机的方法
CN112911008B (zh) * 2021-02-04 2023-04-18 中国工商银行股份有限公司 云计算容器上线、下线方法及装置
CN112860328B (zh) * 2021-02-08 2024-04-30 中国工商银行股份有限公司 服务器的控制方法、装置、计算设备和介质
CN113238810A (zh) * 2021-02-24 2021-08-10 紫光云技术有限公司 一种基于linux的service配置redis的方法

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109725908A (zh) * 2017-10-26 2019-05-07 卓望数码技术(深圳)有限公司 一种应用软件自动发布系统以及方法
US10705499B2 (en) * 2018-03-30 2020-07-07 Schlumberger Technology Corporation System and method for automated shutdown and startup for a network
CN109189680B (zh) * 2018-08-24 2019-08-06 苏州玩友时代科技股份有限公司 一种应用发布和配置的系统及方法

Also Published As

Publication number Publication date
CN111010422A (zh) 2020-04-14

Similar Documents

Publication Publication Date Title
CN111010422B (zh) 一种优雅停机的系统及方法
US10642599B1 (en) Preemptive deployment in software deployment pipelines
CN106991035B (zh) 一种基于微服务架构的主机监控系统
CN112118565B (zh) 多租户服务灰度发布方法、装置、计算机设备和存储介质
CN106790694B (zh) 分布式系统及分布式系统中目标对象的调度方法
CN112506617B (zh) Kubernetes集群中边车容器的镜像更新方法及装置
US6983400B2 (en) Distributed test harness model
US20170161059A1 (en) Management of multiple application programming interface versions for development environments
US7499991B2 (en) Autonomic application server unneeded process disablement
US20030177486A1 (en) Method and system for performing SW upgrade in a real-time system
CN106959866A (zh) 一种日志收集客户端及其升级方法
WO2012054160A2 (en) High availability of machines during patching
EP2959387B1 (en) Method and system for providing high availability for state-aware applications
CN109271154B (zh) 应用开发平台及其运行方法
CN109639818B (zh) 一种云环境下的服务发现方法、装置、服务器和存储介质
EP2008400A1 (en) Method, system and computer program for the centralized system management on endpoints of a distributed data processing system
US20130086584A1 (en) Control device, control method, and control program
CN109347652A (zh) 服务器集群的服务管理方法和装置
US20170161028A1 (en) State machine representation of a development environment deployment process
CN107220074A (zh) 对支撑层软件功能的访问、升级方法及装置
CN109522055B (zh) 基于分布式服务调用的连接预热方法及系统
CN110895483A (zh) 任务恢复方法及装置
CN106789308A (zh) 一种微服务架构可自动伸缩的gis服务装置及其控制方法
CN109445937A (zh) 一种组件化编程及无缝执行方法
US10120707B2 (en) Deployment of development environments

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant