GoLang优雅重启[一]

Posted by gaoy on July 9, 2018

Golang服务优雅重启理论篇

前言

在之前编写golang开发阶段如果有代码的改动直接 ctrl + c 也没感觉到会有什么问题,直到代码上了正式,才醒悟到当用户还在使用产品的过程中如果在这个时候 ctrl + c 这个时候所有的处理中业务进程会终端并且新进来的连接会连接不上,这个时候无论是用户还是产品都遭受打击,甚至会出现事故。

所以这个时候就引进来一个技术性的东西: 热更新


那么什么才能算优雅呢?

目的

  • 用户能够正常使用,不关闭现有的连接
  • 新的进程启动并代替旧的进程(类unix中的概念)
  • 新代码的进程能够接管新进来的连接
  • 无感切换所有的请求

流程

  • 1、 替代可执行文件或修改配置文件
  • 2、 发送信号也就是 ctrl + c SIGHUP
  • 3、 拒绝新连接请求旧进程,但要保证已有连接正常
  • 4、 启动新的子进程
  • 5、 新的子进程开Aceept
  • 6、 系统(类Unix)将新的请求转交新的子进程
  • 7、 旧的进程处理完所有的旧连接正常结束

未完待续…..

请博客主人喝杯奶茶

pronhub