工业界的几种发布模式
蓝绿发布
- 蓝绿发布的本质上是通过系统冗余来解决上线风险的问题,通常生产环境中配置两套完全一样的环境,一组是active的生产环境配置(绿色),一组是inactivate的准备环境配置(蓝色),两套系统都是功能完善的,并且正在运行的系统,只是系统版本和对外服务情况不同
- 最初始的状态下,没有任何系统,也没有蓝绿之分,然后第一套系统开发完成直接上线,只有一个系统,后来业务更新,要用新版本替换线上的旧版本,这时候就有两个系统,正在对外提供服务的是老系统为绿色,新部署的系统为蓝色
为什么要有蓝色系统?因为蓝色其实是为了对新版本进行全方位的测试
- 如果测试没出问题,可以通过负载均衡器/反向代理/路由指向蓝色环境,之后只要检测这个环境是否有故障,如果运行良好, 就可以删除v1.0使用的资源,为下一次蓝绿部署空出可用资源
- 如果测试有问题,直接修改指向,快速回滚到绿色环境
优点:部署过程中,应用始终在线,并且新版本没有修改老版本的任何内容,在部署期间,老版本的转改不收影响,风险很小,并且理论上可以在任何时间回滚到老版本
缺点:需要两套环境,冗余的基础设施。而且对于设计数据表结构变更等不可逆转的升级,不太适合
金丝雀发布
金丝雀发布就是灰度发布,这两个东西是同一类策略,策略就是只有一套系统,并且逐渐替换这套系统。
指的是增量发布的一种类型,在原有版本可用的情况下,同时部署一个新版本应用作为“金丝雀”,测试新版本的性能和表现,以保证整体系统的稳定性。
发布过程
- 从负载均衡列表里下掉
- 升级金丝雀应用
- 重新添加到负载均衡列表中
- 如果测试成功,升级其他的服务器,否则回滚
通常会AB测试一起使用
AB测试
AB测试是效果测试,同一时间有多个版本的服务对外服务,这些服务都是经过足够测试,达到了上线标准的服务,有差异但是没有新旧之分,核心目的是用来测试应用功能表现的方法。比如页面的样式、颜色不一样,最后通过分析各个服务的实际效果,选择效果最好的版本。
滚动发布
所谓滚动发布一般是取出一个或者多个服务器停止服务,执行更新,并重新投入使用,周而复始,直到集群中的所有实例都更新成新版本,比如每次选出集群中的20%进行升级。比蓝绿部署更节省资源。
缺点:
- 没有一个确定OK的环境
- 需要回滚的话很麻烦
红黑部署
这是Netfix采用的部署手段,主要基础设施在AWS上,它利用了AWS的特性,在部署新的版本的时候,通过AutoScaling Group 用包含新版本的AMI创建新的服务器,服务始终在线,同时采用不可变部署的方式。