salvo icon indicating copy to clipboard operation
salvo copied to clipboard

平滑重启的最佳实践是什么?

Open lithbitren opened this issue 5 months ago • 1 comments

我看example的listenfd应该指的是平滑监听吧?理论上平滑重启的最佳实践是怎样的? 就比如用salvo实现网关,这种场景对平滑监听的要求高点。

关于平滑重启,我个人设想的流程是:

  • 新程序启动,初始化完成后发信号给旧程序
  • 旧程序停止accept进入优雅停机流程,并发送信号给新程序
  • 新程序通过旧程序共享的fd信息启动tcp监听
  • 旧程序优雅停机结束后自动关闭进程

listenfd是通过环境变量共享fd信息的,但新旧程序传递信号用什么方式(tcp?unix?namedpipe?signals?http?)比较合适?如果双方有别的通信渠道,似乎好像就没必要用listenfd共享fd信息了?

感觉最省事的就是路由里搞一个优雅关闭api,新程序发送一个http请求给旧程序,旧程序启动优雅关闭后响应fd信息给新程序(也可以把需要共享的其他数据(本地缓存之类的)一起发了),然后新程序通过fd启动服务。

lithbitren avatar Sep 17 '24 10:09 lithbitren