零停机
WARNING
零停机机制只用于预期的重启,无法处理意外的停机,例如内存溢出、系统崩溃等。
Cordis 的插件化机制可以极大地缩短应用的启动时间和滚动更新的时间,但这并没有保证 100% 的运行时可用性。为了确保即使在滚动更新期间,应用也能够保持可用,Cordis 提供了一套零停机机制。
这套机制分为两个部分:插件数据恢复和启动衔接。
第一阶段:启动新实例,按照 preload 规范加载部分插件,并向旧实例发送通知;其他插件等待 preload resolve。
第二阶段:旧实例收到通知,向新实例发送 server handle。
第三阶段:新实例收到 server handle,开始暂存请求;通知旧实例停止运行。
第四阶段:旧实例停止运行,并向新实例发送必要的插件恢复请求数据。
第五阶段:新实例的 server preload 被 resolve,加载全部插件;恢复插件运行状态;重放暂存的请求。