如何从单体数据湖迁移到分布式数据网格
许多企业正在投资下一代数据湖,希望能够大规模地民主化数据,以提供商业洞察力,最终实现自动化的智能决策。基于数据湖架构的数据平台具有常见的故障模式,这些模式会导致大规模的承诺无法兑现。为了解决这些故障模式,我们需要从湖泊的集中式范式(或其前身数据仓库)转变。我们需要转向一种从现代分布式架构中汲取经验的范式:将领域作为首要关注点,应用平台思维来创建自助数据基础设施,并将数据视为产品。
2019年5月20日
成为数据驱动的组织仍然是我与之合作的许多公司的首要战略目标之一。我的客户非常清楚成为智能赋能的好处:根据数据和超个性化提供最佳客户体验;通过数据驱动的优化降低运营成本和时间;并赋予员工趋势分析和商业智能的超能力。他们一直在大力投资建设数据和智能平台等赋能者。尽管在构建此类赋能平台方面付出了越来越多的努力和投资,但这些组织发现结果平平。
我同意,组织在转型为数据驱动型组织方面面临着多方面的复杂性;从数十年的遗留系统迁移,遗留文化抵制依赖数据,以及不断竞争的业务优先级。但是,我想与大家分享的是一个架构视角,它揭示了许多数据平台计划失败的根本原因。我将展示如何将过去十年在构建大规模分布式架构方面的经验教训应用到数据领域;我将介绍一种新的企业数据架构,我称之为数据网格。
在继续阅读之前,请暂时放下对传统数据平台架构当前范式的深刻假设和偏见;敞开心扉,接受超越单体式和集中式数据湖,转向有意分布式数据网格架构的可能性;拥抱数据始终存在、无处不在和分布式的现实。
当前企业数据平台架构
它是集中式、单体式和领域无关的,也称为数据湖。
我与之合作的几乎所有客户都在计划或构建他们的第三代数据和智能平台,同时承认过去几代的失败。
- 第一代:专有企业数据仓库和商业智能平台;价格昂贵的解决方案,给公司留下了同样多的技术债务;数千个无法维护的ETL作业、表和报告的技术债务,只有少数专业人员才能理解,导致对业务的积极影响未能实现。
- 第二代:以数据湖为银弹的大数据生态系统;由中央团队的超专业数据工程师运营的复杂大数据生态系统和长时间运行的批处理作业,创造了数据湖怪兽,充其量只支持了部分研发分析;承诺过高,实现不足。
第三代和当前的数据平台与上一代大体相似,但具有现代的转变,包括(a)针对实时数据可用性的流式处理,采用Kappa等架构,(b)使用Apache Beam等框架统一批处理和流式处理以进行数据转换,以及(c)完全拥抱基于云的托管服务,用于存储、数据管道执行引擎和机器学习平台。很明显,第三代数据平台正在解决前几代的一些差距,例如实时数据分析,以及降低管理大数据基础设施的成本。但是,它仍然存在许多导致前几代失败的潜在特征。
架构故障模式
为了解开所有数据平台世代所承载的潜在局限性,让我们看看它们的架构和特征。在这篇文章中,我使用Spotify、SoundCloud、Apple iTunes等互联网媒体流式传输业务领域作为示例,以阐明一些概念。
集中式和单体式
从30,000英尺的高度来看,数据平台架构看起来像下面的图1;一个集中式的架构,其目标是
- 摄取数据来自企业各个角落,包括运行业务的运营和交易系统和领域,或增强企业知识的外部数据提供商。例如,在媒体流式传输业务中,数据平台负责摄取各种各样的数据:'媒体播放器性能'、'用户如何与播放器交互'、'他们播放的歌曲'、'他们关注的艺术家',以及'业务已加入的标签和艺术家'、'与艺术家的财务交易',以及外部市场研究数据,例如'客户人口统计'信息。
- 清理、丰富和转换源数据,使其成为可信赖的数据,能够满足各种消费者的需求。在我们的示例中,其中一项转换将用户交互的点击流转换为包含用户详细信息的有效会话。这试图将用户的旅程和行为重建为聚合视图。
- 为具有各种需求的各种消费者提供服务。这包括分析性消费、探索数据以寻找洞察力、基于机器学习的决策制定,以及总结业务绩效的商业智能报告。在我们的媒体流式传输示例中,平台可以通过Kafka等分布式日志接口提供有关全球媒体播放器的近实时错误和质量信息,或者提供特定艺术家播放记录的静态聚合视图,以驱动对艺术家和标签的财务支付计算。
图1:单体数据平台的30,000英尺视图
这是一个公认的惯例,即单体数据平台托管并拥有逻辑上属于不同领域的數據,例如'播放事件'、'销售KPI'、'艺术家'、'专辑'、'标签'、'音频'、'播客'、'音乐活动'等;来自大量不同领域的數據。
虽然在过去十年中,我们已成功地将领域驱动设计和限界上下文应用于我们的运营系统,但我们在很大程度上忽略了数据平台中的领域概念。我们已经从面向领域的數據所有权转向集中式的领域无关的數據所有权。我们为创建所有单体中最大的一个,即大数据平台而感到自豪。
图2:集中式数据平台,没有明确的數據领域边界和面向领域的數據所有权
虽然这种集中式模型适用于具有更简单领域和更少多样化消费案例的组织,但它不适用于具有丰富领域、大量来源和各种消费者的企业。
集中式数据平台的架构和组织结构存在两个压力点,往往会导致其失败。
- 无处不在的数据和源的激增:随着更多数据变得无处不在,在同一个地方、在一个平台的控制下消费所有数据并将其协调起来的能力正在下降。想象一下,仅在'客户信息'领域,组织边界内外就有越来越多的来源提供有关现有和潜在客户的信息。我们必须在一个地方摄取和存储数据才能从各种来源获得价值的假设,将限制我们响应数据源激增的能力。我认识到数据科学家和分析师需要以低开销处理各种数据集,以及需要将运营系统数据使用与用于分析目的的数据分开。但我建议,现有的集中式解决方案并非拥有丰富领域和不断添加新来源的大型企业的最佳答案。
- 组织的创新议程和消费者激增:组织对快速实验的需求引入了更多用例,用于从平台消费数据。这意味着对数据进行越来越多的转换——聚合、投影和切片,以满足创新假设驱动开发的测试和学习周期。满足数据消费者需求的长时间响应时间历来是组织摩擦的一个点,并且在现代数据平台架构中仍然如此。
虽然我不想现在就给出我的解决方案,但我需要澄清一下,我并不是主张将孤立的、分散的、面向领域的數據隐藏在运营系统的深处;孤立的、难以发现、理解和消费的领域数据。我并不是主张创建多个分散的数据仓库,这些数据仓库是多年积累的技术债务的结果。这是行业领导者已经表达过的担忧。但我认为,对这些无法访问的意外数据孤岛的回应,不是创建集中式数据平台,由一个集中式团队拥有和管理来自所有领域的數據。正如我们上面所学和证明的那样,它在组织上无法扩展。
耦合管道分解
传统数据平台架构的第二个失败模式与我们如何分解架构有关。从10,000英尺的高度俯瞰集中式数据平台,我们发现其架构分解围绕着**数据摄取**、**数据清洗**、**数据聚合**、**数据服务**等机械功能。组织中的架构师和技术领导者会根据平台的增长来分解架构。正如上一节所述,平台需要不断发展以应对新的数据源接入或新的数据消费者需求。架构师需要找到一种方法,通过将系统分解成**架构量子**来扩展系统。正如《构建演进式架构》中所述,架构量子是一个独立部署的组件,具有高度的功能内聚性,包含系统正常运行所需的所有结构元素。将系统分解成架构量子的动机是创建独立的团队,每个团队都可以构建和运营一个架构量子。在这些团队之间并行工作,以实现更高的运营可扩展性和速度。
受前几代数据平台架构的影响,架构师将数据平台分解成**数据处理阶段的管道**。从非常高的层次来看,管道围绕着数据处理的技术实现实现了功能内聚;例如,**数据摄取**、**数据准备**、**数据聚合**、**数据服务**等功能。
图3:数据平台的架构分解
虽然这种模型通过将团队分配到管道的不同阶段提供了一定程度的可扩展性,但它也存在一个固有的限制,会减缓功能的交付速度。管道各个阶段之间存在高度耦合,难以交付独立的功能或价值。它**与变化轴正交分解**。
让我们以媒体流媒体示例为例。互联网媒体流媒体平台围绕着它们提供的媒体类型构建了强大的领域结构。它们通常从“歌曲”和“专辑”开始服务,然后扩展到“音乐活动”,“播客”,“广播节目”,“电影”等。启用单个新功能,例如“播客播放率”的可见性,需要更改管道的所有组件。团队必须引入新的摄取服务、新的清洗和准备以及用于查看播客播放率的聚合。这需要跨不同组件的实现进行同步,以及跨团队进行发布管理。许多数据平台提供通用且基于配置的摄取服务,可以轻松应对扩展,例如添加新的数据源或修改现有数据源,以最大程度地减少引入新数据源的开销。但是,这并不能消除从消费者角度来看引入新数据集的端到端依赖管理。虽然在纸面上,管道架构看起来似乎已经实现了管道阶段的架构量子,但实际上,整个管道,即单体平台,是必须更改以满足新功能的最小单元:解锁新数据集并使其可供新或现有消费者使用。这限制了我们根据新的消费者或数据源来实现更高速度和可扩展性的能力。
图4:在引入或增强功能时,架构分解**与变化轴正交**,导致耦合和更慢的交付速度
孤立和高度专业化的所有权
当今数据平台的第三个失败模式与我们如何构建和拥有平台的团队有关。当我们足够近地观察构建和运营数据平台的人员的生活时,我们发现了一群高度专业化的数据工程师,他们与组织的运营部门隔离开来;数据从哪里产生,或者数据在哪里被使用并转化为行动和决策。数据平台工程师不仅在组织上是孤立的,而且根据他们在大型数据工具方面的技术专长被分组到一个团队中,通常缺乏业务和领域知识。
图5:孤立的高度专业化的数据平台团队
我个人不羡慕数据平台工程师的生活。他们需要从那些没有动力提供有意义、真实和正确数据的团队那里获取数据。他们对生成数据的源领域了解甚少,并且缺乏团队中的领域专业知识。他们需要为各种需求提供数据,无论是运营的还是分析的,而对数据的应用和访问消费领域专家的途径并不清楚。
例如,在媒体流媒体领域,在源端,我们有跨职能的“媒体播放器”团队,他们提供有关用户如何与他们提供的特定功能交互的信号,例如“播放歌曲事件”,“购买事件”,“播放音频质量”等;在另一端,是跨职能的消费者团队,例如“歌曲推荐”团队,“销售团队”报告销售KPI,“艺术家支付团队”根据播放事件计算和支付艺术家等等。不幸的是,数据平台团队夹在中间,他们通过巨大的努力为所有来源和消费提供合适的数据。
实际上,我们发现的是断开的源团队,沮丧的消费者争夺数据平台团队积压工作中的位置,以及一个过度紧张的数据平台团队。
我们创建了一个架构和组织结构,它无法扩展,也无法实现创建数据驱动型组织的承诺价值。
下一代企业数据平台架构
它通过**分布式数据网格**来拥抱**无处不在的数据**。
那么,对于我们上面讨论的失败模式和特征,答案是什么?在我看来,需要**范式转变**。在构建现代分布式架构的技术交汇处进行范式转变;这些技术已被整个科技行业以加速的速度采用,并创造了成功的结果。
我认为,下一个企业数据平台架构将是**分布式领域驱动架构**、**自助服务平台设计**和**产品思维与数据**的融合。
图6:融合:构建下一代数据平台的范式转变
虽然这听起来像在一个句子中堆砌了很多流行语,但每种技术在现代化运营系统的技术基础方面都具有特定且非常积极的影响。让我们深入探讨如何将这些学科应用于数据领域,以摆脱当前的范式,该范式是从多年的传统数据仓库架构中延续下来的。
数据和分布式领域驱动架构融合
面向领域的數據分解和所有权
埃里克·埃文斯的著作《领域驱动设计》深刻地影响了现代架构思维,以及随之而来的组织建模。它影响了微服务架构,将系统分解成围绕业务领域能力构建的分布式服务。它从根本上改变了团队的形成方式,以便一个团队可以独立自主地拥有一个领域能力。
虽然我们在实现运营能力时采用了面向领域的分解和所有权,但奇怪的是,我们在处理数据时忽略了业务领域的理念。DDD 在数据平台架构中最接近的应用是,源运营系统发出其业务**领域事件**,而单体数据平台则摄取这些事件。然而,在摄取之后,领域的概念以及不同团队对领域数据的拥有权就消失了。
**限界上下文**是一个非常强大的工具,用于设计数据集的所有权。本·斯托普福德的《数据二分法》文章阐述了通过流共享领域数据集的概念。
为了分散单体数据平台,我们需要颠覆我们对数据、数据位置和所有权的思考方式。与其将数据从领域**流入**一个集中式数据湖或平台,不如让领域**托管和服务**其领域数据集,使其易于被任何团队以任何目的进行消费。
在我们的示例中,与其想象数据从媒体播放器流入某种集中式位置,供集中式团队接收,不如想象一个播放器领域拥有并服务其数据集,供任何团队以任何目的进行下游访问。数据集实际驻留的位置以及它们如何流动,是“播放器领域”的技术实现。物理存储当然可以是集中式基础设施,例如 Amazon S3 存储桶,但播放器数据集的内容和所有权仍然属于生成它们的领域。同样,在我们的示例中,“推荐”领域以适合其应用的格式创建数据集,例如图数据库,同时消费播放器数据集。如果存在其他领域,例如“新艺术家发现领域”,它们发现“推荐领域”图数据集有用,它们可以选择拉取和访问该数据集。
这意味着我们可能会在不同的领域复制数据,因为我们将它们转换为适合该特定领域的形状,例如,将时间序列播放事件转换为相关艺术家图。
这要求我们从传统的**推送和摄取**模式(通常通过 ETL 和最近的事件流)转变为跨所有领域的**服务和拉取**模型。
面向领域的 data platform 中的**架构量子**是**领域**,而不是管道阶段。
图7:根据领域分解架构和团队拥有数据 - 源、消费者和新创建的共享领域
面向源的领域数据
一些领域自然地与数据来源对齐,即数据从哪里产生。**源领域数据集**代表**业务的事实和现实**。**源领域数据集**捕获的数据与它们起源的运营系统(**现实系统**)生成的数据非常接近。在我们的示例中,业务事实,例如“用户如何与服务交互”或“标签入职流程”,导致创建了领域数据集,例如“用户点击流”,“音频播放质量流”和“入职标签”。这些事实最适合由位于起源点的运营系统所知和生成。例如,媒体播放器系统最了解“用户点击流”。
在成熟和理想的情况下,运营系统及其团队或组织单元不仅负责提供业务能力,还负责提供**其业务领域的真相**作为源领域数据集。在企业规模上,领域概念和源系统之间永远不会存在一对一的映射。通常,许多系统可以服务于属于一个领域的某些数据,有些是遗留的,有些则易于更改。因此,可能存在许多**与源对齐的数据集**,也称为**现实数据集**,最终需要聚合到一个一致的与领域对齐的数据集中。
业务事实最好以业务**领域事件**的形式呈现,可以存储和服务为时间戳事件的分布式日志,供任何授权的消费者访问。
除了定时事件之外,源数据领域还应提供易于消费的源领域数据集的历史快照,这些快照在时间间隔内聚合,该时间间隔与它们领域的更改间隔密切相关。例如,在“入职标签”源领域中,该领域显示为流媒体业务提供音乐的艺术家的标签,在每月聚合入职标签是一个合理的视图,除了通过入职标签过程生成的事件之外。
请注意,与源对齐的领域数据集必须与内部源系统的 datasets 分开。领域数据集的性质与运营系统用来完成其工作的内部数据非常不同。它们具有更大的体积,代表不可变的定时事实,并且变化频率低于其系统。出于这个原因,实际的底层存储必须适合大数据,并且与现有的运营数据库分开。部分 数据和自助服务平台设计融合 描述了如何创建大数据存储和服务基础设施。
源域数据集是最基础的数据集,变化频率较低,因为业务事实并不经常改变。这些域数据集预计将被永久捕获并提供,以便随着组织发展其数据驱动和智能服务,他们始终可以回到业务事实,并创建新的聚合或预测。
请注意,源域数据集在创建时与原始数据非常接近,并且没有针对特定消费者进行拟合或建模。
分布式管道作为领域内部实现
虽然数据集的所有权从中央平台委托给域,但清理、准备、聚合和提供数据的需求仍然存在,数据管道的使用也是如此。在此架构中,数据管道只是数据域的内部复杂性和实现,并在域内内部处理。因此,我们将看到数据管道阶段分布到每个域中。
例如,源域需要包含其域事件的清理、去重、丰富,以便其他域可以消费它们,而无需重复清理。每个域数据集必须为其提供的数据质量建立服务级别目标:及时性、错误率等。例如,我们的媒体播放器域提供音频“播放点击流”可以在其域中包含清理和标准化数据管道,该管道提供符合组织事件编码标准的去重近实时“播放音频点击事件”流。
同样,我们也会看到集中式管道中的聚合阶段转移到消费域的实现细节中。
图 8:将管道作为二级关注点和域的内部实现细节分布到域中
有人可能会争辩说,这种模型可能会导致每个域在创建自己的数据处理管道实现、技术堆栈和工具方面付出重复的努力。我将在我们讨论数据和平台思维与自助共享数据基础设施作为平台的融合时很快解决这个问题。
数据和产品思维融合
将数据所有权和数据管道实现分配到业务域手中,引发了关于分布式数据集的可访问性、可用性和协调性的重要问题。这就是应用产品思维和数据资产所有权的学习发挥作用的地方。
领域数据作为产品
在过去十年中,运营域已将其产品思维融入其提供给组织其他部门的功能中。域团队将这些功能作为 API 提供给组织中的其他开发人员,作为创建更高阶价值和功能的构建块。团队努力为其域 API 创建最佳的开发人员体验;包括可发现且易于理解的 API 文档、API 测试沙箱以及密切跟踪的质量和采用 KPI。
为了使分布式数据平台取得成功,域数据团队必须以类似的严谨性将产品思维应用于他们提供的数据集;将他们的数据资产视为他们的产品,将组织中其他数据科学家、ML 和数据工程师视为他们的客户。
图 9:域数据集作为产品的特征
以我们的互联网媒体流业务为例。其关键域之一是“播放事件”,哪些歌曲由谁、何时何地播放。该关键域在组织中拥有不同的消费者;例如,对用户体验和可能的错误感兴趣的近实时消费者,以便在出现客户体验下降或传入客户支持电话时能够快速响应以恢复错误。还有一些消费者更喜欢每日或每月歌曲播放事件聚合的历史快照。
在这种情况下,我们的“播放歌曲”域将两个不同的数据集作为其产品提供给组织的其他部门;在事件流上公开的实时播放事件,以及在对象存储上公开的聚合播放事件。
任何技术产品的关键质量,在这种情况下是域数据产品,是让其消费者满意;在这种情况下是数据工程师、ML 工程师或数据科学家。为了为消费者提供最佳的用户体验,域数据产品需要具备以下基本品质
可发现的
数据产品必须易于发现。一种常见的实现方式是拥有一个注册表,一个数据目录,其中包含所有可用数据产品的元信息,例如其所有者、来源、血统、样本数据集等。这种集中式可发现性服务允许组织中的数据消费者、工程师和科学家轻松找到他们感兴趣的数据集。每个域数据产品必须在该集中式数据目录中注册自己,以便轻松发现。
请注意,这里的视角转变是从单个平台提取和拥有数据以供其使用,到每个域以可发现的方式提供其数据作为产品。
可寻址的
数据产品一旦被发现,应该有一个遵循全局约定的唯一地址,帮助其用户以编程方式访问它。组织可能会根据数据的底层存储和格式采用不同的数据命名约定。考虑到易用性作为目标,在去中心化架构中,有必要制定通用约定。不同的域可能会以不同的格式存储和提供其数据集,事件可能会通过 Kafka 主题等流进行存储和访问,列式数据集可能会使用 CSV 文件,或者 AWS S3 存储桶中的序列化Parquet 文件。在多语言环境中,数据集可寻址性的标准消除了查找和访问信息的摩擦。
可信赖和真实的
没有人会使用他们不信任的产品。在传统的数据平台中,提取和导入包含错误、不反映业务真相且根本不可信的数据是可以接受的。这就是集中式数据管道的大部分工作集中在清理数据后的原因。
一项根本性的转变要求数据产品的所有者提供可接受的服务级别目标,围绕数据的真实性,以及它在多大程度上反映了已发生的事件的现实或已生成见解的真实性的高概率。在数据产品创建时应用数据清理和自动数据完整性测试是用于提供可接受的质量水平的一些技术。提供数据来源和数据血统作为与每个数据产品相关的元数据,有助于消费者进一步信任数据产品及其是否适合他们的特定需求。
数据完整性(质量)指标的目标值或范围在域数据产品之间有所不同。例如,“播放事件”域可能会提供两种不同的数据产品,一种是近实时的,准确性较低,包括丢失或重复的事件,另一种是延迟更长,事件准确性更高的。每个数据产品都定义并确保其完整性和真实性的目标级别,作为一组 SLO。
自描述语义和语法
优质产品不需要消费者手把手指导即可使用:它们可以独立发现、理解和使用。将数据集构建为产品,以便数据工程师和数据科学家能够以最小的摩擦使用它们,需要对数据的语义和语法进行详细描述,理想情况下还应附带样本数据集作为示例。数据模式是提供自助数据资产的起点。
可互操作的,并受全球标准管理
在分布式域数据架构中,主要问题之一是能够跨域关联数据并将它们以奇妙而有见地的方式缝合在一起;联接、过滤、聚合等。跨域有效关联数据的关键是遵循某些标准和协调规则。此类标准化应属于全局治理,以实现多语言域数据集之间的互操作性。此类标准化工作中的常见问题包括字段类型格式、识别跨不同域的多义词、数据集地址约定、通用元数据字段、事件格式,例如CloudEvents 等。
例如,在媒体流业务中,“艺术家”可能会出现在不同的域中,并且在每个域中具有不同的属性和标识符。“播放事件流”域可能以不同于“艺术家付款”域的方式识别艺术家,后者负责发票和付款。但是,为了能够跨不同域数据产品关联有关艺术家的数据,我们需要就如何识别艺术家作为多义词达成一致。一种方法是将“艺术家”视为一个联合实体,并为“艺术家”提供一个唯一的全局联合实体标识符,类似于联合身份 的管理方式。
互操作性和通信标准化,由全球治理,是构建分布式系统的基础支柱之一。
安全的,并受全球访问控制管理
安全地访问产品数据集是必须的,无论架构是集中式还是非集中式。在去中心化面向域的数据产品的世界中,访问控制以更细粒度的方式应用于每个域数据产品。与运营域类似,访问控制策略可以在中央定义,但在访问每个单独的数据集产品时应用。使用企业身份管理系统 (SSO) 和基于角色的访问控制 策略定义是实现产品数据集访问控制的便捷方式。
部分数据和自助服务平台设计融合描述了为每个数据产品轻松自动启用上述功能的共享基础设施。
跨职能的领域数据团队
提供数据作为产品的域需要增强新的技能集:(a)数据产品所有者和(b)数据工程师。
数据产品所有者围绕数据产品的愿景和路线图做出决策,关注其消费者的满意度,并不断衡量和改进其域拥有和生产的数据的质量和丰富度。她负责域数据集的生命周期,何时更改、修订和停用数据和模式。她在域数据消费者的竞争需求之间取得平衡。
数据产品所有者必须为其数据产品定义成功标准和与业务相关的关键绩效指标 (KPI)。例如,数据产品消费者成功发现和使用数据产品所需的时间是一个可衡量的成功标准。
为了构建和运营各个领域的内部数据管道,团队必须包含数据工程师。这种跨职能团队的一个奇妙的副作用是不同技能的交叉授粉。我目前对行业的观察是,一些数据工程师虽然精通使用其专业工具,但在构建数据资产时缺乏软件工程的标准实践,例如持续交付和自动化测试。同样,构建运营系统的软件工程师通常没有使用数据工程工具集的经验。消除技能孤岛将导致创建更大的、更深层次的数据工程技能池,供组织使用。我们已经观察到 DevOps 运动中相同的跨技能授粉,以及新型工程师的诞生,例如 SREs。
数据必须被视为任何软件生态系统的基础部分,因此软件工程师和软件通才必须将数据产品开发的经验和知识添加到他们的工具箱中。同样,基础设施工程师需要添加管理数据基础设施的知识和经验。组织必须提供从通才到数据工程师的职业发展路径。缺乏数据工程技能导致了形成集中式数据工程团队的局部优化,如第 孤岛式和高度专业化的所有权 节所述。
图 10:具有明确数据产品所有权的跨职能领域数据团队
数据和自助平台设计融合
将数据所有权分配给各个领域的主要担忧之一是,每个领域都需要重复的努力和技能来运营数据管道的技术栈和基础设施。幸运的是,构建通用基础设施作为平台是一个已被理解和解决的问题;尽管公认的是,数据生态系统中的工具和技术还没有那么成熟。
将与领域无关的基础设施功能收割和提取到数据基础设施平台中,解决了重复设置数据管道引擎、存储和流式传输基础设施的努力的需要。数据基础设施团队可以拥有并提供各个领域捕获、处理、存储和服务其数据产品所需的必要技术。
图 11:将与领域无关的数据管道基础设施和工具提取和收割到一个单独的数据基础设施平台中
构建数据基础设施作为平台的关键是 (a) 不包含任何特定于领域的概念或业务逻辑,保持其与领域无关,以及 (b) 确保平台隐藏所有底层复杂性,并以自助方式提供数据基础设施组件。自助式数据基础设施平台为其用户(各个领域的 数据工程师)提供了大量功能,以下列出其中一些:
- 可扩展的多语言大数据存储
- 静止数据和动态数据的加密
- 数据产品版本控制
- 数据产品模式
- 数据产品去标识化
- 统一的数据访问控制和日志记录
- 数据管道实现和编排
- 数据产品发现、目录注册和发布
- 数据治理和标准化
- 数据产品血缘
- 数据产品监控/警报/日志
- 数据产品质量指标(收集和共享)
- 内存数据缓存
- 联合身份管理
- 计算和数据本地性
自助式数据基础设施的成功标准是降低基础设施上“创建新数据产品的交付周期”。这将导致自动化,这是实现“数据产品”功能的必要条件,如第 领域数据作为产品 节所述。例如,通过配置和脚本自动执行数据摄取,数据产品创建脚本以构建脚手架,自动将数据产品注册到目录等。
使用云基础设施作为底层可以降低提供按需访问数据基础设施所需的运营成本和工作量,但它并没有完全消除需要在业务环境中实施的更高抽象。无论云提供商如何,都有一套丰富且不断增长的数据基础设施服务可供数据基础设施团队使用。
向数据网格的范式转变
这是一篇长文。让我们把所有内容都整合起来。我们研究了当前数据平台的一些底层特征:集中式、单体式、具有高度耦合的管道架构,由高度专业化的数据工程师孤岛运营。我们介绍了无处不在的数据网格作为平台的构建块;分布式数据产品围绕各个领域进行组织,并由独立的跨职能团队拥有,这些团队拥有嵌入式数据工程师和数据产品负责人,使用通用的数据基础设施作为平台来托管、准备和服务其数据资产。
数据网格平台是一个经过精心设计的分布式数据架构,在集中式治理和标准化的支持下实现互操作性,并通过共享和协调的自助式数据基础设施实现。我希望很清楚,它远非无法访问数据的碎片化孤岛的景象。
图 12:从 30,000 英尺高度看数据网格架构
你可能会问,数据湖 或数据仓库适合这种架构吗?它们只是网格上的节点。我们很可能不需要数据湖,因为保存原始数据的分布式日志和存储可以从不同的可寻址不可变数据集作为产品进行探索。但是,如果我们需要对原始数据的格式进行更改以进行进一步探索,例如标记,具有此类需求的领域可能会创建自己的湖泊或数据中心。
因此,数据湖不再是整个架构的中心。我们将继续将数据湖的一些原则(例如,使不可变数据可用于探索和分析使用)应用于面向源的领域数据产品。我们将继续使用数据湖工具,但要么用于数据产品的内部实现,要么作为共享数据基础设施的一部分。
实际上,这让我们回到了最初的地方:2010 年的 James Dixon 旨在将数据湖用于单个领域,而多个数据领域将形成一个“水花园”。
主要的变化是将领域数据产品视为一等公民,而将数据湖工具和管道视为二等公民——一个实现细节。这颠覆了当前从集中式数据湖到数据产品生态系统的思维模式,这些数据产品可以很好地协同工作,形成一个数据网格。
同样的原则也适用于用于业务报告和可视化的数据仓库。它只是网格上的一个节点,可能位于网格的以消费者为中心的边缘。
我承认,虽然我看到数据网格实践在我的客户中零星地应用,但企业规模的采用还有很长的路要走。我不认为技术是这里的限制,我们今天使用的所有工具都可以适应多个团队的分布和所有权。特别是向批处理和流式传输的统一以及 Apache Beam 或 Google Cloud Dataflow 等工具的转变,可以轻松地处理可寻址的多语言数据集。
Google Cloud Data Catalog 等数据目录平台提供了分布式领域数据集的集中式可发现性、访问控制和治理。各种各样的 云数据存储 选项使领域数据产品能够选择适合目的的多语言存储。
需求是真实的,工具已经准备就绪。组织中的工程师和领导者需要意识到,现有的大数据和一个真正的大数据平台或数据湖的范式只会重复过去的失败,只是使用新的基于云的工具。
这种范式转变需要一套新的治理原则,以及一种新语言
- 服务胜过摄取
- 发现和使用胜过提取和加载
- 发布事件作为流胜过通过集中式管道流动数据
- 数据产品生态系统胜过集中式数据平台
让我们将大数据单体分解成一个协调、协作和分布式的数据网格生态系统。
重大修订
2019 年 5 月 20 日:发布最终部分
2019 年 5 月 16 日:发布关于产品思维的部分
2019 年 5 月 14 日:发布关于领域驱动架构的部分
2019 年 5 月 13 日:发布关于当前企业数据平台架构的部分