2. AWS数据湖总体架构设计
数据湖不是"把所有数据倒进S3"这么简单。一个能长期演进、可治理、成本可控的企业级数据湖,必须在架构设计阶段就明确四件事:数据在哪一层、以什么格式存、按什么规则分区、由谁在什么边界内访问。本节以AWS Well-Architected框架的六大支柱(卓越运营、安全、可靠性、性能效率、成本优化、可持续性)为设计约束,给出一个可落地的四层数据湖总体架构。
四层分层架构与职责边界
分层的目的不是"多建几个桶",而是让每一层承担单一职责,使数据血缘清晰、重跑成本可控、权限可收敛。推荐的四层如下:
- 原始层(Raw / Landing):数据的"不可变账本"。上游系统(RDS、Kafka、日志、第三方API)通过Kinesis Data Firehose、DMS、Glue或AWS DataSync写入,保持源系统原始格式(CSV、JSON、Parquet、二进制),不做业务清洗。保留期通常最长,用于审计回溯与重放。
- 清洗层(Cleansed / Standardized):完成格式统一、类型转换、去重、空值处理、敏感字段脱敏。输出统一为列式格式,是数据质量校验(Glue Data Quality / DQDL)的主要落点。
- Curated层(主题/汇总层):面向业务主题建模,按维度建模或宽表方式组织,完成跨源关联、指标口径统一、缓慢变化维处理。这一层是BI、报表、特征工程的主要数据来源。
- 消费层(Consumption / Serving):面向具体消费场景做物理优化,例如为Athena/Redshift Spectrum准备的聚合表、为SageMaker准备的特征表、为QuickSight准备的高性能数据集,以及通过API Gateway/Lambda暴露的数据服务。
四层之间是单向依赖:Raw → Cleansed → Curated → Consumption。任何一层都不应反向读取下游数据,否则血缘会形成环,重跑将无法收敛。
存储格式与分区策略
格式选择直接影响查询成本与性能。原始层保留源格式是为了"可重放",但从清洗层开始应统一为列式格式。推荐组合:清洗层与Curated层使用 Parquet + Snappy(兼容性好、压缩率适中),消费层对扫描量敏感的表可改用 Parquet + ZSTD(压缩率更高,Athena扫描字节数更少)。小文件是数据湖性能的头号杀手,建议在写入端控制单文件128~512MB,并通过Glue的groupFiles或定期OPTIMIZE(Iceberg)合并。
分区策略遵循"高基数、常过滤、低膨胀"三原则。以订单主题为例:
s3://dl-curated-prod/subject=orders/dt=2024-06-15/region=cn-north-1/part-00000.parquet
这里用 dt 做日分区、region 做二级分区。注意不要用user_id这类高基数字段做分区,否则会产生海量小分区,反而拖慢Glue Catalog的元数据操作。若单日数据量小于1GB,可只保留dt一级分区,用文件内排序+Parquet谓词下推替代二级分区。
元数据管理与安全边界
元数据统一收敛到 Glue Data Catalog:每个层的每个主题对应一个Database,表结构由Crawler或Glue ETL自动注册。关键实践是给每张表打上业务标签(如data_domain、owner、sensitivity),这些标签是Lake Formation做列级/行级权限控制的依据。
安全边界按"层"划分,而不是按"人"划分。推荐的最小权限模型:
- Raw层:仅采集角色可写,分析师默认无读权限;
- Cleansed层:ETL角色可读写,数据工程师可读;
- Curated层:数据建模角色可写,分析师按域授权读;
- 消费层:按应用授权,通过Lake Formation的
Table与Column级Grant控制。
跨账户共享时,使用Lake Formation的资源链接(Resource Link)而非直接改S3桶策略,这样权限变更可审计、可回收。所有层默认开启SSE-KMS加密,密钥按环境隔离(dev/test/prod各一把CMK)。
成本模型与生命周期
数据湖成本主要由三部分构成:S3存储、请求次数、计算(Glue/Athena/Redshift)。以某电商示例(非实测,仅用于说明量级)估算:原始层每日新增200GB,保留365天,标准存储约73TB;若全部使用S3 Standard,按0.023 USD/GB-月计算,月存储成本约1680 USD。通过生命周期策略可显著降低:
| 层 | 0–30天 | 31–90天 | 91–365天 | 365天以上 |
|---|---|---|---|---|
| Raw | S3 Standard | Standard-IA | Glacier Instant Retrieval | Glacier Deep Archive |
| Cleansed | S3 Standard | Standard-IA | Glacier Instant Retrieval | 删除或归档 |
| Curated | S3 Standard | S3 Standard | Standard-IA | 按合规保留 |
| 消费层 | S3 Standard | 按TTL删除 | — | — |
按上表策略,Raw层约60%的数据在90天后转入低频/归档,月存储成本可降至约900 USD量级。同时应开启S3 Storage Lens与Cost Allocation Tags(按layer、domain打标),把成本归集到具体数据域,避免"数据湖账单无人认领"。