salvo
salvo copied to clipboard
平滑重启的最佳实践是什么?
我看example的listenfd应该指的是平滑监听吧?理论上平滑重启的最佳实践是怎样的? 就比如用salvo实现网关,这种场景对平滑监听的要求高点。
关于平滑重启,我个人设想的流程是:
- 新程序启动,初始化完成后发信号给旧程序
- 旧程序停止accept进入优雅停机流程,并发送信号给新程序
- 新程序通过旧程序共享的fd信息启动tcp监听
- 旧程序优雅停机结束后自动关闭进程
listenfd是通过环境变量共享fd信息的,但新旧程序传递信号用什么方式(tcp?unix?namedpipe?signals?http?)比较合适?如果双方有别的通信渠道,似乎好像就没必要用listenfd共享fd信息了?
感觉最省事的就是路由里搞一个优雅关闭api,新程序发送一个http请求给旧程序,旧程序启动优雅关闭后响应fd信息给新程序(也可以把需要共享的其他数据(本地缓存之类的)一起发了),然后新程序通过fd启动服务。