随着DevOps的普及,越来越多的人开始想要了解DEVOPS。DevOps是敏捷软件开发为了跟上软件开发速度和实现吞吐量而产生的,因此说DevOps敏捷开发的产物一点都不为过。那么到底什么是DEVOPS?DevOps工程师带来了什么?本文将从DevOps的定义,以及DevOps工程师可以带来什么,希望可以帮助你对DevOps有更深刻的理解。
什么是DEVOPS?
DevOps(英文Development和Operations的组合)是一组过程、方法与系统的统称,用于促进开发(应用程序/软件工程)、技术运营和质量保障(QA)部门之间的沟通、协作与整合。它的出现是由于软件行业日益清晰地认识到:为了按时交付软件产品和服务,开发和运营工作必须紧密合作。
对于DevOps的提出已经很多年,其主要的推动仍来自两个方面:
1. 业务和需求驱动下,推动敏捷方法论,敏捷下需要更加短周期,更快的发布和交付。
2. 技术和运维部门需要衔接,在PaaS和容器技术发展下,进一步推动这部分陷阱的自动化。
虽然是三方交融地方为DevOps的内容,但是可以看到DevOps本身更多的是要解决两大类协同和自动化的问题,其一是开发部门和QA协同,其二是开发部门和运维的协同。
1. 第一个问题的解决:已有的持续集成方法论;
2. 第二个问题的解决:当前由云平台,微服务架构,容器技术发展推动的自动化发布和监控运维;
把上面思路理清楚后,对于DevOps要做或需要解决的事情也就更加明确的。
1. 实现软件和硬件基础设施(云平台资源)的对接(自动部署,动态扩展)-PaaS,Docker;
2. 实现不同环境间的自动迁移 - 持续集成+自动化迁移;
3. 能够满足更加高频率的发布节奏,单次发布更加快速 - 持续集成;
4. 能将QA和QC部分检验和审查工作自动衔接到发布和交付过程 - 自动化测试,自动化监控;
要做好DevOps基于上面的分析就可以从持续集成和PaaS平台融合两方面来谈。
DevOps和持续集成
对于持续集成我前面已经专门有文章谈到过,这个没有提DevOps概念的时候也在做持续集成,通过持续集成真正实现了版本和配置管理,单元测试,自动构建,环境迁移和配置修改,集成顺序规划这些关键内容。
比如我们常说的一个工具组合:Jenkins,Maven,Ant , Junit,SubVersion 。 为了更好持续异地协同开发,以及后续和公有云PaaS融合,版本库可以转到GitLab或GitHub上面。
在持续集成里面我们经常会谈一个重点,即业务系统是基于组件化架构的,即各个组件可以独立管理和部署,组件之间通过服务接口松耦合。只有这样才能将后续增量发布影响降低到最小。这个概念现在转到微服务架构里面来进一步实现。
DevOps和PaaS平台融合
对于和PaaS平台融合是DevOps的第二个内容,我们希望的就是我们在测试态测试和验证完成的部署包能够自动的交付和迁移到生产环境的托管资源中。在这里就涉及到PaaS平台提供的自动部署和托管,资源动态管理等方面的能力。
比较重的:Cloudfoundry或Cloudify能提供完整的解决方案。
比较轻的:我们可以基于Docker容器技术+Kubernetes+Puppets来实现自动化和动态资源管理。
在PaaS平台下,由于部署和资源的动态管理都被PaaS平台完全接管,因此更加需要整个平台必须提供完整的日志管理,传统IT网管,中间件资源池监控,包括到APM层性能分析的完整解决方案和工具集。要实现这些你可以在监控方面用Nagios或zabbix解决方案。日志管理和分析可以用ELK方案,整个过程中的自动化脚本用Puppet等。
一个DevOps是否执行的好基础指导是敏捷和持续集成的方法论,难点在多版本管理和微服务架构设计(组件划分是否合理)和后期的监控运维。
DevOps工程师带来了什么?
传统的软件开发流程是软件开发人员花费数周和数月编写代码,然后将代码交给QA团队进行测试,然后将最终的发布版交给运维团队去布署。所有的这三个阶段,即开发,测试,布署,之间缺乏协作。
开发者编写代码然后交给布署团队。现在由布署团队来解决代码布署过程中出现的问题,或将代码交给开发团队以修复bug。所有这些都导致软件开发过程变慢。
但是在DevOps模式下,这三个团队将不再相互隔离。大多数时候,这三个团队将合并成一个团队,工程师会在整个应用程序生命周期中工作,从开发和测试到布署到操作,并开发出一系列不限于单一功能的技能。安全团队也可以在整个应用程序生成周期中和开发和运维更紧密的合作。
以上就是关于什么是DEVOPS,以及DevOps工程师带来了什么的全部内容,想了解更多关于DEVOPS的信息,请继续关注。