Go之热重启

一、背景

生产环境对持续性和稳定性要求比较高

如果按照跟开发环境的杀死进程关闭服务、再重启服务会有一定的影响。

  • 未处理完的请求,被迫中断,数据的一致性会被破坏,甚至逻辑出现错误或者产生脏数据。
  • 服务关闭且重新启动期间,需要一定的时间,会出现服务不可用现象

 

处理三种方案:

  1. 生产环境通过网关服务,通过流量调度的方式实现平滑重启
  2. k8s管理
  3. 程序自身完成

 

二、热重启释义

热重启(Hot Restart),是一项保证服务可用性的手段。它允许服务重启期间,不中断已经建立的连接,老服务进程不再接受新连接请求,新连接请求将在新服务进程中受理。对于原服务进程中已经建立的连接,也可以将其设为读关闭,等待平滑处理完连接上的请求及连接空闲后再行退出。通过这种方式,可以保证已建立的连接不中断,连接上的事务(请求、处理、响应)可以正常完成,新的服务进程也可以正常接受连接、处理连接上的请求

原理:

  • 父进程监听重启信号
  • 在收到重启信号后,父进程调用 fork ,同时传递 socket 描述符给子进程
  • 子进程接收并监听父进程传递的 socket 描述符
  • 在子进程启动成功之后,父进程停止接收新连接,同时等待旧连接处理完成(或超时)
  • 父进程退出,热重启完成

通俗:

  • 旧版本为退出之前,需要先启动新版本;
  • 旧版本继续处理完已经接受的请求,并且不再接受新请求;
  • 新版本接受并处理新请求的方式;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值