DevOps介绍
DevOps(Development和Operations的组合词)是一种重视“软件开发人员(Dev)”和“IT运维技术人员(Ops)”之间沟通合作的文化、运动或惯例。透过自动化“软件交付”和“架构变更”的流程,来使得构建、测试、发布软件能够更加地快捷、频繁和可靠.
传统的软件组织将开发、IT运营和质量保障设为各自分离的部门,在这种环境下如何采用新的开发方法(例如敏捷软件开发),是一个重要的课题。按照从前的工作方式,开发和部署,不需要IT支持或者QA深入的跨部门的支持;而现在却需要极其紧密的多部门协作。而DevOps考虑的还不止是软件部署,它是一套针对这几个部门间沟通与协作问题的流程和方法。
需要频繁交付的企业可能更需要对DevOps有一个大致的了解。Flickr发展了自己的DevOps能力,使之能够支撑业务部门“每天部署10次”的要求──如果一个组织要生产面向多种用户、具备多样功能的应用程序,其部署周期必然会很短。这种能力也被称为持续部署,并且经常与精益创业方法联系起来。从2009年起,相关的工作组、专业组织和博客快速涌现。DevOps的引入能对产品交付、测试、功能开发和维护(包括──曾经罕见但如今已屡见不鲜的──“热补丁”)起到意义深远的影响。在缺乏DevOps能力的组织中,开发与运营之间存在着信息“鸿沟”──例如运营人员要求更好的可靠性和安全性,开发人员则希望基础设施响应更快,而业务用户的需求则是更快地将更多的特性发布给最终用户使用。这种信息鸿沟就是最常出问题的地方。
以下几方面因素可能促使一个组织引入DevOps:
- 使用敏捷或其他软件开发过程与方法
- 业务负责人要求加快产品交付的速率
- 虚拟化和云计算基础设施(可能来自内部或外部供应商)日益普遍数据中心自动化技术[和配置管理工具的普及
- 有一种观点认为,当前占主导地位的“传统”美国式管理风格(“斯隆模型 vs 丰田模型”)会导致“烟囱式自动化”,从而造成开发与运营之间的鸿沟,因此需要DevOps能力来克服由此引发的问题。
- DevOps经常被描述为“开发团队与运营团队之间更具协作性、更高效的关系”。由于团队间协作关系的改善,整个组织的效率因此得到提升,伴随频繁变化而来的生产环境的风险也能得到降低。
相关术语
- 持续集成(CI):
持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作,通常每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽早地发现集成错误。
- 持续交付(CD):
一种软件工程手法,让软件产品的产出过程在一个短周期内完成,以保证软件可以稳定、持续的保持在随时可以发布的状况。它的目标在于让软件的构建、测试与发布变得更快以及更频繁。这种方式可以减少软件开发的成本与时间,减少风险。
DevOps框架
敏捷开发管理
敏捷开发管理从需求管理、计划管理、过程管理、度量分析这四个维度,关注需求到开发阶段 的有序迭代,灵活响应,以及价值的快速交付。
- 需求管理细分为需求收集、需求分析、需求与用例和需求验收四个细分维度。
需求收集:单个需求点、需求全貌、需求的管理、人员机制以及工具能力。
需求分析:需求内容和形式、需求协作、需求的管理、人员机制以及工具能力。
需求与用例:需求与用例编写、需求用例验证、需求与用例的管理、人员机制以及工具能力。
需求验收:需求验收频 率、需求验收范围、需求验收反馈效率、人员机制以及工具能力。
- 计划管理细分为需求澄清与拆解、故事与任务排期、计划变更三个维度。
需求澄清与拆解:需求澄清的时间、内容的完备性、协作、人员机制以及工具能力。
故事与任务排期:排版要素、排版容量、排版管理、人员机制以及工具能力。
计划变更:变更决策、应对 变更、减少变更、人员机制以及工具能力。
- 过程管理细分为迭代管理、迭代活动、过程可视化及流动、度量分析四个纬度
迭代管理:迭代时间周期、迭代协作机制、迭代流程改进、人员机制以及工具能力。
迭代活动:迭代活动约定、迭代活动时间约定、迭代活动范围、人员机制以及工具能力。
过程可视化及流动:过程可视化、过程价值流动、迭代过程改进、人员机制以及工具能力。
度量分析:度量粒度、度量范围、度量驱动持续改进、人员机制以及工具能力。
持续交付
持续交付关注应用软件集成交付环节,通过配置管理、构建与持续集成、测试管理、部署与发 布管理、环境管理、数据管理和度量管理领域的能力建设和工程实践保证软件持续顺畅高质量的对用户 完成发布。
- 配置管理细分为版本控制、版本可追踪性两个维度。
版本控制:版本控制系统、分支管理、构 建产物管理、单一可信数据源。
版本可追踪性:变更过程、变更追溯、变更回滚。
- 构建与持续集成分为构建实践、持续集成。
构建实践:构建方式、构建环境、构建计 划、构建职责。
持续集成:集成服务、集成频率、集成方式、反馈周期。
- 测试管理分为测试分级策略、代码质量管理、测试自动化。
测试分级策略:分层方法、 分层策略、测试时机。
代码质量管理:质量规约、检查策略、检查方式、反馈处理。
测试自动化:自动化设计、自动化开发、自动化执行、自动化分析。
- 部署与发布管理分为部署与发布模式、持续部署流水线。
部署与发布模式:部署方式、 部署活动、部署策略、部署质量。
持续部署流水线:协作模式、流水线过程、过程可 视化。
- 环境管理分为环境类型、环境构建和环境依赖与配置管理。
- 数据管理分为测试数据管理和数据变更管理。
测试数据管理从数据来源、数据覆盖、 数据独立性、数据安全。
数据变更管理:变更过程、兼容回滚、版本控制、数据监控 。
- 度量与反馈分为度量指标和度量驱动改进。
度量指标:度量指标定义、度量指标类型、 度量数据管理、度量指标更新。
度量驱动改进:报告生成方式、报告有效性、报告覆 盖范围、反馈改进。
应用运营
技术运营环节关注应用系统服务发布后的环节,涉及运维成本服务、高可用架构服务、用户体 验服务、客户服务、监控服务、产品运行服务和运营数据服务,保障良好的用户体验,打造持续的业务 价值反馈流。
DevOps工具
现将工具类型及对应的不完全列举整理如下:
- 代码管理(SCM):GitHub、GitLab、BitBucket、SubVersion
- 构建工具:Ant、Gradle、maven
- 自动部署:Capistrano、CodeDeploy 持续集成(CI):Bamboo、Hudson、Jenkins
- 配置管理:Ansible、Chef、Puppet、SaltStack、ScriptRock GuardRail
- 容器:Docker、LXC、第三方厂商如AWS
- 编排:Kubernetes、Core、Apache Mesos、DC/OS
- 服务注册与发现:Zookeeper、etcd、Consul
- 脚本语言:python、ruby、shell
- 日志管理:ELK、Logentries 系统监控:Datadog、Graphite、Icinga、Nagios
- 性能监控:AppDynamics、New Relic、Splunk
- 压力测试:JMeter、Blaze Meter、loader.io
- 预警:PagerDuty、pingdom、厂商自带如AWS SNS
- HTTP加速器:Varnish
- 消息总线:MQ、SQS
- 应用服务器:Tomcat、JBoss
- Web服务器:Apache、Nginx、IIS
- 数据库:MySQL、Oracle、PostgreSQL等关系型数据库;cassandra、mongoDB、redis等NoSQL数据库
- 项目管理(PM):Jira、Asana、Taiga、Trello、Basecamp、Pivotal Tracker