希望这是我最后一次谈DevOps!,


什么是 DevOps?“DevOps”是“开发”development 和“运维”operations 两者的组合。


图片来自 Pexels

DevOps 可看作一种文化风向标,在该文化引领下,能促进项目团队中开发,测试,运维,产品等成员间的无缝协作。

它通过有效的自动化及可重复的方式更快地将代码部署到生产环境中,提高企业交付应用程序或服务的速度,从而更好地为客户提供高质量的产品,并在市场上获取更强有力地竞争优势。

因此,DevOps 可视为企业项目团队中一条持续优化,密切配合,协同运转的“隐形生产链”。

为什么需要 DevOps?

在那些没有 DevOps 实践的日子里,项目团队都经历了什么:

  • 项目内部开发团队和运维团队是完全独立的。
  • 当开发团队针对需求进行代码设计/构建后,测试任务和部署任务也是完全孤立彼此的活动,往往导致整体项目实际周期比预期构建耗时更长。
  • 团队成员各自花费大量时间用于设计,开发,测试,部署,而非汇聚于整体项目构建本身(即,分而不合)。
  • 手动部署代码往往不可避免出现人为错误,即便通过 Jenkins 持续集成,这仅仅是构建中的一部分而已。
  • 产品,开发,测试,运维团队有各自的时间轴,并不同步,将导致累计延迟的情况。

持续提升团队产品的交付率,在确保产品质量的前提下缩短交付时间,是每个项目团队共同的目标,然而理想与现实间总会横着一道难以逾越的鸿沟。

全球知名研究机构 Forrester 曾指出:只有 17% 的团队能在足够快地时间内交付客户所需产品。

在无 DevOps 文化引入及实践的情况下,从以上列出的 5 大痛点不难得出团队生产力低下,协同工作效率不尽如人意的原因所在。

DevOps 与传统 IT 的区别

为了清晰认识到 DevOps 引入给项目运作带来的变化, 以下将结合一则场景对比“传统研发模式” VS “DevOps”的相异之处。

假设当前项目团队工作进展如下:

“传统研发模式” VS “DevOps”对比图如下:

DevOps 的价值

在敏捷项目研发大规模盛行的当下,DevOps 有助于敏捷团队更好地实行持续集成和持续交付,进而帮助项目团队更快地将他们所研发的产品/系统/平台投放市场。

此外 DevOps 的优势不仅局限于此,它还有其他值得关注的因素:

  • 可预测性:DevOps 有效降低了新版本的故障率。
  • 可重复性:DevOps 可将所有项目中的内容进行版本控制,便于随时还原早期版本。
  • 可维护性:在新版本崩溃或当前系统不可用的情况下,通过 DevOps 可轻松执行恢复过程。
  • 上市时间:DevOps 通过简化的软件交付程序,大大缩短了产品上市时间(保守估计至少可缩短 50% 的时间),这抢占市场先机的数据对当下的移动应用程序来说绝对是一大亮点。
  • 更高的质量:DevOps 中的基础设施建设有助于团队提高应用程序开发的质量。
  • 降低风险:DevOps 将安全因素纳入到软件交付的生命周期中,这大大减少了整个生命周期中的缺陷。
  • 将较大的代码库分成小段:DevOps 基于敏捷编程方法,将较大的代码库分解为较小的可管理模块。

DevOps 生命周期

DevOps 在开发和运营间构建了一座深度集成桥梁,只有全面了解 DevOps 生命周期才能进一步体会到持续集成持续部署(CI/CD)的实际意义。

以下罗列出 DevOps(CI/CD)生命周期中各阶段的核心任务:

①开发(Development)

DevOps 实践中会将整个软件开发过程分为若干个小的开发周期,这有益于 DevOps 团队通过小规模迭代来加快软件开发和软件交付的过程。

②测试(Testing)

QA 团队通过自动化手段辅助测试,协助开发人员识别和修复新代码中的错误。

③持续集成(Continues Integration)

在此阶段,新增功能将集成进之前的代码中,进行集成测试;言下之意,我们顺理成章地得出:持续开发只有通过持续集成和持续测试才能有效验证,从而确保能够顺利进入下一阶段的迭代。

④持续部署(Continues Deployment)

在 DevOps 中,除了强调持续集成(CI)外,部署过程也是持续进行的,在持续部署(CD)过程中,必须确保代码在任何时间所做的任何更改都不会影响到当前网站/系统已上线的功能(尤其是那些高流量的网站)。

⑤监控(Monitoring)

在此阶段,运维团队将密切关注系统/平台中的错误,Bug 等任何异常行为,实时反馈一切异常情况。

DevOps VS 敏捷

项目利益干系人和沟通链是 IT 流程中典型的核心要素,如果说敏捷模式的引入是为了解决客户方与研发团队沟通中的空白,那么 DevOps 的植入则填补了研发团队与 IT 运维团队间的空白。

“敏捷” VS “DevOps”对比图如下:

DevOps 原则

DevOps 有以下六大不可缺少的原则:

  • 以客户为中心:DevOps 团队必须采取以客户为中心的原则,客户才是产品和服务的投资者。
  • 端到端的责任:DevOps 团队需要持续提供性能支持。
  • 持续改进:DevOps 注重持续改进以最大程度地减少资源浪费,不断加快产品研发/服务提供的改进速度。
  • 自动化一切:自动化是 DevOps 流程的重要原则,不仅适用于软件研发,同样适用于整个基础架构设施。
  • 团队合作:DevOps 定义了设计,开发,测试,运维的角色,整个团队全面配合,协同工作。
  • 监视一切,测试一切:对于 DevOps 团队来说,拥有可靠的监视和测试流程尤为重要。

DevOps 自动化工具

DevOps 提倡将一切过程自动化,并对其进行配置,在大型 DevOps 团队中,维护大型 IT 基础架构所面临的困难可以简单地分为以下六类:

  • 基础设施自动化
  • 配置管理
  • 自动化部署
  • 性能管理
  • 日志管理
  • 监控管理

基于以上六大类,DevOps 实践中都有与之对应的工具/服务来解决各自的难题,下面逐一为大家介绍。

①基础设施自动化

Amazon Web Services(AWS):亚马逊公司旗下的云计算服务平台,几乎能够在云中运行一切应用程序,没有前期硬件成本,易按需扩展,为全世界用户提供了一整套基础设施和云解决方案,包括弹性计算、存储、数据库、应用程序在内的整套云计算服务,有效帮助企业降低 IT 投入成本和维护成本,实现轻松在云上部署一切。

②配置管理

Chef:这是一个非常有用的 DevOps 工具,可实现速度提升,大规模扩展以及保障整体一致性。

借助该工具,DevOps 团队可以避免在多台服务器之间进行更改的情况,只需要在一个地方进行更改,相应的变更将会自动同步到其他服务器中。

③自动化部署

Jenkins:可促进持续集成和持续测试,在持续集成后定时触发自动化测试,这有助于更轻松地将变更有效集成于现有项目中。

④性能管理

App Dynamic:一款 DevOps 工具,可提供实时性能监控,该工具收集的数据有助于开发人员在问题出现时及时调试。

⑤日志管理

Splunk:是一款非常优秀的日志分析软件,能处理常规的日志格式,比如 apache、squid、系统日志、mail.log 等。

它支持日志索引,交叉查询,复杂的查询语句等,并能通过非常直观的方式展现出来。

日志可以通过文件方式传送到 Splunk 服务器,也可通过网络实时传输,或者是分布式日志收集方式,总之它支持多种日志收集方法,是一个汇总,存储和分析所有日志的大本营。

⑥监控管理

Nagios:确保基础架构和相关服务出现故障时,相关人员能及时获悉该消息,并能实时响应并着手处理,Nagios 能够协助 DevOps 团队发现并及时纠正产品/系统/服务中存在的问题。

Nagios DevOps 监控管理

亚马逊 CTO Werner Vogels 曾提及在 DevOps 实践中,他们的研究着眼于“有多少团队在运行应用程序/基于产品提供的服务”,无论是由研发团队、运营团队还是软件发布成员或其他项目利益干系人,都有权定义监控指标。

基于上述提及的一系列用于 DevOps 实践的自动化辅助工具,我们以 Nagios 事件管理为例简单展示其在自动化监控管理中的优势。

Nagios 事件管理器是一款企业级,基于 Web 的事件管理应用程序,它允许团队或个人通过其强大的 Web 应用程序更快地跟踪和解决问题,该应用程序除了具备安全性和移动性外,还拥有与第三方集成协作的功能。

Nagios 事件管理器中主要包的菜单有: 智能仪表盘(Dashboard)、事件(Incidents)、报告(Reports)、管理(Admin)和帮助菜单。

以下我们逐一描述事件管理器的基本用法,包括但不限于创建、管理和关闭事件、跟踪统计数据等。

智能仪表盘(Dashboard)

如上图:

事件摘要(Incident Summary):显示当前需要引起注意的事件数量,直接点击链接,进入到对应的事件页面。

最近操作(Recent Actions):显示最近的 5 个操作。可以通过事件名(链接)来查看对应事件上的操作。

在智能仪表盘(Dashboard)页面中,可以通过单击右上角的“new incident”创建一个新的事件。

事件(Incidents)

在事件(Incidents)页面中,我们可以创建新的事件,管理已存在的事件。

①事件筛选:当单击 Incidents 菜单时,默认情况下会显示所有 open Incidents。可以通过单击页面顶部选项卡(打开“open”、关闭“closed”、已解决“resolved”、新建“new”或全部“all”)来筛选不同状态的事件。

还可以通过单击每列的标题,按名称“Title”、创建“Created”或更新日期“Last Updated”、事件类型“Type”、事件状态“Status”和优先级“Priority”对当前事件列表进行排序。

②事件管理:选择想要处理的事件(复选框),单击“Delete Selected”,可以批量删除事件;单击“Update Selected”,可以批量更改事件的优先级、状态或类型。

③创建新事件:单击右上角的“new incident”可以创建一个新的事件;填写必要的事件信息后,单击页面底部的“Save Incident”保存新建的事件。

④事件编辑:通过单击某个事件名称,来到事件编辑页面,在该页面添加关于该事件的更新消息,输入对应的消息后,点击发布消息“Post Message”即可。

可以通过单击“edit Details”或“delete incident”来查看、编辑或删除特定事件。


报告(Reports)

在 Reports 页面中,通过单击报告名称,可以指定开始和结束日期/时间,单击“Update”来生成对应的报告。

报告包含以下四类数据:

  • 统计报告(General Statistics):概述性报告,包括其他三个报告的数据,即:平均解决时间(MTTR)、首次响应时间和关闭的事件。
  • 平均解决时间(MTTR):包含解决每个事件所花费的平均时间,MTTR 总量也会在页面底部显示。
  • 首次响应时间(First Response Times):包含对每个事件首次响应的平均时间,首次响应的平均时间总量也会在页面底部显示。
  • 已关闭事件(Closed Incident):已关闭事件的总数。

管理(Admin)

管理页面由四个部分组成:

  • 用户和团队(Users&Teams)
  • 事件(Incidents)
  • 服务器设置(Server Settings)
  • 系统备份(System Backups)

下面分别对每部分所负责的任务进行展示:

①用户和团队(Users & Teams)

创建用户:点击左上角的添加用户“Add User”,输入所需的信息,保存后即可生效。

创建团队:点击添加团队“Add Team”,输入所需的信息,保存后即可生效。

②事件(Incidents)

这个板块专门用于管理事件类型、回调 API、查看每个事件当前上传的文件;单击左上角的“new Type”添加新的事件类型;通过单击右边的“Delete Incident Type”按钮来删除事件类型。

在“Callback API”页面可以添加新的回调函数,编辑或删除现有的回调函数;点击右上角的“New Callback”来新建回调 API,填写所需信息,选择“Enable this callback”复选框来启用此回调,保存后即可生效。

③服务器设置(Server Settings)

服务器设置中涉及到通用服务设置、LDAP/AD 集成、许可证设置、邮件设置及检查更新;在“邮件设置”页面,可以更改使用的邮件协议,PHP 邮件是默认设置的。

总结

对比传统 IT 项目研发流程,DevOps 能够帮助企业将其产品部署周期从数年转移到数月和数周,在此过程中提供各个环节的可维护性,可预测性,确保更高的质量成本,工作效率及上市时间。

DevOps 正在成为 IT 人员的重要技能,例如,在 Linux 招聘中进行的一项调查发现,受访者中有 25% 的求职者是 DevOps 专业人士。

总而言之,面对更加复杂的项目,多变的环境及基础设施,传统企业及个人必须对此做出改变,DevOps 工程师应具有解决问题的能力,并能快速学习,唯有如此,才能在确保品质的前提下,持续优化,快速发展,与个人企业都应当如是。

作者:罗小罗

简介:英国 TOP10 计算机专业,计算机科学与技术硕士,先后就职于汇丰,JPMorgan,HP,交行,阿里等国内外知名企业。涉及项目领域主要有:互联网金融,电商,教育,医疗等。现任就职于某世界 500 强公司,担任测试开发团队负责人,带领团队构建并持续优化自动化测试框架,研发自动化测试辅助类工具;擅长领域:单元/接口/性能/安全/自动化测试/CD/CI/DevOps;个人持续研究领域:自动化测试模型/数据分析/算法/机器学习等。

编辑:陶家龙

征稿:有投稿、寻求报道意向技术人请联络 editor@51cto.com

相关内容