为了账号安全,请及时绑定邮箱和手机立即绑定

golang grpc 如何进行热重启 graceful?

golang grpc 如何进行热重启 graceful?

Go
LEATH 2019-02-05 20:06:50
想使用php调用golang的grpc服务进行通信,但是怕在上线后 进行程序的修改,想在不停机的情况下进行修改程序,想知道golang的grpc服务如何进行热重启
查看完整描述

4 回答

?
莫回无

TA贡献1865条经验 获得超7个赞

一般后端服务会有冗余部署,前端通过 elb 中间层访问,或者使用 consul 之类的服务注册发现机制,串行重启或者分批次重启,可以做到不停服

热重启这种基本上没有吧,但是可以不重启,把把变化的项做成配置文件,热加载配置文件是可行的


查看完整回答
反对 回复 2019-03-16
?
呼如林

TA贡献1798条经验 获得超3个赞

其实你是担心直接重启服务, 会有处理到一半的请求被中断了, 导致尴尬的局面.
你要的并不是热重启, 而是优雅关闭.
grpc框架支持优雅关闭的.
基本原理是, 你监听一个信号, 收到信号时调用grpc的GracefulStop接口, 这时grpc会首先关闭对外监听的fd, 这时就不会有新的请求进来. 而已经在处理的请求则会继续处理完, 然后再关闭服务.
在grpc关闭对外监听的fd后的那个瞬间, 你其实可以启动你的新程序了, 所以基本上中断时间很短, 而原来处理着的请求并不会有问题.

查看完整回答
反对 回复 2019-03-16
?
阿晨1998

TA贡献2037条经验 获得超6个赞

热重启原理,基本就是 弄个类似runtime的全局的变量组,把平时运行时的常量、加载的东西全部挂到这个上面,然后重启时候收到信号,对这个变量组的值,进行克隆,旧的上面关,新的上面开。该关闭重开的重开,该重新加载的加载。

查看完整回答
反对 回复 2019-03-16
  • 4 回答
  • 0 关注
  • 1162 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信