NOTE
1.13 分布式系统升级回滚
1. 什么是服务升级回滚 - 分布式系统一个服务有多个实例,新功能发布或者旧系统重构时需要对这些实例都进行升级替换,如果出现问题了那么得及时回滚 2. 部署策略 2.1. 停机部署 - 把现有版本的服务停机,然后部署新的版本 - 优点:在部署过程中不会出现新老版本同时在线的情况,保证一致性 - 缺点
这是历史学习笔记,可能存在过时或不完整的理解。
1. 什么是服务升级回滚
- 分布式系统一个服务有多个实例,新功能发布或者旧系统重构时需要对这些实例都进行升级替换,如果出现问题了那么得及时回滚
2. 部署策略
2.1. 停机部署
- 把现有版本的服务停机,然后部署新的版本
- 优点:在部署过程中不会出现新老版本同时在线的情况,保证一致性
- 缺点:需要停机,对用户影响大
2.2. 蓝绿部署
- 搞两套环境,流量达到A环境,把新版本发布到B环境后,把流量切到B环境
- 优点:不用停机,也不会有新老版本同时在线的一致性问题
- 缺点:需要两套环境,浪费资源;对于有状态的服务不太友好
2.3. 滚动部署
- 逐个替换应用的所有实例,来缓慢发布应用的一个新版本
- 优点:对于有状态的服务友好
- 缺点:新老版本同时在线的一致性问题;没有进行验证就直接发布
2.4. 灰度部署
- 把一部分用户切到新版上来,然后看一下有没有问题。如果没有问题就继续扩大升级,直到全部升级完成。
- 发布流程 2. 调整机器权重为0 3. 发布 4. 调整机器权重为10 5. 登录机器查看日志 6. 确保没问题后调整机器权重为100 7. 继续其他机器
- 回滚流程
- 回滚(就是使用旧包重新发布)
- 保留一台机器权重为0
- 增加Log并修改配置文件日志级别为debug
- 发布包到该机器
- 指定IP请求到该机器,登录机器查看日志
2.5. AB测试
- 同时上线两个版本,然后做相关的比较
- 灰度 vs AB测试
- 灰度:是对新版本的质量没信心
- AB测试:对新版的功能没信心
3. 回滚策略
3.1. 安装包回滚
- 重新部署旧的安装包