3. 现代数据平台参考架构
当数据平台从“几套离线任务 + 一个数仓”演进为支撑实时、批处理、AI 训练与自助分析的统一底座时,架构设计必须回答五个问题:数据如何分层沉淀、控制与执行如何解耦、元数据与血缘如何贯通、计算与存储如何独立扩展、多租户如何互不干扰。本节给出一份可落地的参考架构蓝图,并说明关键设计决策与参数取舍。
一、分层设计:从原始接入到服务消费
分层不是简单的目录划分,而是数据质量、成本与复用能力的递进。推荐采用五层结构:接入层(Landing)保留原始数据与变更日志,不做业务清洗,便于回溯与重放;明细层(ODS)做去重、字段标准化与分区对齐,通常按天或小时分区;整合层(DWD/DWS)完成维度建模与轻度聚合,形成一致性事实与维度;应用层(ADS)面向报表、指标与特征输出;服务层(Serving)通过 OLAP、向量库或 KV 接口对外提供低延迟查询。
落地时需明确每层的存储格式与更新策略。例如接入层使用 Parquet + 按小时分区,保留 30 天;ODS 采用 Iceberg 或 Hudi 表格式,支持 upsert 与时间旅行;DWD 使用列式存储并按业务域分库;ADS 可物化为宽表或指标视图。分层边界一旦确定,应通过表命名规范(如 ods_order_di、dwd_trade_detail_df)和生命周期策略固化,避免“跨层直读”导致口径混乱。
二、控制面与数据面:职责分离
控制面负责“决定做什么”:任务编排、权限校验、元数据登记、资源配额、血缘采集与审计;数据面负责“实际搬运与计算”:读取对象存储、执行 Spark/Flink 作业、写入结果表。两者通过 API 与事件解耦,控制面不直接持有大数据量,数据面不承担全局调度逻辑。
这种分离带来两个直接收益:其一,控制面可独立升级调度器或权限模型,不影响正在运行的数据作业;其二,数据面可弹性扩缩容,按队列或租户动态申请资源。实践中,控制面通常由元数据服务、调度服务、权限服务与血缘服务组成;数据面则由计算引擎、存储网关与数据集成组件构成。
三、元数据与血缘:让平台“可解释”
元数据是平台的神经系统。技术元数据描述表结构、分区、存储路径与文件格式;业务元数据描述指标口径、负责人、数据等级与标签;运行元数据记录任务实例、耗时、数据量与失败原因。三者统一登记后,才能支撑搜索、发现、影响分析与成本归因。
血缘采集建议分两条路径:解析式血缘从 SQL 或作业配置中静态解析字段映射,覆盖率高、成本低,适合批处理;运行时血缘通过引擎钩子捕获实际读写关系,能覆盖动态 SQL 与 UDF,但需要额外埋点。两者合并后写入图数据库或关系表,支持“从一张 ADS 表反查上游 ODS 字段”的列级追溯。示例:当 ads_sales_daily 的 gmv 字段异常时,血缘图可在秒级定位到 dwd_trade_detail 的 pay_amount 与 ods_order 的 order_status,并提示最近一次 Schema 变更时间。
四、计算存储分离:弹性与成本的关键
计算存储分离的核心是:数据持久化在对象存储或分布式文件系统,计算引擎按需拉起、用完释放。这样做的直接好处是计算资源可独立扩缩容,存储成本按实际用量计费,且多引擎可共享同一份数据。
落地时需关注三个参数:数据本地性——远程读取会带来网络开销,可通过缓存层或本地 SSD 加速;小文件合并——流式写入易产生大量小文件,需定期执行 compaction,例如将 128MB 以下文件合并至 256MB;表格式选择——Iceberg 适合多引擎读写与时间旅行,Hudi 适合近实时 upsert,Delta Lake 在 Spark 生态内集成更顺滑。以某示例场景为例:原始数据 10TB,按天分区,若小文件数量从 50 万降至 5 万,Trino 查询扫描耗时可从 42 秒降至 11 秒(示例数据,实际因集群而异)。
五、多租户与资源隔离:稳定性的底线
多租户不是简单加个 tenant_id,而是要在计算、存储、权限三个维度同时隔离。计算侧通过 YARN 队列或 K8s namespace 划分资源池,设置最小/最大配额与抢占策略;存储侧按租户划分 bucket 或前缀,并配置生命周期与加密密钥;权限侧实施库表级、行级与列级控制,敏感字段默认脱敏。
一个可参考的配额配置如下:
tenant: retail_analytics
queue: root.retail
resources:
min_vcores: 40
max_vcores: 200
min_memory_gb: 160
max_memory_gb: 800
storage:
bucket: s3://datalake-retail/
lifecycle: 90d → IA, 365d → Glacier
access:
row_filter: region in ('east','south')
column_mask: [phone, id_card]
当租户任务超出配额时,调度器应将其排队而非直接失败,并触发告警通知租户管理员。同时,控制面需记录每个租户的资源消耗与成本分摊,为后续容量规划提供依据。
综上,现代数据平台的参考架构可以概括为:分层沉淀数据、控制与数据面解耦、元数据与血缘贯通、计算存储分离、多租户资源隔离。这五项设计相互支撑,共同构成可落地、可扩展、可治理的架构蓝图。