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

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

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

阿晨1998
TA贡献2037条经验 获得超6个赞
热重启原理,基本就是 弄个类似runtime的全局的变量组,把平时运行时的常量、加载的东西全部挂到这个上面,然后重启时候收到信号,对这个变量组的值,进行克隆,旧的上面关,新的上面开。该关闭重开的重开,该重新加载的加载。
- 4 回答
- 0 关注
- 1173 浏览
添加回答
举报
0/150
提交
取消