背景及含义
开发和运维的战争。对于一些小项目,开发、测试、运维都是由一个人或一个小团队完成,但是对于很多大企业来说,开发和运维通常是由两个团队负责的。单看开发和运维两项工作,出发点和目的不同,开发追求变化,运维想要稳定,这是这场战争的本质矛盾,也因此催生了DevOps。
具体来说,哪些场景可能促使一个组织引入DevOps:
- 使用敏捷或其他软件开发办法或方法
- 业务负责人要求加快产品交付速率
- 虚拟化和云计算基础设施日益普遍
- 数据中心自动化技术和配置管理工具的普及
- 有一种观点认为,占主导地位的“传统”美国式管理风格(“斯隆模型”vs“丰田模型”)会导致“烟囱式自动化”,从而造成开发与运营之间的鸿沟,因此需要DevOps能力来客服这一困难
DevOps是什么:
DevOps是一组过程、方法与系统的统称,用于促进开发(应用程序/软件工程)技术运营和质量保障(QA)部门之间的沟通、协作与整合。
它是一种重视“软件开发人员(Dev)”和“IT技术运维人员(Ops)”之间沟通合作的文化、运动和惯例。透过自动化“软件交付”和“架构变更”的流程,来使得构建、测试、发布软件能够更加地***快捷、频繁和可靠***。
它的出现是由于软件行业日益清晰地认识到:为了按时交付软件产品和服务,开发和运维工作必须紧密合作。
——引自百度百科
它是一种方法论,让开发团队和运维团队一体化,尽可能为公司创造更多价值。DevOps=Developers+Operators. DevOps是为了让开发、运维、质量管理高效协作,可以看作三者之间的交集。
产生过程
在瀑布开发模型时期,产品使用人数规模还比较小,大家对产品的要求关注点仅停留在可以使用、可以解决问题即可,所以在这个时期,产品经理给到固定清晰完整的需求,研发人员根据需求在约定的时间内交付,将重点放在功能开发,之后交给测试团队进行测试,完成之后交给运维团队上线,之后运维团队负责可用性和稳定性。
这种模式只适用于早期,需求不能得到快速验证,团队开发的产品很有可能无法适应快速变化的市场。
在敏捷开发模型时期,产品使用人数规模开始增大,大家开始关注好玩、好用,同时有些人注意到了互联网红利,投身互联网。
这种模式开始面对频繁的需求变化,应对快速开发。产品经理对需求进行拆分,把任务分配给不同研发人员,定期碰头check完成情况,直到开发完成。
针对于DevOps,互联网产品使用人数规模大量增加,同时互联网企业之间的竞争也开始加大,对互联网产品提出了更高的要求。只有快速捕捉用户需求,快速迭代产品,才能占领市场。持续开发,持续测试,持续集成,持续部署,持续监控。
诉求
显然,DevOps是为了让开发和运维两个部门之间的围墙打通,形成闭环,让工作流程变得更加通畅。
(图片来自于https://blog.csdn.net/bjweimengshu/article/details/79031552)
- 更小、更频繁地变更——意味着更少的风险
- 让开发人员更多地控制生产环境
- 更多地以应用程序为中心来解决基础设施
- 定义简洁明了的流程
- 尽可能地自动化
- 促成开发与运营的协作
DevOps对应用发布程序的影响
在很多企业中,应用程序发布是一项涉及多个团队、压力很大、风险很高的活动,但是在具备DevOps能力的组织中,应用程序发布的风险会降低,原因如下:
- 减少变更范围。与传统的瀑布式开发模式相比,采用敏捷或迭代式开发意味着更频繁地发布,每次发布包含的变化更少。由于部署经常进行,因此每次部署不会对生产系统造成巨大影响,应用程序会以平滑的速率逐渐生长。
- 加强发布协调。靠强有力的发布协调人来弥合开发与运营之间的技术鸿沟和沟通鸿沟,采用电子数据表、电话会议、即使消息、企业门户等协作工作来确保所有相关人员理解变更的内容并全力合作。
- 自动化。强大的部署自动化手段确保部署任务的可重复性、减少部署出错的可能性。
DevOps是如何运作的
团结开发、测试、运维,强调整体业务目标,调整考核评价机制。以用户价值作为唯一评判标准,把个体和团队的成功都放在整个开发-运维的生命周期中来评价,不能只单纯局限于某个环节任务完成,将着眼点扩展到产品生命周期全局。开发完成了很多用户需求不一定是成功,运维维持系统稳定也不一定是成功,只有用户想要的功能被及时实现、被成功部署、被稳定实现才算成功。
- 持续开发
- 持续测试
- 持续集成
- 持续部署
- 持续监控
与传统开发方法那种大规模的、不频繁的发布相比,敏捷方法大大提升了发布频率。
DevOps案例之暗启动技术
Facebook曾经因为向全球若干亿用户推出一系列新功能导致产生巨大流量致使服务器崩溃,出现了不可控的结果。之后,Facebook重新调整评估,使用了DevOps原则,推出了暗启动技术。暗启动技术是在新功能完全发布给所有用户之前,逐步将新功能推广到选定的一组用户的过程。这种发布方法是持续交付的直接结果,使得开发团队可以及时获取用户反馈,更新迭代,还不会造成大规模影响。
- 新功能先在小范围给特定的人投放
- 新功能会被监测,根据反馈持续进行开发测试
- 一旦新功能被证实稳定,会在更多人群投放,多个版本进行升级
(图片来自于https://blog.csdn.net/g6U8W7p06dCO99fQ3/article/details/82056948)
可以看到,这项技术在使用时,只开放了一个部署通道,新功能只部署到了一部分选定用户,剩余其他的部署通道全部关闭。监测这部分用户,持续迭代,当功能变得稳定时启用其他部署通道。
总结
DevOps让开发、运维之间更加高效地沟通协作,更加快速地实现产品功能迭代以满足用户需求,在产品交付过程中持续稳定地输出价值。
参考链接
- https://baike.baidu.com/item/devops/2613029?fr=aladdin#1 百度百科
- https://www.jianshu.com/p/c5d002cf25b9
- https://blog.csdn.net/g6U8W7p06dCO99fQ3/article/details/82056948
- https://blog.csdn.net/bjweimengshu/article/details/79031552