您的位置  > 互联网

360导航团队使用go语言开发/app

360导航团队比较早地使用Go语言开发Web服务,在Go服务的流程管理工具选择上也做了很多尝试。

参考:#

参考:go语言中文文档:

Go官方并没有提供任何流程管理工具供大家使用,所以我们在部署在线Go服务时经常会使用其他工具。 常用的方法无非以下几种:

诺哈普 + &

系统内置的常驻进程管理工具(init)

第三方开源工具(、pm2、monit等)

自研(pmon2)

1. nohup + &

nohup 和 & 符号的组合可能是启动常驻进程 () 最常用的方法。 它的伟大之处在于它非常易于使用。

# 启动app进程 nohup bin/app >/tmp/app..log 2>&1 &

但低成本的使用往往也增加了我们后期维护的成本; 例如,如果通过它启动的进程异常退出,如何重新启动它?

因此,如果我们使用这种方式来启动进程,我们还可以添加一个定时任务来定期检测进程是否正常运行。 如果进程异常,尝试重新启动进程。

但Linux内置的最小粒度是分钟级的,这意味着如果使用这种方式,你需要忍受服务至少在分钟级不可用。 或者,您自己实施一项服务。 (感觉这条巷子越走越深)

因此在线环境下不建议使用这种方法,但在开发环境或者临时调试程序时可以使用这种方便的方法。

2.系统级流程管理工具

对于Linux操作系统,提供了系统级的进程管理工具,例如:init.d脚本或者; 启动进程管理工具。

使用系统进程管理工具确实很方便,而且这些系统管理工具启动的进程都是真正的常驻进程,即该进程的父进程不再被这些进程管理工具接管,而是被该进程的父进程接管。初始化进程。 因此,即使流程管理工具本身异常退出,也不会影响已启动的业务流程本身。

使用这种方式唯一的缺点是需要开发对应不同操作系统的流程部署脚本,需要一定的开发工作量。 另外,不同系统的流程管理操作也不同,有一定的学习成本。

3.第三方流程管理工具

还有很多优秀的第三方进程管理工具,比如pm2、monit等,这些进程管理工具可以直接管理go服务二进制文件,很多团队也应该使用它们。 然而使用第三方工具并不完美,你会面临以下问题:

第三方软件环境部署对线上环境有侵入(尚可接受)。

进程管理使用fork()方法,存在服务不可用的风险。

流程管理使用体验问题。

安装第三方软件确实会侵入网络环境。 如果要使用该系统,就必须安装它。 如果要选择pm2,必须安装node环境。 幸运的是,Linux有包管理工具来帮助我们解决这些环境下快速安装的问题,所以目前来说这还是可以接受的。

其次,这些进程管理工具启动的进程都使用了fork()子进程方法。 例如,当我们运行一个进程时,打印结果如下:

(1)────(22443)────测试(22472)────{测试}(22473,22472)

我们会发现我们管理的test进程的父进程是,而不是直接指向Linux的init1进程。

如果你有使用过进程管理工具的经验,你会发现当一个进程启动时,该进程的父进程会交给init进程来托管。 我们看一下托管的nginx进程:

ps-ef | grep 21626 1 0 7 月 ? 00:00:18 nginx: /usr/local/nginx/sbin/ 29148 21626 0 Aug12 ? 00:00:10 nginx: 29149 21626 0 8 月 12 日? 00:00:35 nginx:

你会发现nginx的父进程ID实际上是1,而不是进程ID。 这样做的好处是,即使流程管理工具异常挂掉,业务流程也不会受到影响。

另外,在用户体验方面,pm2在这些流程管理工具中体验最好。 它提供了高端的流程管理界面。 当你用过pm2工具,再看看其他的进程管理工具,你会有一种:“曾几何时,沧海桑田”的感觉。

4.Pmon2的诞生

分析了上述集中式流程管理方式的优缺点后,我们打算自己实现一个流程管理工具,目标如下:

部署简单,减少对在线环境的入侵。

进程直接由init托管,与进程管理工具分离,避免进程的关联影响。

优雅的用户体验。

基于以上三个目标,进程管理工具Pmon2应运而生。 快速使用命令如下:

sudo pmon2 run [./二进制进程文件] [参数1] ...

Pmon2是基于go语言实现的。 在线部署只需要部署编译好的二进制文件,不需要其他依赖。 目前也提供了rpm包,可以直接使用yum安装进行一键部署:

须藤 yum -y pmon2

与进程管理工具类似,pmon2本身管理的进程与pmon2进程管理工具本身是分离的,因此不会因pmon2进程异常崩溃而造成连带影响。

而且,pmon2提供了优雅的进程管理界面来提高用户体验。 对于公司内部使用的项目,pmon2也希望在未来的规划中提供与公司odin平台的自动报警集成。

pmon2的详细使用说明请参考:欢迎大家!