一、背景

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

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

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

 

处理三种方案:

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

 

二、热重启释义

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

原理:

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

通俗:

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

 

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐