标签:dom 失败 exit 否则 ESS close 重启 tps check
---------------------------------------------------------------------------------------------
old process new process
send upgrade signal ---> | |
| ----------- fork -----------> |
| | start listen and init finish
| <- send init finish signal -- |
close listening | |
| send connection state data -> |
| | accept and init finish
| <---- send finish signal ---- |
exit | |
---------------------------------------------------------------------------------------------
Use a domain socket to transfer connection state data
1. 进程每次启动时必须check有无继承socket(尝试连接本地的unix server,如果连接失败,说明是第一次启动,否则可能有继承的socket),如果有,就将socket加入到自己的连接池中。
2. 旧进程监听USR2信号,监听后动作:
1) 监听Unix socket。
2) 使用旧进程启动的命令fork一个子进程(发布到线上的新二进制)。
3) accept到新进程的请求,关闭旧进程listener(保证旧进程不会再有新请求,同时所有connector不在read/writer socket。
4) 旧进程将现有连接的socket,以及连接状态(读写buffer,connect session)通过 unix socket发送到新进程。
5) 最后旧进程给新进程发送发送完毕信号,随后退出
实际生产中,迁移连接这一步需要考虑的细节非常多,且可能出现新进程被自己的请求打死的情况,demo中粗略实现了上述逻辑。
标签:dom 失败 exit 否则 ESS close 重启 tps check
原文地址:https://www.cnblogs.com/wuwangchuxin0924/p/12010226.html