以下是来自维基百科的定义:
DevOps(开发 Development 与运维 Operations 的组合词)是一种文化、一场运动或实践,强调在自动化软件交付流程及基础设施变更过程中,软件开发人员与其他信息技术(IT)专业人员彼此之间的协作与沟通。它旨在建立一种文化与环境,使构建、测试、软件发布得以快速、频繁以及更加稳定地进行。
DevOps的前世今生
我们知道软件工程的开发模式从瀑布开发模式到敏捷开发模式,再到如今的DevOps模式都是在不同的阶段解决了不同的问题。
瀑布开发模式定义了最初的软件开发流程,规范了不同阶段的交付标准和交付产物。
敏捷开发模式则给频繁迭代的互联网应用提供了方法论,以不断迭代,小步快跑的形式配合自动化测试,持续集成等手段保证快速地持续交付高质量的软件。但快速交付的前提是能够真正部署到生产环境,而在部署环节,运维人员往往会因为考虑系统的稳定性、可用性和安全性给部署上线设立较高的门槛。这样不能部署上线的快速交付也就没有了意义。
而DevOps却正好解决了敏捷开发模式的这些不足之处,DevOps 是通过平台(Platform)、流程(Process)和人(People)的有机整合,以 C(协作)A(自动化)L(精益)M(度量)S(共享)文化为指引,旨在建立一种可以快速交付价值并且具有持续改进能力的现代化 IT 组织。
DevOps 可以理解为一种开发(Development)和运维(Operations)一起紧密协作的工作方式,从而可以更快更可靠的构建、测试和发布软件。
DevOps 并不意味着开发一定要懂运维技术,运维要懂开发技术,而是说两个工种要更紧密的协作,有共同的目标:更快更可靠的构建、测试和发布软件。这就意味着,对于运维来说,不再抵触开发的频繁更新部署,会帮助搭建自动化部署平台,提供自动化部署工具;对于开发来说,不再认为运维的工作和开发没关系,开发人员会邀请运维人员参与架构设计,帮助运维实现自动化脚本开发。
DevOps带来的好处
上面我们说到在敏捷模式中,运维并没有深入的参与软件的整个设计,开发流程,从而导致在最后一环“部署”的时候,运维会有比较多的考虑和担心。那么DevOps能带来哪些好处和解决哪些问题呢?
整个软件的构建、测试和发布过程高度自动化
DevOps 一个很重要的基础就是自动化,通过对自动化的应用,是最简单有效的打破开发和运维之间壁垒的方式。因为应用自动化后,对于运维人员来说,自动化的交付流程,减少了繁重的手工操作,自动化测试可以有效对产品质量提供很好的保障。对于开发人员来说,可以方便高频率地进行部署。
信息更加透明和易于测量
传统的开发模式,运维和开发之前的信息并不是透明和共享的。出现了问题,很多时候大家都在互相甩锅。对于开发来说,不了解程序在服务器上运行的情况,对于运维来说,程序就是个黑盒子,无法对程序内部进行监控,出现问题只能重启或者回滚。
当采用 DevOps 的工作方式,信息更加透明,通过日志和工具,数据也可以被更好测量。比如说:
- 可以直观看到开发到部署需要多少时间,哪个环节可以改进?
- 当前服务运行情况如何,每分钟访问数多少,API 出错率多少?
- 当前用户数多少,有多少新增用户?
这些数据,不仅可以帮助运维更好地预警,或者是帮助开发更好地优化程序,还可以帮助业务团队更好地了解服务的运营情况。
DevOps需要做什么
- 帮助团队建立基于持续集成和持续交付工作流程
- 建立一套基于日志的监控报警的系统,以及故障响应的流程
- 构建基于云计算和虚拟化技术的基础设施
参考资料
- 极客时间专栏《软件工程之美》
- 极客时间专栏《DevOps实战笔记》