摘要

1) 一句话总结 本文概述了数据架构的核心演进历程,详细解析了关系型数据库、数据仓库、数据湖、数据湖仓、数据网格及事件驱动架构的运行机制、核心决策与适用场景。

2) 关键要点

  • 架构的业务价值:合理的数据架构能显著提升组织效率,例如曾有公司通过重构架构,将业务审查报告的准备时间从两周缩短至两小时。
  • 关系型数据库:基于20世纪70年代提出的关系模型,采用严格的“写时模式(Schema-on-write)”,在数据写入前需定义好蓝图以确保一致性。
  • 关系型数据仓库:为避免分析查询拖垮日常运营(OLTP)系统而建立的独立分析环境。构建方式分为Inmon(自上而下,规范化但成本高)和Kimball(自下而上,灵活快速)两大流派。
  • 数据湖:兴起于2010年左右,采用“读时模式(Schema-on-read)”,提供廉价的无结构存储。如今其核心定位已转变为原始数据的暂存和准备区。
  • 数据湖仓:约2020年由Databricks提出,通过在数据湖之上添加事务存储层(如Delta Lake、Apache Iceberg),实现了ACID事务和模式强制执行,统一了存储与分析。
  • 数据网格:一种去中心化的社会技术转型,旨在解决中央数据团队的瓶颈。其四大核心原则为:面向领域的所有权、数据即产品、自助式数据平台和联邦计算治理。
  • 事件驱动架构:通过事件代理(如Apache Kafka)实现生产者与消费者的松耦合,系统对事件即时反应而非定时轮询,适用于实时分析和异步工作流。

3) 风险/缺口

  • 数据仓库(Kimball方法)风险:如果管理不慎,自下而上的构建方式容易导致数据不一致和数据孤岛。
  • 数据湖风险:由于缺乏绑定的计算引擎,若业务用户不具备高级编程技能(如Python),数据湖极易沦为浑浊且无法使用的“数据沼泽”。
  • 数据网格风险:不适合所有企业(尤其是小公司),要求领域团队具备真正的技术专长和长期承诺,且数据共享极易演变成组织内的政治问题。
  • 事件驱动架构风险:引入了需额外管理的新基础设施;跨解耦系统追踪单个事件会导致调试极其困难;事件代理不保证交付顺序;不适用于简单的CRUD应用或要求多步流程具备严格原子性的事务系统。

正文

把数据架构弄对,其他一切都会变得更简单。

这听起来很简单,但在现实中,数据架构设计里微小的差别可能会带来代价高昂的后果。数据架构是决定数据存放在哪里、如何在系统间移动、在转换过程中会发生什么,以及谁能访问哪些内容的蓝图。你可以把它想象成一个城市的布局:住宅区、商业区、工业区,以及将这一切连接起来的交通网络。

你的架构决定了你的组织究竟是像一个拥有高效公路和清晰分区的规划良好的城市,还是像一个毫无规划、肆意扩张且到处塞车的大都市。

我曾亲眼目睹过这种情况。一家通过收购快速扩张的公司,继承了他们买下的每家公司的数据系统,却从未花时间思考如何将这些系统整合在一起。客户数据分散在五个不同的CRM系统中,财务数据被拆分在三个不同的ERP中,每个系统对“客户”和“收入”等基本概念都有自己的定义。他们准备一次“每周”业务审查需要花上两周时间。六个月后,在实施了深思熟虑的数据架构后,他们能在两小时内生成同样的审查报告。

带来这种改变的并非最新技术或巨额预算,而仅仅是对如何组织和管理数据采取了周全的策略。以下是核心数据架构类型的速成指南,涵盖了它们的优缺点以及各自的用武之地。

1. 关系型数据库:越陈越香

关系型数据库的历史可以追溯到20世纪70年代,当时Edgar F. Codd提出了关系模型。从本质上讲,关系型数据库就是一个高度组织化的数字文件柜。每张表都是一个专门存放特定事物的抽屉(比如客户、订单、产品)。每一行是一条单独的记录,每一列是一个特定的属性。

其强大的力量来源于“关系”。数据库理解表与表之间是如何连接的,它知道“客户表”中的客户X和在“订单表”中下订单的客户X是同一个人。这种结构使我们能够使用SQL来提出复杂的问题。

使用关系型数据库时,必须遵循一个严格的规则:写时模式(Schema-on-write)。这就像盖房子:在打地基之前,你必须有一份详细的蓝图,提前定义好每个房间、每扇窗户和每扇门。保存数据时,数据必须完美契合这个蓝图。这种前期工作确保了一切的一致性,也保证了数据的可靠性。

相反的方法被称为读时模式(Schema-on-read),这就像把所有的建筑材料堆成一座大山。一开始没有蓝图,只有当你需要建造东西时,才决定如何构建结构。这绝对灵活,但它把理清混乱的重担推给了后来分析数据的人。

2. 关系型数据仓库:分析师的游乐场

关系型数据库过去(现在依然)非常擅长处理企业的日常运营——处理订单、管理库存、更新客户记录。我们称之为操作型(OLTP)系统,它们必须快如闪电。

但这带来了一个巨大的挑战——我称之为“别碰生产系统!”的问题。业务领导者需要分析数据,但在每分钟处理数千笔交易的同一个实时数据库上运行复杂的分析查询,会让整个系统陷入停顿。这就像在高峰时段的繁忙超市里试图进行深度盘点一样。

解决方案是什么?为分析师创建一个独立的游乐场。关系型数据仓库应运而生:这是一个专门为分析而构建的专用数据库,你可以在这里集中存放来自各个操作系统的业务数据副本。

两大流派:Inmon 与 Kimball

构建数据仓库有两种基本方法:

  • 自上而下(Bill Inmon提出):先设计整体的、规范化的数据仓库,然后再从中创建特定部门的数据集市。它能提供一致的数据表示并减少重复,但前期成本和复杂性很高。
  • 自下而上(Ralph Kimball倡导):先使用反规范化的事实表和维度表为特定部门构建独立的数据集市。随着时间的推移,这些集市通过一致性维度连接起来,形成一个统一的视图。这种方法启动更快、更灵活、成本更低,但如果管理不慎,就有出现不一致和数据孤岛的风险。

这两种方法没有绝对的“更好”。自上而下适合需要企业级一致性的大型组织;自下而上则在需要快速见效和迭代交付时表现出色。大多数现实世界中的实现最终都是两者的务实结合。

3. 数据湖:承诺与沼泽

2010年左右,出现了一个承诺能解决我们所有问题的新概念:数据湖。它的推销说辞非常诱人——与结构化的数据仓库不同,数据湖本质上是一个庞大且廉价的存储空间。你不需要计划,只需把所有东西都倒进去:结构化数据、日志文件、PDF、社交媒体信息流,甚至图像和视频。现在把一切都存起来,以后再想怎么用。

这就是“读时模式”的实际应用。而且,与同时提供存储和计算的关系型数据仓库不同,数据湖仅仅是存储——没有绑定的计算引擎。它依赖于对象存储,不需要将数据组织成表格形式。

有一段时间,这种炒作非常真实。但随后现实给了沉重一击。把数据存入湖中很容易,但以有用的方式将其提取出来却极其困难。业务用户被告知:“嘿,所有数据都在湖里!只需打开一个Jupyter Notebook,用点Python来分析就行了。”然而大多数业务用户并没有高级编程技能。清澈的数据湖很快就变成了一个浑浊不堪、无法使用的数据沼泽

不过,数据湖并没有消失。业界意识到最初的愿景是有缺陷的,但核心技术仍然极其有用。如今,数据湖找到了它真正的使命——不是作为数据仓库的替代品,而是作为暂存和准备区:在决定清洗、转换和提升哪些数据以供可靠分析之前,这里是存放原始数据的完美地点。

4. 数据湖仓:两全其美

当你把数据仓库和数据湖结合起来时,会得到什么?数据湖仓(Data Lakehouse)。Databricks在2020年左右首创了这个术语,此后该概念获得了极大的关注。

你可能会问:“等等,你刚才不是说数据湖在试图满足这些需求时惨败了吗?为什么现在又行得通了?”

好问题。经典的数据湖方法只发生了一个变化,但这个变化大到足以改变整个范式:在现有的数据湖存储之上添加了一个事务存储层。这一层(以Delta Lake、Apache Iceberg和Apache Hudi为代表)使数据湖能够像传统的关系型数据库管理系统一样工作,具备ACID事务、模式强制执行和时间旅行(Time travel)功能。

数据湖仓提出了一个引人注目的理念:消除对独立关系型数据仓库的需求,仅利用数据湖来构建整个架构。所有格式的数据(结构化、半结构化和非结构化)都存储在湖中,所有的分析也直接在湖中进行。事务层正是让这一切变得可行的关键要素。

5. 数据网格:去中心化的数据所有权

那么,数据湖仓解决了存储和分析的问题。案子结了,对吧?并非如此。随着公司的发展,即使是一个出色的集中式数据平台也会产生新的瓶颈。

把你的中央数据团队想象成一家极受欢迎的餐厅的厨房。营销、销售、财务和物流部门都下达了复杂的“订单”(数据请求)。厨房员工(你的数据工程师)技术娴熟但忙得不可开交。他们对每道“菜”并没有深入、细致的了解。营销团队要求进行客户细分,厨房必须先问:“你们说的‘活跃客户’是什么意思?”结果呢?排着长队的沮丧“顾客”和精疲力竭的厨房员工。

**数据网格(Data Mesh)**提出了一个激进的问题:如果我们不设一个中央厨房,而是给每个部门自己的专业厨房工作站呢?如果我们让领域专家——那些真正了解自己数据的人——负责为其他人准备高质量的数据产品呢?

数据网格基于四个核心原则:

  1. 面向领域的所有权:最接近数据的人拥有数据。
  2. 数据即产品:像对待任何面向客户的产品一样,用心对待数据。
  3. 自助式数据平台:中央团队提供基础设施,领域团队构建产品。
  4. 联邦计算治理:通过由领域代表组成的委员会来执行全局标准。

需要提醒的是:数据网格不是你买来安装的技术。它是一种社会技术转型,既关乎组织结构和文化,也关乎技术。它并不适合所有公司,尤其是小公司。领域团队需要真正的技术专长和长期承诺,而且数据共享很容易演变成政治问题。

6. 事件驱动架构:“爱八卦的邻居”

现在让我们换个思路。把事件驱动架构想象成对待数据的“爱八卦的邻居”方法——系统会对发生的事情做出即时反应,而不是不断地检查更新。系统B不再每隔五分钟问系统A“嘿,发生什么事了吗?”(就像你不断打开冰箱,指望食物会奇迹般地出现一样),事件驱动系统会在重要事情发生的瞬间拍拍你的肩膀。

客户下了一个订单?这就是一个事件(Event)。创建它的系统是生产者(Producer)。监听并做出反应的系统是消费者(Consumer)。而发布事件的中间媒介是事件代理(Event Broker)——比如Apache Kafka、Azure Event Hubs或Microsoft Fabric中的Eventstream。

这种架构的美妙之处在于松耦合(Loosely coupled)。营销团队可以启动一个监听“客户注册”事件的新服务,而不需要销售团队更改哪怕一行代码。如果欢迎邮件服务崩溃了,新客户依然可以注册——事件只是在代理中堆积,等待服务恢复。

但这种力量也伴随着权衡。你现在有了一个需要管理的新基础设施。调试变得更加困难,因为当出现问题时,跨多个解耦系统追踪单个事件是一项严峻的挑战。而且代理并不总是保证交付顺序:你可能会在收到“订单已支付”事件之前,先收到“订单已发货”的事件。

  • 适用场景:实时分析(物联网、点击流、欺诈检测)、微服务集成和异步工作流。
  • 不适用场景:简单的CRUD应用、需要立即保证响应的紧耦合工作流,以及多步流程必须原子性成功或失败的严格事务系统。

核心要点

没有万能的银弹——每种架构都有其用武之地。

了解何时使用何种架构是任何分析工程师的关键技能。每一天,你都在做关于如何构建数据、在哪里存储数据、如何转换数据以及如何让数据可访问的决定。这些决定在当时看来可能微不足道:我应该把它创建为视图还是表?我应该把这个转换逻辑放在哪里?——但它们累积起来,构成了你整个分析生态系统赖以生存的基础。

数据架构的版图已经从规范化的关系型数据库,经历了“别碰生产系统!”的数据仓库时代,走过了数据湖的壮丽崛起与衰落(以及救赎),进入了为我们提供两全其美的数据湖仓范式。而像数据网格这样的现代方法将所有权推给了最接近数据的人,事件驱动架构则让系统能够即时反应,而不是不断地轮询更新。

相关文档

  • 从单体架构到契约驱动的数据网格;关联理由:延伸思考;说明:本文横向梳理多种数据架构范式,该文纵向展开数据网格与数据契约落地路径,构成同主题的深化阅读。

关联主题