运维发布和上线的方式
1.蓝绿部署
概念
蓝绿部署分为两个版本,蓝色版本是指正在使用的版本,绿色版本是指将要发布的新版本,通过在两个版本中切换流量来实现版本的更新。更新的时候,蓝色版本仍然在提供服务,绿色版本进行升级,测试通过后,删除老版本,将流量切换到新版本。
部署过程
(1)部署蓝色版本的应用
所有外部请求的流量都打到这个版本上。
(2)部署绿色版本的应用
绿色版本的代码与蓝色版本不同
(3)将流量从蓝色版本切换到绿色版本。
(4)如绿色版本测试正常,就删除蓝色版本正在使用的资源,从此正式用绿色版本。
优点和缺点
优点
在这种方式下,不需要停机。部署新版本进行测试,等测试通过后,将流量切换到新版本,删除老版本。
缺点
会产生额外的维护、配置成本,服务器本身运行也需要成本支出。
2.灰度部署(金丝雀发布)
概念
灰度部署又叫金丝雀发布,是采用从0到1,能够平滑过渡的一种发布方式。它对用户有筛选的分流机制,将新版本只对少量用户开放,大多数用户依然维持使用老版本,不同版本应用共存。
为什么灰度发布要叫金丝雀发布?
相传在17世纪,英国矿井工人发现,金丝雀对瓦斯这种气体十分敏感。空气中哪怕有极其微量的瓦斯,金丝雀也会停止歌唱;而当瓦斯含量超过一定限度时,虽然鲁钝的人类毫无察觉,金丝雀却早已毒发身亡。当时在采矿设备相对简陋的条件下,工人们每次下井都会带上一只金丝雀作为“瓦斯检测指标”,以便在危险状况下紧急撤离。
部署过程
(1)准备好部署各个阶段的工件,包括:构建工件,测试脚本,配置文件和部署清单文件。
(2)从负载均衡列表中移除掉“金丝雀”服务器。
(3)升级“金丝雀”应用(排掉原有流量并进行部署)。
(4)对应用进行自动化测试。
(5)将“金丝雀”服务器重新添加到负载均衡列表中(连通性和健康检查)。
(6)如果“金丝雀”在线使用测试成功,升级剩余的其他服务器。(否则就回滚)
优点和缺点
优点
降低风险,通过少数用户量发现问题并及时解决问题。
缺点
时间成本高,整个灰度部署从前期的灰度策略到最后上线需要消耗很长的时间。
3.滚动部署
概念
一般是取出一个或者多个服务器停止服务,执行更新,并重新将其投入使用。周而复始,直到集群中所有的实例都更新成新版本。比蓝绿部署节约资源,但是服务器节点数量多,会很慢。
部署过程
(1)发布一台金丝雀,主要做流量验证。
(2)需要准备好发布工具和智能LB,平滑的版本替换和流量的拉入拉出。
(3)每次发布先将老版本V1流量从LB移除,然后清楚老版本,发新版本V2,再将LB流量接入新版本。
(4)一次滚动式发布一般由若干个发布批次组成,每批次发布数量可配置。并且每批次之间有时间间隔,所以导致滚动发布过程比较缓慢。
(5)回退,发布的逆过程,所以一样缓慢。
优点和缺点
优点
不用停止服务器就可以更新,比较节省资源。
缺点
整个系统会有新旧并存的情况,出现问题时,无法保证一个稳定的线上环境;部署时间不可把控、回滚困难;对做好不同版本与数据库、缓存等兼容性问题要求很高。
4.红黑部署
概念
这是Netflix采用的部署手段,Netflix的主要基础设施是在AWS上,所以它利用AWS的特性,在部署新的版本时,通过AutoScaling Group用包含新版本应用的AMI的LaunchConfiguration创建新的服务器。测试不通过,找到问题原因后,直接干掉新生成的服务器以及Autoscaling Group就可以,测试通过,则将ELB指向新的服务器集群,然后销毁掉旧的服务器集群以及AutoScaling Group。
特点
服务始终在线,同时采用不可变部署的方式,也不像蓝绿部署一样得保持冗余的服务始终在线。