目录
一、蓝绿发布
二、灰度发布
三、滚动发布
四、A/B测试
为什么要发布?
(1)新项目上线,老项目版本迭代也需要上线,上线意味着重新部署
(2)发布也可称为部署,部署意味着修改,修改就有风险,所以诞生了很多部署发布的技术
一、蓝绿发布

image-20211205085257900-1638665900437.png
#1.蓝绿发布定义
(1)一共有两套系统
一套是正在提供服务系统(也就是上面说的旧版),标记为“绿色”
另一套是"准备发布"的系统,标记为“蓝色”。
(2)蓝色系统作用:发布前测试, 测试中发现任何问题直接修改,不干扰用户正常使用,经测试稳定后,直接将用户切换到蓝色系统,同时两套系统并存,若出现问题,直接切回绿色系统
(3)回收空间:确认蓝色系统稳定对外服务后,蓝色系统成为新的绿色系统,原绿色系统可以销毁将资源回收,用于部署一个蓝色系统
#2.优点
(1)反应快:减少发布时的中断时间,能够快熟的撤回发布
#3.缺点和注意事项
(1)切换的兼容未完成业务:当你切换到"蓝色"系统时,需要妥当的处理未完成的业务和新业务,如果你的DB后端无法处理,会是一个麻烦的问题
(2)微服务和传统MVC:可能要同时处理"微服务架构应用"和"传统应用"的情况
(3)非隔离的基础架构:VM/Docker上部署蓝绿系统,蓝色环境和绿色环境有被摧毁的风险
(4)无耦合, 不干扰:两套系统没有耦合才能100%保证不干扰
二、灰度发布

image-20211205085355023.png
#1.灰度定义
(1)灰度发布:也叫做金丝雀发布,在黑与白之间,能够平滑过渡的一种发布方式
(2)AB测试:一种灰度发布,让一部分用户继续用A,一部分用户开始用B,如果用户对B没有反对意见,那么逐步扩大范围,把所有用户都迁移到B上面,灰度发布可以保证整体系统的稳定
(3)服务器的"流量切分":集群有10台服务器,给最初更新的2台服务器设置较低的权重,然后提高权重,增强请求量的比例,就是一种平滑过渡的思路,这个控制叫做"流量切分"
#2.过程
(1)准备好部署各个阶段的构件, 构件工具,测试脚本,配置文件,清单(MQ,DB...)
(2)从负载均衡中移除"金丝雀"服务器 --> 部署金丝雀服务器测试
(3)测试成功 --> 将"金丝雀"重新添加到负载均衡列表
(4)如果"金丝雀"在线测试成功(baking) --> 升级剩余的其他服务器(否则就回滚)
三、滚动发布

image-20211205085309887.png
#1.定义
(1)滚动发布:拉出一个/几个服务器停止服务执行更新,并重新将被更新的服务器投入使用,周而复始,直到集群中的所有实例都更新成新的版本
(2)发布流程:相比蓝绿系统需要一套完备的集群机器不同,滚动发布只需要一台/几台机器,只需要将部分功能部署在这台机器上然后去代替正在运行的机器,将更新后的功能部署在Server1然后去替换Server,Server空出来后又可以继续部署Server2的新版本,周而复始,直到替换完所有的服务器
#2.优点
(1)节约资源:相比蓝绿系统,他不需要2倍集群的实例数,可以部分部署,每次取出集群20%进行升级
#3.缺点
(1)回滚困难:我们需要更新100个实例,每次更新10个实例,当滚动发布到第80个实例时,发现了问题,需要回滚,这个回滚却是一个痛苦,并且漫长的过程。
(2)实时性不足:因为是逐步更新,那么在上线时就可能出现短暂的新老版本不一致的情况,如果对线上要求较高的场景,那么久需要做好兼容的问题
四、A/B测试

image-20211205085231872.png
#1.定义
(1)A/B测试:关注的是不同版本服务的实际效果,譬如转化率,订单情况
(2)A/B测试和蓝绿发布、金丝雀和滚动发布比较
--蓝绿发布、金丝雀和滚动发布:是发布策略,目标是确保新上线的系统稳定,关注的是新系统的BUG、隐患。
--A/B测试:效果测试,同一时间有多个版本service对外服务,这些服务都进行足够测试,达到了[上线]标准,有差异但没有新旧之分
注意: 上线时可能采用了蓝绿部署方式
reference:
项目开发常说的灰度发布、蓝绿发布、滚动发布到底是个啥? (qq.com)