1. 新旧版本同时运行,监听不同的端口,通过调整转发规则将新请求转发到新版本端口,等待一段时间后,停止旧版本进程。
优点:简单。
缺点:每次升级都要调整转发规则,重启转发机,以载入新配置。服务将短暂中断。
2. 借助第三方工具(monit、supervisord、upstart、daemontools等)实现daemon守护进程.
优点:无需调整转发规则
缺点:每个Web应用都要配合启动一个独立的守护进程,占用系统资源。服务将短暂中断。
3. 借助 https://github.com/stretchr/graceful 包实现优雅升级
优点:无需调整转发规则
缺点:服务将短暂中断。
4. 借助 https://github.com/codegangsta/gin 实现 live reloading
优点:自动rebuild,不中断接受请求
缺点:虽然不中断接受请求,但是新的进程启动之前,会迅速返回错误
5. 修改标准库实现Zero Downtime upgrades http://blog.nella.org/?p=879
优点:无中断
缺点:要改动go标准库
有疑问加站长微信联系(非本文作者)