go 实现不重启热部署

答案1:

根据系统的 SIGHUP 信号量,以此信号量触发进程重启,达到热更新的效果。

热部署我们需要考虑几个能力:

  • 新进程启动成功,老进程不会有资源残留
  • 新进程初始化的过程中,服务不会中断
  • 新进程初始化失败,老进程仍然继续工作
  • 同一时间,只能有一个更新动作执行

监听信号量的方法的环境是在 类 UNIX 系统中,在现在的 UNIX 内核中,允许多个进程同时监听一个端口。在收到 SIGHUP 信号量时,先 fork 出一个新的进程监听端口,同时等待旧进程处理完已经进来的连接,最后杀掉旧进程。

我基于这个思路,实现了一段示例代码,仓库地址:https://github.com/guowei-gong/tablefilp-example, 如果你希望动手来加深印象可以打开看看。