Go之热重启
一、背景生产环境对持续性和稳定性要求比较高如果按照跟开发环境的杀死进程关闭服务、再重启服务会有一定的影响。未处理完的请求,被迫中断,数据的一致性会被破坏,甚至逻辑出现错误或者产生脏数据。服务关闭且重新启动期间,需要一定的时间,会出现服务不可用现象处理三种方案:生产环境通过网关服务,通过流量调度的方式实现平滑重启k8s管理程序自身完成二、热重启释义热重启(Hot Restart),是一项保证服务可用
·
一、背景
生产环境对持续性和稳定性要求比较高
如果按照跟开发环境的杀死进程关闭服务、再重启服务会有一定的影响。
- 未处理完的请求,被迫中断,数据的一致性会被破坏,甚至逻辑出现错误或者产生脏数据。
- 服务关闭且重新启动期间,需要一定的时间,会出现服务不可用现象
处理三种方案:
- 生产环境通过网关服务,通过流量调度的方式实现平滑重启
- k8s管理
- 程序自身完成
二、热重启释义
热重启(Hot Restart),是一项保证服务可用性的手段。它允许服务重启期间,不中断已经建立的连接,老服务进程不再接受新连接请求,新连接请求将在新服务进程中受理。对于原服务进程中已经建立的连接,也可以将其设为读关闭,等待平滑处理完连接上的请求及连接空闲后再行退出。通过这种方式,可以保证已建立的连接不中断,连接上的事务(请求、处理、响应)可以正常完成,新的服务进程也可以正常接受连接、处理连接上的请求
原理:
- 父进程监听重启信号
- 在收到重启信号后,父进程调用 fork ,同时传递 socket 描述符给子进程
- 子进程接收并监听父进程传递的 socket 描述符
- 在子进程启动成功之后,父进程停止接收新连接,同时等待旧连接处理完成(或超时)
- 父进程退出,热重启完成
通俗:
- 旧版本为退出之前,需要先启动新版本;
- 旧版本继续处理完已经接受的请求,并且不再接受新请求;
- 新版本接受并处理新请求的方式;
更多推荐
已为社区贡献1条内容
所有评论(0)