DataOps:不仅仅是数据的DevOps

by June 2021-11-09

附件
  《DataOps:不仅仅是数据的DevOps》全文下载

  《DataOps:不仅仅是数据的DevOps》全文下载

1.17 MB
Login is required to access this page
图 1:DevOps通常被描述为一个无限循环,而DataOps被描述为交叉的价值和创新管道

关于DataOps的一个常见误解是,它只是应用于数据分析的DevOps。虽然在语义上有点误导,但“DataOps”这个名字有一个积极的属性,它传达了这样一个信息,即数据分析可以实现通过DevOps而进行的软件开发。也就是说,当数据团队使用新的工具和方法时,DataOps可以在质量和周期时间上产生一个数量级的改进。DataOps实现这些收益的具体方式反映了数据团队(相对于使用DevOps的软件开发团队)的独特人员、流程和工具特征。这是我们对DataOps和DevOps之间明显的和细微差异的深入探讨。

DataOps的知识遗产 

DevOps是一种软件开发方法,它借助(或使用)自动化加速构建生命周期(以前称为发布工程化)。DevOps通过利用按需 IT 资源(基础设施即代码)和自动化代码的集成、测试和部署,专注于软件的持续集成和持续交付。这种软件开发和 IT 运营(“开发Development”和“运行OPerations”)缩短了部署时间,缩短了上市时间,最大限度地减少了缺陷,并缩短了解决问题所需的时间。 

使用DevOps,领先的公司已经能够将他们的软件发布周期时间从几个月缩短到(实际上的)秒级。这使他们能够在快节奏的新兴市场中成长并处于领先地位。谷歌、亚马逊和许多其他公司现在每天发布多次软件。通过提高代码发布的质量和周期时间,DevOps为这些公司的成功赢得了很多赞誉。 

优化代码构建和交付只是数据分析这样一个大难题的一部分。DataOps旨在缩短数据分析的端到端周期时间,涵盖范围从创意的起源到创造价值的图表、图形和模型的文字创建。除了工具之外,数据生命周期还依赖于人。要使DataOps有效,还必须管理协作和创新。为此,DataOps将敏捷开发引入数据分析,以便数据团队和用户更高效地协同工作。 在敏捷开发中,数据团队以称为“冲刺”的短增量发布新的或更新的分析。随着创新的快速发生,团队可以不断重新评估其优先级,并更轻松地适应不断变化的需求。使用(以往的)流水线式项目管理方法,这种类型的响应是不可能做到的,该方法将团队锁定在一个漫长的开发周期中,并在最后提供一个“大爆炸”的交付成果。 

图 2:DataOps的知识遗产

研究表明,当敏捷开发取代传统的瀑布式(流水线式)顺序方法时,敏捷软件开发项目完成得更快,缺陷更少。敏捷方法在需求快速变化的环境中特别有效——这是数据分析专业人士众所周知的情况。在DataOps环境中,敏捷方法使组织能够快速响应客户需求并加快实现价值的时间。 

敏捷开发和DevOps为数据分析增加了重要价值,但 DataOps还有另外一个主要组成部分。敏捷和 DevOps 与分析开发和部署相关,而数据分析还管理和编排数据管道。数据不断地从管道的一侧进入,通过一系列步骤并以报告、模型和视图的形式输出。数据管道是数据分析的“操作”端。将数据管道概念化(或比喻做)为一条生产线,该生产线必须管理质量、效率、限制条件和正常运行时间,这个概念是很有用的。为了完全接受这种“生产制造”思维,我们将此管道称为“数据工厂”。 

在DataOps中,必须操作(或运行)的数据流是一个重要的关注领域。DataOps编排、监控和管理数据工厂。统计过程控制(SPC)是一种特别强大的精益制造(或精益生产)工具。统计过程控制(SPC) 测量和监控数据管道的数据和操作特性,确保统计数据保持在可接受的范围内。当统计过程控制(SPC)应用于数据分析时,它将显著提高效率、质量和透明度。统计过程控制(SPC)到位后,流经操作系统的数据将被验证是否有效。如果发生异常,数据分析团队将首先通过自动报警获知(消息)。 

虽然“DataOps”这个名字暗示它大量借鉴了DevOps,但这三种方法——敏捷、DevOps和统计过程控制(SPC)——构成了DataOps的知识遗产。敏捷性管理着分析开发,DevOps优化代码验证、新分析的构建和交付,统计过程控制(SPC)编排和监控数据工厂。图 2 说明了敏捷、DevOps和统计流程控制(SPC)如何流入DataOps。 

您可以在一个世纪以来人类管理复杂系统思想演变的背景下查看DataOps。它始于像 Demming 和统计过程控制(SPC)这样的先驱——逐渐地,这些想法以敏捷性、DevOps和现在的DataOps的形式进入技术领域。 

DevOps与DataOps— 人为因素 

如上所述,DataOps与管理人员和工具一样重要。DataOps和DevOps之间的细微差别与利益相关者的需求和偏好有关。 

图 3:数据运维(DataOps) 和 开发运行(DevOps) 用户有不同的心态

DevOps的创建是为了满足软件开发人员的需求。开发工程师喜欢编码并拥抱技术。学习一门新语言或部署新工具是一个机会,而不是麻烦。他们对代码创建、集成和部署的所有细节都有专业的兴趣。DevOps拥抱(或欢迎)复杂性。 

而DataOps的用户通常与此相反。他们是专注于构建并部署模型和可视化的数据科学家或分析师。科学家和分析师通常不像工程师那样精通技术。他们专注于领域专业知识。他们对让模型更具预测性或决定如何以最佳方式呈现数据感兴趣。用于创建这些模型和可视化的技术只是达到目的的一种手段。数据专业人员最乐于使用一两个工具——除此之外的任何东西都会增加不受欢迎的复杂性。在极端情况下,复杂性超出了他们的管理能力。DataOps接受或认可数据专业人员生活在一个多工具、异构的世界中,并试图让这个世界对他们来说更易于管理。 

DevOps与 DataOps— 流程差异 

通过查看数据分析开发和生命周期流程,我们可以开始了解数据专业人员所面临的独特复杂性。我们发现,与软件开发人员相比,数据分析专业人员面临着既相似又独特的挑战。 DevOps的生命周期通常使用无限符号形状的图表来说明 – 参见图 4。循环的结束(“计划”)反馈到起始(“创建”),并且该过程无限期地迭代。   

图 4:DevOps生命周期通常被描述为一个无限循环

DataOps生命周期也具备这些迭代属性,但一个重要的区别是DataOps由两个活动(或活跃)且相交的管道组成(图 5)。上面描述的数据工厂是一个管道。另一个管道管理数据工厂的更新方式——新分析的创建和部署到数据管道中。 

数据工厂将原始数据源作为输入,并通过一系列精心编排的步骤产生分析见解,为组织创造“价值”。我们称之为“价值管道”。DataOps进行自动化编排,并使用 统计过程控制(SPC)监控流经价值管道的数据质量。

 “创新管道”是将新的分析思想引入价值管道的过程。创新管道在概念上类似于DevOps的开发过程,但经过仔细检查,有几个因素使 DataOps开发过程比DevOps更具挑战性。图 5 显示了价值和创新管道的简化视图。 图片

图 5:数据运维(DataOps)生命周期——价值和创新管道

DevOps与 DataOps — 开发及部署流程 

DataOps建立在DevOps的开发模型之上。如图 6 所示,DevOps流程包括一系列软件开发项目常见的步骤: 

  • 开发 — 创建/修改应用程序
  • 构建 — 组装应用程序组件
  • 测试 — 在测试环境中验证应用程序
  • 部署 — 将代码转换为生产
  • 运行 — 执行应用程序

 DevOps引入了两个基本概念:持续集成 (CI) 和持续部署 (CD)。持续集成CI 在开发环境中不断构建、集成和测试新代码。构建和测试是自动化的,因此它们可以快速重复地发生。这样可以快速识别和解决问题。图 6 说明了持续集成CI 如何包含DevOps的构建和测试过程阶段。  

图 6:比较DataOps和DevOps 流程

持续部署(CD)是一种部署或交付软件的自动化方法。应用程序通过所有资格测试后,DevOps 会将其部署到生产中。持续集成CI 和 持续部署CD 一起解决了阻碍敏捷开发的主要限制。在DevOps之前,敏捷方法学Agile 创建了一系列快速更新和创新,这些更新和创新将在手动集成和部署过程中停滞不前。借助自动化持续集成CI 和 持续部署CD,DevOps 使公司能够每天多次更新其软件。 

DataOps 中编排的双重性 

需要注意的是,“编排”在图 6 所示的DataOps 过程中发生了两次。正如我们上面解释的,DataOps 编排数据工厂(价值管道)。数据工厂由具有许多步骤的管道过程组成。想象一个复杂的有(方)向无环图 (DAG)。“编排器(或协调器)”可以是一个软件实体,它控制步骤的执行、遍历(或涵盖)整个DAG 并处理异常。例如,编排器(或协调器)可能会创建容器,调用运行时进程上下文敏感的参数,从一个阶段到另一个阶段传输数据,并“监视”管道执行。数据工厂的编排是图 7 中 DataOps 流程中的第二个“编排”。 

图 7:DataOps编排数据工厂 

如上所述,创新管道具有数据管道的代表性副本(或拷贝),用于在部署到生产之前测试和验证新分析。这是与“测试”结合并在“部署”新分析之前进行的编排——如图 8 所示。 编排发生在价值和创新管道中。同样,测试在DataOps 中扮演着双重角色。 

图 8:DataOps编排控制众多工具,这些工具可以访问、转换、建模、可视化和报告数据

留言

评论

${{item['author_name']}} 回复 ${{idToContentMap[item.parent] !== undefined ? idToContentMap[item.parent]['author_name'] : ''}} · ${{item.date.slice(0, 10)}} 回复

暂时还没有一条评论.