关于DevOps的一些想法

随着市场竞争的日益激烈,软件开发的时间也在一步步的缩短。为了抢占市场先机,我们往往需要在非常短的时间内完成对产品的开发和部署或者说迭代升级,所以敏捷开发也在这几年变得越来越火热。基于这种市场环境的影响下DevOps的概念被推上前台。
我们在学校里学习和开发往往是基于瀑布模型来进行的,瀑布模型(Waterfall)的产品虽然较为稳定可靠,但是遵循瀑布模型来开发企业级项目的成本非常高,而且一但发生需求变更,修改起来的成本是非常巨大的。相比于沉重的瀑布模型,敏捷开发(Agile Development)几星期就是一个敏捷周期,小步快跑明显降低了风险,对于错误的纠正也更加容易。但是敏捷模型也不是万无一失,相比起传统软件开发模式,敏捷开发对运维是不太友好的。为了解决开发和运维之间的矛盾,DevOps应运而生。
DevOps这个词,其实就是Development和Operations两个词的组合。DevOps是一组过程、方法与系统的统称,用于促进开发、技术运营和质量保障(QA)部门之间的沟通、协作与整合。在DevOps的理念中有一个非常重要的点就是“一切部署发布都要实现自动化”,实现这一点离不开两个概念即CI(Continuous Integration)和CD(Continuous Delivery)即持续集成和持续交付(或者持续部署)。持续集成是在源代码变更后自动检测、拉取、构建和(在大多数情况下)进行单元测试的过程。目标是快速确保开发人员新提交的变更是好的,并且适合在代码库中进一步使用。持续部署是指能够自动提供持续交付管道中发布版本给最终用户使用的想法。根据用户的安装方式,可能是在云环境中自动部署、app 升级(如手机上的应用程序)、更新网站或只更新可用版本列表。
现在众多的工具为我们为我们的DevOps之路提供了保障,比如代码管理的GitHub,构建工具的maven,持续集成的Jenkins,容器方面的Docker等等,说起来随着这几年云计算技术突飞猛进,大家应该对虚拟化、容器、微服务这些概念并不陌生。当我们提到这些概念的时候,也会偶尔提及DevOps。所谓“微服务”,就是将原来黑盒化的一个整体产品进行拆分(解耦),从一个提供多种服务的整体,拆成各自提供不同服务的多个个体。微服务架构下,不同的工程师可以对各自负责的模块进行处理,例如开发、测试、部署、迭代。而虚拟化,其实就是一种敏捷的云计算服务。它从硬件上,将一个系统“划分”为多个系统,系统之间相互隔离,为微服务提供便利。容器就更彻底了,不是划分为不同的操作系统,而是在操作系统上划分为不同的“运行环境”(Container),占用资源更少,部署速度更快。虚拟化和容器,其实为DevOps提供了很好的前提条件。开发环境和部署环境都可以更好地隔离了,减小了相互之间的影响。
所以从来没有什么突然出现的技术,技术都来自于理论的进步和环境的发展,不知道为什么想到了长者的话“一个人的命运啊,当然要靠自我奋斗,但是也要考虑到历史的行程”技术大概也如此吧,如果只有理念而需要依靠技术不成熟,也是落不了地的。

参考文章:
https://zhuanlan.zhihu.com/p/42286143 什么是持续集成(CI)/持续部署(CD)?作者:Linux中国

https://www.zhihu.com/search?type=content&q=DevOps 作者:小枣君

https://www.youtube.com/watch?v=MZU6I3dXdM8 软件是如何做到更新如此频繁?快速讲解DevOps理念是如何改变现代软件的 作者:Anduin Xue

posted @ 2020-08-29 01:15  Ergoza  阅读(194)  评论(0)    收藏  举报