一下分支策略,如下图所示,每周周一结束时发布一次大版本给用户(图中最左侧周一绿色五角星,版本293.7),在周一发布最新版本之后,周二将这个发布分支从production改名字为defunct分支,意味着是一个不再起作用的分支。
| | | | | | |
| | 1.也称为红黑部署,不停绿环境的老版本,部署新版本到蓝环境 2.测试蓝环境确认OK后将流量切到新版本,然后老版本同时也升级到新版本 3.如果没有使用其他发布技术,部署即发布 | 1.使用负载均衡(Load Balancer) 2.一次性切换版本,立即生效 | | 1.切换是全量的,如果 V2 版本有问题,则对用户体验有直接影响 2.需要两倍机器资源 3.如果两个版本共享数据,需具备向后兼容 | 1.对用户体验有一定容忍度的场景 2.机器资源有富余或者可以按需分配(容器云) 3.对服务连续性要求优先级是最高的 4.每个新版本每次部署都采用这个策略 |
| 1.一般是取出一个或者多个服务器停止服务,执行更新,并重新将其投入使用。周而复始,直到集群中所有的实例都更新成新版本 2.如果没有使用其他发布技术,部署即发布 | 1.相对于蓝绿部署,更加节约资源——它不需要运行两个集群、两倍的实例数。 2.使用负载均衡 3.经过多个批次的部署后,才最终部署完成 | 1.部署期间用户体验影响小,体验较平滑 2.零停机时间 | 1.部署和回滚时间相对缓慢,因为是分批次滚动操作 2.部署工具比较复杂,负载均衡需要平滑的流量摘除和拉入能力 3.由于两个版本同时存在,需要向后兼容 | 1.对用户体验和性能要求比较高,需要先行验证 2.对服务连续性要求非常高 3.要部署的机器或实例非常多 4.每个新版本每次部署都采用这个策略 |
| 1.本意:针对新功能或者特定主要版本,首先是用户无感知的部署,进行性能等测试 2.扩展:然后可以开放部分客群流量,逐步扩大用户感知范围 | 1.先部署成功(结合其他部署方式) 2.再打开特性开关,逐步发布到更大范围的客群 | 1.用户无感知或者感知小 2.在暗模式下,可以提前发现大规模的性能问题 3.根据条件向部分用户发布,比较灵活去做验证或实验 | 1.为了真正的黑启动,让用户无感知,需要技术和工具手段 2.为了扩展,逐步扩大放量,需要其他的基础设施支持,投入较大 | 1.针对新功能或者特定主要版本,并不是每个版本都需要这个策略 2.验证重大算法、架构重构或者重大业务等 |
| | 1.也叫金丝雀测试,先发布一台或者小比例服务器或实例,经过流量验证后,再发布给所有用户,目的是线上验证,减少缺陷带来的影响 2.滚动部署的一个特例 3.黑启动的一种实现方式 | 1.对比滚动部署,先部署少量金丝雀机器或实例 2.少量金丝雀先接受流量 3.再全量发布 | 1.能够测试实时生产流量 2.用户体验影响小,发布过程出现问题缺陷等只影响少量用户 3.快速回滚 4.零停机时间 | 1.发布速度慢,因为需要监控金丝雀一段时间 2.需要对监控和可观测性投入 3.需要向后兼容 | 1.对新版本功能或性能缺乏足够信心 2.用户体验要求较高 3.降低全量发布的风险 4.网站式服务端发布应用比较广泛 |
| 1.增强性质的滚动部署和金丝雀发布,黑启动的一种实现方式 2.逐步发布开放流量给更大范围的客群,目的是利用客群流量提前发现缺陷 | 1.可以结合使用负载均衡的滚动部署和金丝雀发布 2.可以使用特性开关,结合其他技术,对不同范围客群打开特性开关 | 1.具备金丝雀发布特点 2.在保证基本功能和性能在金丝雀发布被验证之后,再逐步加大放量进一步验证 3.随着客群范围的逐步扩大,问题和缺陷可以得到及时发现和修复 | 1.发布速度慢,因为刻意的逐步放量有个时间过程 2.需要对监控和可观测性投入 3.需要向后兼容 | 1.对新版本质量、功能、性能缺乏足够信心 2.用户体验要求较高 3.降低全量发布的风险 4.移动端APP应用比较广泛 |
| 1.针对两个功能A和B,随机选定两组类似的客群,进行对比试验,目的是验证假设,探索业务 2.黑启动的一种实现方式 | 1.测试功能表现和效果如何,例如可用性、受欢迎程度、可见性、转化率、业务指标等等 2.通常应用在前端页面上 3.也可以应用在后台不同策略的对比上 | 1.快速实验能力 2.用户体验影响小 3.可以使用生产流量测试 4.可以做到针对某类特定目标用户进行测试 | 1.设置和搭建复杂度相对较高,有技术门槛 2.由于采样偏差问题导致结果偏差 | 1.用来业务探索 2.有两个或多个方案要进行对比,验证假设 |
| | 通过开关控制新版本和老版本功能,打开开关走新版本代码逻辑,关闭开不按走老版本代码逻辑 | 1.支持简单的特性开和关 2.结合其他的分流技术,例如不同的用户画像、地域、IP网段、机房等,可以支持A/B测试,灰度发布,金丝雀发布 3.如果具备特性开关技术,可以不使用特性分支,来支持主干开发 | 1.针对不同条件,打开关闭开特性,非常灵活 2.升级和回滚非常快 3.零停机时间 | 1.简单的特性开关是全量切换,有可能打开开关给所有用户带来大量影响 2.复杂特性开关要结合各种分流技术 3.功能开关需要一个配置中心或者开关中心 | 1.需要精细化精准化运营测试 2.支持灰度发布 3.支持A/B测试 |
| | 1.物理上是两个版本,各自有二进制包 2.需要结合不同的部署方式进行部署 | 1.与不同部署方式优势之处一样 2.结合滚动部署,金丝雀发布,支持有限的A/B测试 | 1.与不同部署方式不足之处一样 2.需要维护多个分支和版本 | 1.没有特性开关工具或研发能力 2.简单的版本管理 3.简单的部署管理 |
| 不使用特性分支,还能达到创建分支进行重构的同样效果,迭代发布增量的重构 | 1.没有使用多个分形分支 2.对新代码使用设计手段达成分支效果 | 1.持续发布 2.业务功能交付与重构交付并行 3逐步验证架构的方向和正确性 | 1.成本比一次性完成高 2.整个重构完成时间周期可能会较长 3.技术手段可能较难 | 1.需要较大的架构改动和重构 2.架构风险较大 3.同时还要支持交付业务功能 |