个人理解对几种更新发布的方式做一个记录,欢迎探讨!
蓝绿部署
- 蓝绿部署中有两套独立的系统,一套正式环境系统进行对外服务,被标记为蓝色 。再部署一套新版本开发的环境进行测试开发,被标记为绿色。待标新版本的系统经过测试满足上线要求后,把新版本正式对外发布,正式环境系统下线就,此过程称为蓝绿部署。
- 新版本正式环境变为蓝色,下线后的系统可转为绿色再次进行新版本的开发。
金丝雀(灰度)发布
- 现有集群中选取几个节点进行新版本的部署上线(经过测试允许上线),大多数节点以老版本允许,小部分以新版本运行,经过用户的访问确认新版本是否符合预期需求,满足就对大部分节点进行更新,最终完成集群的升级。未满足需求,就回退小部分的节点等待再次测试上线进行部署。
滚动部署
- 所谓滚动发布,就是在发布过程中,并不一下子启动所有新版本,而是先启动一台新版本,再停止一台老版本,然后再启动一台新版本,再停止一台老版本,直到全部发布完成,这样的话,如果当前需要10台服务器支撑服务,那么升级过程中一共只需要11台就行了。
- 但是滚动发布有一个问题,在开始滚动发布后,流量会直接流向已经启动起来的新版本,但是这个时候,新版本是不一定稳定/符合预期的,可能需要进一步的测试才能确认。那么在滚动发布期间,整个系统就处于较为不稳定的状态,如果发现了问题,也比较难以确定是新版本还是老版本造成的问题。
为了解决这个问题,我们需要为滚动发布实现流量控制能力。也就是下面的金丝雀发布/灰度发布。
A/B测试
- -A/B测试和蓝绿部署、金丝雀完全是两回事。
蓝绿部署和金丝雀是发布策略,目标是确保新上线的系统稳定,关注的是新系统的BUG、隐患。
A/B测试是效果测试,同一时间有多个版本的服务对外服务,这是服务都是经过足够的测试,达到了上线标准的服务,有差异但是没有新旧之分。(它们上线的时候可能采用了蓝绿部署的方式)
A/B测试关注的是不同版本的服务的实际效果,譬如说转化率、订单情况等。- A/B测试时,线上同时运行多个版本的服务,这些服务通常会有一些体验上的差异,例如页面样式、颜色、操作流程不同。相关人员通过分析各个版本服务的实际效果,选出效果最好的版本。