求问 Golang Web 服务的自动重启方案

2020 年 10 月 29 日
 ksedz
现在的 Web 服务由于一些 bug,会导致服务宕掉

自动的 recover 中间件等只能处理当前 goroutine 中的 panic,如果每个 goroutine 都要 recover 处理下就太麻烦了,而且也不能有效排除后续维护人员的偷懒或失误

看了一些相关模块,没有太满意的,期望的是像 supervisor 的那样的功能,但是不想用 python 包,也想用更轻量级的方案。

求问大家是怎么解决的。
3466 次点击
所在节点    Go 编程语言
21 条回复
darylc
2020 年 10 月 29 日
docker
DoctorCat
2020 年 10 月 29 日
写个看门狗脚本,例如 kill YourGoService && ./YourGoService 然后 cronjob 定期运行一次
Maboroshii
2020 年 10 月 29 日
systemd
meshell
2020 年 10 月 29 日
不可能用 supervisor 吗
676529483
2020 年 10 月 29 日
虚机起就 systemd,容器就 docker --restart=always
coderxy
2020 年 10 月 29 日
docker 吧
wellsc
2020 年 10 月 29 日
systemd
zunceng
2020 年 10 月 29 日
你的 http 框架最好可以支持 HandleChain 这样可以实现一个 recover 的中间件

func HandleRecover(ctx webFrame.Context) {
ctx.Next()
if err := recover();err != nil {
// print err
}
}

然后把这个中间件加在 HandleChain 的第一个 就可以了

router.use(HandleRecover)

最简单的 直接用成熟的 http 框架 比如说 gin 自带 recover
dongisking
2020 年 10 月 29 日
最好的还是 systemd 和 docker
coderxy
2020 年 10 月 29 日
@zunceng 没用的,go 里面开启一个新的协程就得重新捕获,不然整个程序就会 crash 。而且你这个写的也不对,ctx.next()应该放在 recover 后面,而且还有放到 defer 里。不然 ctx.next()先执行,里面有 panic 你的程序就 crash 了
index90
2020 年 10 月 29 日
用进程守护就不怕中断服务中断吗?
MarksGui
2020 年 10 月 29 日
@zunceng 在方法内部新开的 goroutine panic 是无法被统一的 recover 的。
cheng6563
2020 年 10 月 29 日
写一个健康检查的接口。
外部用 systemd 或者 docker 之类的进行健康检查。
SingeeKing
2020 年 10 月 29 日
service 外面包裹一层自动重启的软件,例如利用 supervisor / pm2 做管理
SingeeKing
2020 年 10 月 29 日
没细看,lz 是不是对 supervisor 有误解,supervisor 只是用 Python 写的,可以管理任何进程而不是只能管理 python 程序
janxin
2020 年 10 月 29 日
你进程都崩了,很多信息会丢的,你确定这样没问题吗?
outoftimeerror
2020 年 10 月 29 日
docker+k8s
freestyle
2020 年 10 月 29 日
golang 版 supervisord,不需要 Python 环境,一个二进制文件加配置文件 https://github.com/ochinchina/supervisord
ArJun
2020 年 10 月 29 日
docker 最好用
ericgui
2020 年 10 月 30 日
@zunceng 重启还是要靠系统层面解决,比如内存泄露咋办,这 recover 就没用了,平时每次执行都 if else 一下,其实浪费性能

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/719812

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX