Netflix: UDA(Unified Data Architecture)介绍
原文:https://netflixtechblog.com/uda-unified-data-architecture-6a6aee261d8d
下面是 Netflix 的 UDA(Unified Data Architecture)从定义到实际投影与使用的完整流程,提炼为一条贯通的“语义驱动架构链路”,适合技术分析、框架学习或团队实践参考:
🧠 1. 定义领域模型(Domain Model)— 用 Upper 建模语义概念
- 使用 Netflix 自研的建模语言 Upper,定义业务概念(如 Actor、Movie、Genre 等),构建实体类型、属性、关系。
- Upper 本身是一个“模型的模型”(metamodel):
- 可自描述(self-describing)
- 可自验证(self-validating)
- 可自引用(self-referencing)
📌 例如,在 One Piece 的建模中,Character
与 DevilFruit
是两个概念实体,之间通过关系 hasDevilFruit
建立连接,每个果实还有一个 type
属性。
🧭 2. 建模数据容器(Container Representations)— 表示系统结构
- 将实际系统中的数据容器(如 GraphQL schema、Avro schema、Iceberg 表等)表示为图结构,称为“System Domain Models”。
- 每个容器结构都被 Upper 表达为概念节点:
- GraphQL 的类型和字段
- Avro 的 record 和字段名
- Iceberg 的表名与列
这让容器与语义层具备同构对照能力。
🔗 3. 构建映射关系(Mappings)— 连接概念与数据物理位置
- Mappings 是 UDA 的关键:它把领域模型中的属性映射到数据容器中的字段/列。
- 每一个 Mapping 是一组图之间的边(edges),连接语义与物理结构。
📌 示例:
- Domain:
Actor.name
- GraphQL:
Person.fullName
- Avro:
actor_name
- Iceberg:
table:actors → column:name
借助这些映射,UDA 实现数据的:
- 自动定位(discovery)
- 跨容器关联(join strategy)
- 显式语义一致性(同一概念 → 不同实现)
🛠️ 4. 投影生成(Projections)— 生成可用 schema 与数据资产
从 Upper 定义的领域模型自动生成:
🔹 GraphQL Schema
- 支持 GraphQL Federation
- 自动生成类型、字段、关系
- 推送到 Netflix Enterprise GraphQL Gateway
🔹 Avro Schema
- 用于定义 Data Mesh 数据源
- 支撑流式数据管道与变更捕获(CDC)
🔹 Iceberg 表 + 数据流
- 自动生成并驱动数据写入
- 通过 Data Mesh 管道将事件流导入对应 Iceberg 表
📌 所有这些数据容器都共享同一语义源头,数据契约统一,系统之间无需手动协商。
📦 5. 应用系统使用(PDM / Sphere)
✅ PDM(Primary Data Management)
- 管理标准术语表与层级分类法(如角色阵营、内容评级)
- 自动生成 UI + GraphQL API + 数据写入管道
- 业务用户只使用领域词汇,底层结构通过 UDA 自动匹配
✅ Sphere(运营自助查询系统)
- 用户搜索“actor”、“movie”这类概念 → UDA 解析出 domain model 中概念 → 映射找到 Iceberg 表字段
- 系统自动生成 SQL 查询(跨系统多表 join),无需写 SQL、无需知道字段名
✅ 总结:UDA = 统一语义 → 显式映射 → 自动生成 → 语义一致运行时
你只需建模一次,就能自动生成多种 schema、写入管道、查询接口和前台服务,彻底告别“对齐字段”的时代。
如果你想,我可以手写一个虚拟案例,从定义 Upper 模型开始,到生成 GraphQL、Avro 与查询路径的全过程,适合作为你团队内部试验性构建流程的基础 💡 是否需要我构造一个“Demo Domain(如 Podcast 系统)”来演练一遍?📐