我眼中的DevOps
经常看到DevOps这个词,也有很多专门以DevOps为主题的大型交流会。互联网巨头如Google、Facebook、Amazon,以及传统公司如IBM、Adobe、Microsoft等都在采用DevOps或提供相关支持产品。DevOps到底是什么?它其实是一种思想,一组最佳实践,以及一种文化。DevOps的出现是一个渐进的过程,是在业务、交付流程和运维之间增加了一个反馈环节,强调开发人员和运维人员的精诚合作。有了这个反馈环节,才能降低软件产业成本,才能提升软件研发效率,才能保持软件系统的稳定运行,才能迅速为用户提供新功能。要实现开发运维的精诚合作,既需要改变公司内部文化,还需要实现这种变化的工具支撑。下面我们就从“人员协作文化”和“工具支撑”两个维度来介绍DevOps的核心实践。
一、通过人员协作打通部门墙
目标
DevOps目标就是通过增加反馈,来改进开发人员、测试人员、运维人员和项目经理之间的协作,通过人员协作来打通部门墙。
利益共同体
在实际工作中,我们经常能感受到开发团队和运维团队生活在两个不同的世界里,他们彼此坚守着各自的利益,这两者之间的工作到处充满了冲突。
客户+合作
然而作为软件交付的流程末端,研发部门若能把运维部门当做“客户”则是十分合适的。当把运维人员当做客户后,则能在IT部门内提升Dev和Ops的“个体和互动”,也会加强Dev和Ops的“客户合作”。
获得高效
只要两者一起“响应变化”,一起不断部署“工作软件”,这实际上就得到了DevOps,也就实现了更快、更可靠、更低成本的自动化软件交付。
二、采用自动化流程工具实现管理目标
DevOps实践涉及到开发部门以及软件研发的整个生命周期,除了需要开发与运维人员的协作文化,还需要通过自动化流程工具来实现管理目标,即使用具备全生命周期的协同开发工具支撑,来实现DevOps从概念到落地的完整链路。这意味着在整个开发生命周期中,涉及到一大批新旧工具,包括从规划、编码、测试、发布、监控等自动化的流程工具。目前基于DevOps理论打造的管理平台服务有基于Docker容器的Docker Cloud,还有国内企业级容器灵雀云平台,以及AWS(亚马逊网络服务)等。除了这些,还有包括但不限于以下开源工具:
版本控制&协作开发,如版本控制系统Git\Subversion、代码托管平台GitLab、代码评审工具Gerrit。
自动化构建和测试工具,如Apache Ant、Maven构建工具,以及Selenium、PyUnit、Qunit测试工具。
持续集成&交付,如Jenkins(一种跨平台的持续集成和交付的应用软件)、Capistrano等工具。
部署工具,如Docker容器平台、Rocket容器引擎等工具。
配置管理,如Chef、Puppet、CFengine(UNIX管理工具)等工具。
微服务平台,如OpenShift(面向开源开发人员开放的平台即PaaS服务)、Clound Foundry(开源PaaS云平台)等工具。
服务开通,如Docker Swarm(分布式应用程序的本地集群)、Vargrant等工具。
维护,如Logstash(应用程序日志、事件的传输、处理、管理和搜索平台)、CollectD(守护daemon进程)等工具。
监控、警告&分析,如Nagios、Ganglia等工具。
总的来说,DevOps离不开云计算、容器/Docker、微服务、敏捷等相关概念,也离不开软件工程实施的成熟发展。DevOps是提倡开发和IT运维进行高度协同的一种思想,是通过工具链与持续集成、交付、反馈与优化来完成无缝的跨团队、跨系统协作方式。
(本文于 2017-04-07首次发布)