2、数据湖架构设计原则:分层架构思想(Bronze/Silver/Gold)、存储与计算分离原则、开放格式与厂商锁定规避、元数据驱动设计

好,咱们直接进入正题。数据湖架构设计,说白了就是一套「怎么把数据管好、用好」的方法论。我见过太多团队,一上来就搞技术选型,结果数据湖变成了「数据沼泽」。今天聊的这几个原则,是我在多个企业级项目中反复验证过的。你想想看,没有规矩不成方圆,架构设计也一样。

2.1 分层架构思想:Bronze / Silver / Gold

这个分层模型,现在几乎是数据湖的事实标准。我最早接触是在 Databricks 的 Delta Lake 体系里,后来发现它确实好用。

Bronze 层(原始数据层)

这一层存的是「原汁原味」的数据。从业务系统、日志、IoT 设备等源头直接拉过来,不做任何清洗。格式保持原样,JSON、CSV、Avro 都行。为什么?因为一旦做了转换,原始信息就丢了。我在项目中遇到过,业务方突然要查半年前的某个字段,幸好 Bronze 层保留了原始记录,否则根本没法回溯。

Silver 层(清洗与标准化层)

到了这一层,数据开始「像样」了。去重、类型转换、字段标准化、简单的质量校验。说白了,就是把脏数据洗干净。Silver 层的数据通常用于日常的报表和轻度分析。嗯,这里要注意:不要在这一层做太复杂的业务逻辑,否则后面改起来很痛苦。

Gold 层(业务聚合层)

这一层是给业务用户直接用的。数据经过聚合、宽表化、指标预计算。比如销售日报、用户画像标签。我建议 Gold 层的数据尽量用列式存储(Parquet),查询性能好很多。

核心要点: 分层不是物理隔离,而是逻辑分层。Bronze 层可以放在廉价的对象存储上,Gold 层可以放在性能更好的存储上。但元数据要统一管理。

2.2 存储与计算分离原则

这个原则,我愿称之为「数据湖的基石」。传统 Hadoop 时代,存储和计算绑在一起,扩容要一起扩,浪费资源不说,还容易出故障。

存储与计算分离,说白了就是:数据放在一个地方,计算引擎在另一个地方跑。比如数据存在 S3 或 OSS 上,Spark、Presto、Flink 各自去读。好处很明显:

  • 弹性伸缩:计算资源可以按需启停,存储成本相对固定
  • 引擎解耦:今天用 Spark,明天换 Trino,数据不用动
  • 成本优化:冷数据放低频存储,热数据放高频存储

我曾经帮一家金融客户做架构改造,他们之前用的是 HDFS + MapReduce,每次扩容都要等两周。改成存算分离后,计算集群可以在 10 分钟内扩缩容。你想想看,这效率差距有多大?

避坑指南: 存算分离后,网络带宽会成为瓶颈。我建议在同一个可用区内部署计算和存储,避免跨 AZ 的网络开销。另外,数据本地性(Data Locality)不再是优势,但可以通过缓存层(如 Alluxio)来弥补。

2.3 开放格式与厂商锁定规避

这一点,我吃过亏。早期做数据湖时,用了某个厂商的专有格式,后来想迁移,发现数据导不出来,或者导出后格式不兼容。那叫一个难受。

所以我现在坚持:数据格式必须开放。推荐使用 Parquet、ORC、Avro 这些开源列式存储格式。它们有社区支持,主流引擎都支持读写。

另外,表格式也很重要。Delta Lake、Apache Iceberg、Apache Hudi 都是不错的选择。它们提供了 ACID 事务、时间旅行、Schema 演化等能力。我个人的习惯是:优先选 Iceberg,因为它对 Spark、Flink、Trino 的支持最全面,而且社区活跃。

特性 Delta Lake Apache Iceberg Apache Hudi
开放程度 中等(Databricks 主导) 高(Apache 基金会) 高(Apache 基金会)
ACID 支持
时间旅行
引擎兼容性 Spark 为主 Spark、Flink、Trino Spark、Flink
警告: 不要被厂商的「免费」诱惑。一旦数据被锁定在某个专有格式里,后续的迁移成本会让你欲哭无泪。我见过一个案例,某公司用了某云厂商的专有表格式,后来想迁移到另一个云,花了整整三个月做数据转换。

2.4 元数据驱动设计

数据湖里数据多了,最怕什么?怕找不到数据,怕不知道数据是什么含义。元数据管理就是解决这个问题的。

元数据驱动,说白了就是:让数据自己描述自己。包括技术元数据(字段类型、分区信息)、业务元数据(字段含义、数据来源)、操作元数据(数据血缘、更新时间)。

我建议搭建一个统一的元数据平台,比如 Apache Atlas 或 Amundsen。它能帮你做到:

  • 自动发现:新数据入湖后,自动注册到元数据平台
  • 数据血缘:从 Bronze 到 Gold,数据怎么流转的,一目了然
  • 数据质量:每个字段的完整性、准确性,都能监控

举个例子。我在项目中遇到过,业务方问「这个销售额字段是怎么算的?」。如果没有元数据,你得去翻代码、问开发。有了元数据平台,直接查字段的血缘图,从原始日志到聚合指标,每一步都清清楚楚。

核心要点: 元数据是数据湖的「大脑」。没有元数据,数据湖就是一堆文件的集合。我建议在数据湖建设初期,就把元数据管理纳入规划,不要等数据多了再补。

好了,这一章的内容就这些。分层架构让你知道数据怎么放,存算分离让你知道资源怎么配,开放格式让你不被绑定,元数据驱动让你知道数据是什么。这四个原则,是数据湖架构的「四梁八柱」。下一章,我们聊聊具体的技术选型。