go 实现不重启热部署
答案1:
根据系统的 SIGHUP 信号量,以此信号量触发进程重启,达到热更新的效果。
热部署我们需要考虑几个能力:
- 新进程启动成功,老进程不会有资源残留
- 新进程初始化的过程中,服务不会中断
- 新进程初始化失败,老进程仍然继续工作
- 同一时间,只能有一个更新动作执行
监听信号量的方法的环境是在 类 UNIX 系统中,在现在的 UNIX 内核中,允许多个进程同时监听一个端口。在收到 SIGHUP 信号量时,先 fork 出一个新的进程监听端口,同时等待旧进程处理完已经进来的连接,最后杀掉旧进程。
我基于这个思路,实现了一段示例代码,仓库地址:https://github.com/guowei-gong/tablefilp-example, 如果你希望动手来加深印象可以打开看看。