ntt360 / pmon2

golang进程管理工具(golang process manager)
Apache License 2.0
988 stars 133 forks source link

请教一下细节 #9

Closed yddeng closed 2 years ago

yddeng commented 2 years ago

我自己也弄了一个进程管理平台 https://github.com/yddeng/amp 在细节上想请教一下

  1. 程序版本更新,现在我是直接上传到服务器的目标覆盖了原有的文件。想要弄成多个版本历史可以更新和回滚。
  2. 能否控制每个进程的资源
  3. 程序一般都有自定义的日志输出,怎么通过平台查看日志。
apptut commented 2 years ago

@yddeng

  1. 第一个我理解你说的程序是业务进程版本更新,这个我建议你要么你通过git的CI,CD或者公司其他自动化构建设计一个版本管理系统即可。覆盖源文件其实也没问题,因为go进程启动时已经在内存,除非重新load,所以你直接替换源文件其实也没大问题,问题在于旧的版本文件保存在哪里。对于一个小项目来说可能你想用进程管理程序直接保存在这台服务器本地,但是文件多会占用磁盘,而且每个服务器都要存储。如果你看k8s这种平台,他们会把单独的构建版本考虑放在s3这种单独文件系统里,回滚就再重新下载覆盖,不建议你直接在服务器直接保存旧版本,建议是单独保存,回滚再走重新上传的逻辑。
  2. 进程管理工具一般是系统级,或者是父级进程,是可以做到控制某个被他启动的子进程资源,例如Pmon2启动每个进程都有一张进程表,进程想细信息都有,如果你说的像通过平台远程控制。那么你这个进程管理client肯定需要设计和你的平台有类似tcp通信,方式有很多,比如http或者socket长链接等。然后通过平台给你的管理进程服务发送相应的操作事件,客户端收到事件后做出不同的处理方式即可,比如重启等。
  3. 关于日志收集,如果考虑的比较多话,这又是另一个很庞大的话题。在虚拟机或者物理机我们一般把程序日志保存为log文件,然后再通过logstash或者filbeat收集上来(es或者kafka里,如何展示,肯定你不是问题),这部分不建议你从头撸,建议使用开源产品即可。

所以总的来说,第1和第3小点不建议进程管理工具本身来做,进程管理工具只负责进程管理即可,像系统systemd类似,这样比较纯粹,职责单一。