DevOps
工作中,或多或少都听别人聊到过DevOps、瀑布开发、敏捷开发、持续集成、持续交付这些概念,今天来仔细探究一下这些单词。
参考一遍不错的文章,讲的很深入浅出:DevOps到底是什么意思?
起源
-
一个软件从零开始到最终交付,大概包括以下几个阶段:规划、编码、构建、测试、发布、部署和维护
-
最初,程序比较简单,工作量不大,程序员一个人可以完成所有阶段的工作。
-
随着软件产业的日益发展壮大,软件的规模也在逐渐变得庞大。软件的复杂度不断攀升。一个人已经hold不住了,就开始出现了精细化分工。
-
码农的队伍扩大,工种增加。除了软件开发工程师之外,又有了软件测试工程师,软件运维工程师。
-
分工之后,传统的软件开发流程是这样的:
软件开发人员花费数周和数月编写代码,然后将代码交给QA(质量保障)团队进行测试,然后将最终的发布版交给运维团队去布署。所有的这三个阶段,即开发,测试,布署。
瀑布模型
早期所采用的软件交付模型,称之为**“瀑布(Waterfall)模型”**。瀑布模型,简而言之,就是等一个阶段所有工作完成之后,再进入下一个阶段。
- 这种模型适合条件比较理想化(用户需求非常明确、开发时间非常充足)的项目。大家按部就班,轮流执行自己的职责即可。
- 但是,项目不可能是单向运作的。客户也是有需求的。产品也是会有问题的,需要改进的。
- 随着时间推移,用户对系统的需求不断增加,与此同时,用户给的时间周期却越来越少。在这个情况下,大家发现,笨重迟缓的瀑布式开发已经不合时宜了。
敏捷开发
于是,软件开发团队引入了一个新的概念,那就是大名鼎鼎的——“敏捷开发(Agile Development)”
-
敏捷开发在2000年左右开始被世人所关注,是一种能应对快速变化需求的软件开发能力。
-
其实简单来说,就是把大项目变成小项目,把大时间点变成小时间点
-
敏捷开发大幅提高了开发团队的工作效率,让版本的更新速度变得更快。
-
很多人可能会觉得,“更新版本的速度快了,风险不是更大了吗?"
其实,事实并非如此。
敏捷开发可以帮助更快地发现问题,产品被更快地交付到用户手中,团队可以更快地得到用户的反馈,从而进行更快地响应。而且,DevOps小步快跑的形式带来的版本变化是比较小的,风险会更小(如下图所示)。即使出现问题,修复起来也会相对容易一些。
-
虽然敏捷开发大幅提升了软件开发的效率和版本更新的速度,但是它的效果仅限于开发环节。研发们发现,运维那边,依旧是铁板一块,成为了新的瓶颈。
-
运维工程师,和开发工程师有着完全不同的思维逻辑。运维团队的座右铭,很简单,就是**“稳定压倒一切”**。运维的核心诉求,就是不出问题。
devops
这个时候,我们的DevOps,隆重登场了
- DevOps是一组过程、方法与系统的统称,用于促进开发、技术运营和**质量保障(QA)**部门之间的沟通、协作与整合。【维基百科】
- 在DevOps的流程下,运维人员会在项目开发期间就介入到开发过程中,了解开发人员使用的系统架构和技术路线,从而制定适当的运维方案。而开发人员也会在运维的初期参与到系统部署中,并提供系统部署的优化建议。
CI/CD
有两个词经常会伴随着DevOps出现,那就是CI和CD。CI/CD参考
- CI是Continuous Integration(持续集成)
- CD对应多个英文,Continuous Delivery(持续交付)或Continuous Deployment(持续部署)。