设为首页收藏本站language→→ 语言切换

鸿鹄论坛

 找回密码
 论坛注册

QQ登录

先注册再绑定QQ

查看: 587|回复: 0
收起左侧

DevOps的持续部署方法大全

[复制链接]
发表于 2019-4-18 10:24:04 | 显示全部楼层 |阅读模式
DevOps强调只有真正部署到生产环境的应用才真正体现价值。DevOps的持续发布或部署是需要高度反脆弱性的,所谓反脆弱性就是所发布到生产环境的软件一定要非常稳定,即确保100%的软件部署成功。如果不成功也需要采取必要的机制快速回滚到上一个稳定的版本,以使业务快速恢复正常。为了更好地实现这种较高业务连续性的需求以及软件不同版本在生产环境的快速交割机制,DevOps创造性地发明了几种不同的发布实践,我们耳熟能详的有蓝绿部署、金丝雀和灰度发布等。
目前DevOps的良好实践主要来自互联网公司,比如谷歌(Google)、百度和阿里巴巴等。它们已经在软件开发和部署实践中不断总结出很好的经验知识,并把这种知识以持续部署流水线的形式固化到自行研制的工具平台,比如阿里的云效、腾讯的蓝鲸等。IT组织可以利用这种覆盖软件开发全生命周期的平台,确实保证在频繁触发自动化部署时能够兼顾业务的连续性,即反脆弱性。
下面介绍一下DevOps在持续交付或部署层面已经检验过的良好实践或做法。
1、蓝绿部署
蓝绿部署(blue-green deployment)强调在生产环境同时有两套版本,一个叫做“蓝环境”一个叫做“绿环境”。当需要发布新版本应用时,发布部署的机制是一次只发布新的软件版本到一个系统环境中,比如说把新的软件版本发布到蓝环境中,让新版本的应用程序先热一下身,至于热身的时限可以由应用所在的行业或企业自行决定。由于只在蓝环境做新版本的发布,绿环境不会受到影响。我们可以在蓝环境上运行“冒烟测试”,来检查蓝环境的正常情况。如果情况正常,通过网络的路由设置来切换原先在绿环境的用户流量到蓝环境。这样,蓝环境就成了主要承载生产运营和用户访问流量的生产环境,如果蓝环境突发异常情况,路由设置会再次自动启动,把原先在蓝环境的用户流量瞬间再切回到之前的绿环境版本。通过蓝绿部署的机制来确保业务连续性的需求能够长期被满足。
另外,在蓝绿部署中还要有一个需要处理的问题,即在两个环境切换时,针对正在进行的业务交易事务处理,应该如何保证业务数据交易的前后一致性的问题。一般来说,蓝绿环境的切换不是在瞬间完成的。我们可以基本遵循一般操作就是在切换过程中所遇到的全新的业务交易请求直接被导向到新版本的环境,不再允许访问旧版本的环境。对于那些在切换发生时尚未返回结果的旧的请求,旧版本的环境允许其访问完成,之后不再接收新的请求即可。
以下是关于蓝绿发布的示意图:
f35e095e7a4f66110584e6dc721951d6.png
图1 蓝绿部署图
2、金丝雀发布
金丝雀发布(canary release)的名字很是好听。我们都知道以前矿工在下井采矿之前会把一种名叫金丝雀的鸟儿投入或携带到矿井中,如果鸟儿能够从矿井中飞出就表示井下有氧气,矿工就可以安心下井采矿了。通过这个故事的讲述我们可能已经猜到金丝雀发布的含义了。是的,所谓金丝雀发布就是把应用程序的某个新版本部署到生产环境中的部分服务器中,从而快速得到反馈。就像通过金丝雀发现矿井是否有氧气一样,金丝雀发布可以快速而有效地发现软件新版本存在的问题。

以下是关于金丝雀发布的示意图:
78a00a2ec66d735a2cb9dcdc1b67f44b.png
图2 金丝雀发布图
在互联网公司经常流行一种说法叫做灰度发布,其实金丝雀和灰度发布的机理是一致的,即把应用程序的某个新版本部署到生产环境的部分服务器或部分用户群体中,从而得到快速反馈并降低可能的发布风险。您可以把金丝雀发布理解为灰度发布的初始级别。灰度发布可以把发布分成不同的阶段,至于划分为几个阶段或每个阶段包括多少用户由具体组织的情况而定。
比如BAT之一的腾讯公司为了验证其QQ或微信的新特性是否能够受到市场的青睐又不至于造成广大用户针对此新特性的负面评价,该公司往往采用灰度发布的做法,先把新特性按照不同的阶段或周期推送给其所谓的粉丝级用户群,在获得正面反馈后,再进入下一个预设阶段的推送,确保分批地把新特性推给更多目标用户。在确定新的软件特性在风险可控的情况下,再逐步部署到全部的服务器上,从而支持所有用户针对新特性的新体验。
3、滚动部署
滚动部署(rolling deployment)是指从服务器集群中选择一个或多个服务单元,停止服务后执行版本更新,再重新将其投入使用。如此循环往复,直至在集群中所有的服务实例都更新到最新版本。它和蓝绿部署的方式相比,更加节省资源,而不需要准备两套一模一样的服务运行环境。因此,在同样业务量的情况下,这种部署方式所需服务器的数量会比蓝绿部署少一半。
当然,少的资源投入可能会存在功能的局限性。滚动部署无法像蓝绿部署那样只要直接通过控制流量切换的负载均衡器的动态设置来实现动态的环境切换。滚动部署所采取的回滚方式只能是针对特定服务器从新版本回退到旧版本。
4、暗部署
暗部署(dark launch)是指软件特性在正式发布之前,先将其第一个版本部署到生产环境。通过应用“开关”技术,使用户在无感的情况下应用新特性的功能,软件提供商通过收集用户的实际操作记录来获得针对这个新特性的反馈数据。
当然,发布新特性,使用户无感还是比较难做到的。新特性所针对软件的改变通常不体现在用户经常使用的界面按钮的调整,更多的是后台交易逻辑或算法层面的调整。下面我们以一个具体实例来说明暗部署的工作原理。
某互联网公司重新开发了一个在线新闻推荐算法,希望能够为其用户推荐更多和更好的新闻内容。但是,由于此算法相对于以前算法的复杂度较高,提供算法的公司需要搜集该算法的执行效果。基于这种需求,我们就可以应用暗部署的方法。我们可以为这个算法配置一个开关,并将其部署到生产环境中。当针对这个算法的开关打开时,用户的访问流浪就会触发这个新算法的执行。通常用户并不知道其此次访问所调用的算法的新旧。如果这个算法在大规模用户并发情况下的性能不好,我们就可以马上关闭这个算法所对应的开关,让用户使用原来的算法。

总之,不论是蓝绿部署、金丝雀发布、滚动部署还是暗部署,都体现了DevOps确保在发布部署过程中价值交付的最终达成。并且,软件部署不能以牺牲业务连续性为代价,DevOps通过蓝绿部署和金丝雀发布等绝佳的办法成功实现了频繁的自动化部署和持续保持高业务连续性的完美结合。

您需要登录后才可以回帖 登录 | 论坛注册

本版积分规则

QQ|Archiver|手机版|小黑屋|sitemap|鸿鹄论坛 ( 京ICP备14027439号 )  

GMT+8, 2024-3-29 04:44 , Processed in 0.054645 second(s), 9 queries , Redis On.  

  Powered by Discuz!

  © 2001-2024 HH010.COM

快速回复 返回顶部 返回列表