应用发布管理
#
目标- 实现应用程序不中断自动发布
#
实现原理- 运行中的应用服务进程需要记录处理中的请求数及执行中的存储过程数
- 需要重新启动应用服务时守护进程向应用服务进程发送重新启动信号
- 应用服务进程接收到重新启动信号时不再接收新的请求,也不再启动新的存储过程
此时,如果接收到新的请求,应用服务需返回
503 Service Unavailable
错误,根据前面章节的配置,负载均衡服务器在取得该错误后会将请求继续转发给其他可用的应用服务器。 - 当处理完所有请求和存储过程后,重新启动应用服务进程
#
代码示例下面以 PM2(作为守护进程)和 Node.js(作为应用服务)为例。
假设有如下服务器实例:
内网 IP 地址 | 用途 | 分布式 文件系统 挂载点 | 备注 |
---|---|---|---|
10.0.0.1 | 代码发布服务器 | /mnt/dfs | 应用工程包上传路径:/mnt/dfs/src 应用工程包解压路径:/mnt/dfs/dist/example-{timestamp} 最新代码路径:/mnt/dfs/dist/example → /mnt/dfs/dist/example-{timestamp} |
10.0.0.2 | 应用服务器#1 | /mnt/dfs | 应用工程路径:/var/www/example → /mnt/dfs/dist/example |
... | ... | /mnt/dfs | 应用工程路径:/var/www/example → /mnt/dfs/dist/example |
10.0.0.n | 应用服务器#n | /mnt/dfs | 应用工程路径:/var/www/example → /mnt/dfs/dist/example |
配置应用服务工程(example)的 package.json
文件中的重新启动脚本:
package.json
app.json
index.js(参考:PM2: Graceful Stop)
在代码发布服务器上设置定时任务,每隔一段时间(如5分钟)执行以下代码,以实现自动更新服务器代码:
在应用服务器上设置定时任务,每隔一段时间(如5分钟)执行以下代码,以实现自动启动应用服务进程:
避免所有应用服务器同时执行以下脚本,否则可能将导致短时间内服务器无响应。
至此,将应用服务的代码打包并上传到代码发布服务器的 /mnt/dfs/src
路径下后,应用服务进程即可在设定的时间内完成自动发布和重新启动。