当前位置: 首页 > 科技观察

为什么总是凌晨上线,如何进行无损发布

时间:2023-03-17 18:57:04 科技观察

为什么很多互联网公司升级系统选择晚上上线?顾名思义,晚上上网对用户的影响最小。为什么会影响用户?很多人认为系统升级往往需要重启,而在重启过程中,访问用户会访问失败。比如升级的是web-server:如上图,在ip1上重启tomcat时,tomcat上可能有1000个http请求正在处理,这些请求都会失败。再举个例子,如果服务升级了:如上图,重启ip1的服务时,服务上可能有2000个请求在处理,这些请求都会失败。Web服务器升级可以不影响正在处理的请求吗?是的,需要nginx和web-server的配合。(1)向nginx发送指令,切断ip1上的流量;(2)nginx不会向ip1发送新流量,旧流量会被快速处理;(3)旧流量完成后,升级web-server;此时ip1上的web-server处于无流量状态,你可以随便玩:停止服务进行备份升级(粉色代表升级后的节点)服务重启测试工程师直接连接ip1进行验证和验证完成(4)向nginx发送指令,将流量切换回ip1;(5)将流量切换回ip1,单节点上线成功;一个节点升级后,其他节点可以一个接一个升级。服务升级能不影响正在处理的请求吗?是的,需要RPC-client和RPC-server的配合。(1)向待升级的服务节点ip1发送断流命令;与web-service不同的是:web-service向上游nginx发送命令,切断流量;服务通过下游服务器发送命令来切断流量;(2)RPC-server通过长tcp连接通知RPC-client流量切断命令;执行流量切断命令的组件最终是RPC客户端上的tcp连接池。(3)RPC-client不再向ip1发送新流量,旧流量逐步处理;为什么它不能像web-server一样直接向上游nginx发送指令,因为服务上游太多了。(4)老流量逐渐迁移,RPC-client会断断续续重连;此时ip1上的服务处于无流量状态,你可以随便玩:停止服务进行备份升级(粉色代表升级节点),重启服务过程中,RPC-client会时断时续尝试重新连接(例如,每分钟重试一次)直到ip1节点恢复;(5)流量切换回ip1,单节点上线成功;一个节点升级完成后,其他节点可以依次进行一站式升级。还有其他注意事项吗?如果没有实现自动服务发现和服务治理,前期可以这么玩;web-server无损升级,强烈推荐脚本;服务无损升级需要服务框架的支持;剑》原创稿件,转载请联系原作者】点此查看该作者更多好文