首页 > 数据库 > 数据库开发技术 > 凌晨上线,初期如何做到无损发布
一般我们公司做系统升级的时间都会选择在深夜,因为晚上上线升级,对用户的影响最小。
那为什么会对用户产生影响?
因为系统的升级,往往会伴随着重启,重启的过程中,正在访问的用户就会访问失败。
如果升级的是web-server:

如果重启上面的tomcat,tomcat上也许有200个请求正在处理,这些请求就会失败。
如果升级的是service:

重启ip1机器上的service时,service上如果有200个请求正在处理,这些请求也会失败。
那么问题就是:web-server升级能否不影响正在处理的请求呢?
可以使用 nginx+web-server的方法
给nginx发指令(nginx -s reload),将ip1上的流量切走;

nginx没有了新的流量,原来旧的流量会很快处理完成;

旧流量完成后,升级web-server;

这个时候,ip1上已经没有了流量,可以随意的停服、启动、测试人员直连测试。
4.给nginx发指令,将流量切回ip1;

5.流量切回ip1,单节点上线成功;

server升级能否不影响正在处理的请求?
可以,需要RPC-client和RPC-server配合。
向准备升级的service节点ip1发切换流量指令,这里是通过下游server发指令切换流量;

RPC-server通过tcp长连接将流量指令通知RPC-client,执行流量指令的组件最终是RPC-client上的tcp连接池;

RPC-client不再将流量发给ip1,旧的流量慢慢的处理完成;

旧流量逐步迁移完成,RPC-client会间歇性重连.直至ip1节点恢复;

流量切换ip1,单节点上线成功;
一个节点升级完成之后,其他节点可以依次逐台升级。
原文作者:二进制跳动;如有侵权,请联系管理员删除。