golang grpc 如何进行热重启 graceful?

想使用php调用golang的grpc服务进行通信,但是怕在上线后 进行程序的修改,想在不停机的情况下进行修改程序,想知道golang的grpc服务如何进行热重启

LEATH
浏览 1089回答 4
4回答

莫回无

一般后端服务会有冗余部署,前端通过 elb 中间层访问,或者使用 consul 之类的服务注册发现机制,串行重启或者分批次重启,可以做到不停服热重启这种基本上没有吧,但是可以不重启,把把变化的项做成配置文件,热加载配置文件是可行的

呼如林

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

阿晨1998

热重启原理,基本就是 弄个类似runtime的全局的变量组,把平时运行时的常量、加载的东西全部挂到这个上面,然后重启时候收到信号,对这个变量组的值,进行克隆,旧的上面关,新的上面开。该关闭重开的重开,该重新加载的加载。
打开App,查看更多内容
随时随地看视频慕课网APP