thedevopsfactory.com 学习笔记

thedevopsfactory.com是微软公司专门介绍DevOps的网站。本文是我通过该网站学习DevOps的笔记。

DevOps七大实践领域

  1. Automated Testing 自动化测试
  2. Continuous Integration 持续集成
  3. Infrastructure as code 基础设施代码化
  4. Application Performance Management 应用性能管理
  5. Continuous Delivery 持续交付
  6. Release Management 发布管理
  7. Configuration Management 配置管理

1. 自动化测试

相比手工测试,自动化测试极大提高了发现问题的效率,也避免了手工测试的不一致性,是DevOps高速运转的基石。

自动化测试应该包括所有类型的测试,包括单元测试、压力测试、集成测试等。

自动化测试可以是每次提交都触发,也可以是某种其他的规则触发。对于后一种情况,应该通过看板管理方法尽早发现并解决测试中发现的问题。

自动化测试意味着反复构建和测试,每天几十次高覆盖多类型的测试要能有效运行而且不阻碍开发人员,意味着自动测试必须在保证质量的前提下足够快。常见的解决办法是分布式并行测试。在 持续交付实践介绍 一文中,我们有提到过某月入百万美元的网站,每次数万个测试案例全部运行完毕的执行总时间是接近五个小时,但通过并行执行,能在十分钟以内完成。在该案例中,他们使用了近五十台测试机器。

自动化测试的高效率意味着对测试人员的重复易错劳动的解放,从而使得测试人员能更好地专注于测试案例的讨论与设计。测试案例的讨论主要是指测试人员要和产品工程师、业务部门或客户等需求方沟通对功能和性能的要求。测试案例的设计质量是所有类型测试质量的决定性因素。

作为微软的网站,TheDevOpsFactory介绍了Visual Studio 2015 online的测试自动化功能。该系统提供了从测试计划、测试定义、测试机器的创建到测试报告的功能。集成度高、开放和可扩展性强是它的特点。

2. 持续集成

持续集成鼓励尽早提交代码进行合并集成测试。这样能尽早发现和修复问题。每次代码提交都要运行尽可能多的测试。只有通过了代码评审而且测试全部通过的代码才能合并到主线,这样保证了其他人始终能在正常的代码基础上开始工作。

鼓励尽早提交代码,意味着开发组文化的改变。 每次代码提交都运行尽可能多的的测试代码,意味着自动化测试在保证测试覆盖率的前提下需要足够快。 如果测试出错了,第一时间要修复问题。

Martin Fowler写了一篇关于持续集成的博客值得反复阅读: 持续集成

3. 基础设施代码化

基础设施代码化,是用代码来部署和配置基础设施。代码化以后,更容易在不同的环境中复制相同的基础设施,使得测试更有效,解决绝大多数由于环境不同导致的问题。代码化以后还可以像管理代码一样对基础设施进行变更和版本管理,更容易追溯变更和问题。代码化也是自动化的前提。

咨询机构Forrester在2015年的白皮书 Infra as code 从多个方面介绍了基础设施代码化对于更快发布应用的重要性。

开发与运营团队的合作是DevOps的核心问题。 共同的工具是开启开发与运营团队合作的基础。但这是不够的。从流程、绩效、文化等方面都需要进行评估和必要的调整,以促进跨团队的合作。

4. 应用性能管理

应用性能管理主要是指监控应用的性能指标,并进行处理。

首先需要定义监控指标。主要的指标包括应用出错情况,关键功能的响应时间等。

然后是监控的设计。监控的设计不只是运营团队的事情,很多应用业务相关指标的监控需要在应用设计与开发时加入相应的输出或功能支持。

最后是监控的实施与反馈。监控系统应该能发现问题,报告问题,还应该能自动处置一些性能情况。比如某电商监控系统发现了某一区域的订单出现快速增长,系统处理能力快速消耗,此时监控系统应该自动触发基础设施扩容代码,自动在相应的区域启用新的计算能力;当订单量回落稳定后,再逐步将多余计算能力回收。

国内的运维宝是这一领域知名的专业企业。链接: www.oneAPM.com

5. 持续交付

请参考 持续交付概述

6. 发布管理

发布管理是根据市场和客户需求发布产品及服务。快速响应客户的需求、快速响应市场需求,这些都依赖于持续交付能力。

7. Configuration Management

http://devops.com/2015/04/16/automation-provisioning-configuration-management-puppet/

配置管理是关于基础设施和应用软件系统的配置管理。自动化的配置管理可以通过Puppet, Chef, Ansible等工具实现。这些工具主要提供了一下功能来管理配置:

  1. 环境定义
  2. 节点定义
  3. 参数和属性定义
  4. 节点服务器基本属性自动发现
  5. 配置操作代码化

配置管理与基础设施代码化有紧密的联系。