5.3 大数据方法论与实践指南-存储成本优化(省钱)
大数据成本主要是计算和存储成本,存储成本一般占比超 50%。
为了减少存储成本有两个基本思路:
- 减少存储数据量,这个要基于业务场景,血缘关系构建
- 通过数据分层减少存储成本
基于云存储的存算分离方案是生态的发展方向,因此只介绍基于云存储的数仓分级存储实践。
云存储的按需付费、无限扩展和多层级存储特性,使得数据仓库能够动态地将数据放置在最合适的“成本-性能”平衡点上。本实践指南聚焦于如何利用云原生能力实现这一目标。
一、 云存储的核心优势与层级
云对象存储(如 AWS S3, Azure Blob Storage, Google Cloud Storage)是数仓分级存储的基石,其核心优势在于:
- 近乎无限的扩展性:轻松应对 PB 级数据增长。
- 高持久性与可用性:通常提供 11 个 9 (99.999999999%) 的数据持久性。
- 多存储层级 (Storage Classes/Tiers):提供从高性能到低成本归档的多种选项。
- 自动化生命周期管理:通过策略自动迁移和删除数据。
- 与计算引擎深度集成:可被 Redshift Spectrum, Snowflake, BigQuery, Athena, EMR, Databricks, Synapse Serverless 等直接查询。
主流云平台存储层级对比:
| 层级 | AWS S3 | Azure Blob Storage | Google Cloud Storage |
| 热存储 (Hot/Standard) | S3 Standard | Hot | Standard |
| 温存储 (Warm) | S3 Standard-IA | Cool | Nearline |
| 冷存储 (Cold) | S3 Glacier Instant Retrieval<br>S3 Glacier Flexible Retrieval | Archive (with retrieval options) | Coldline |
| 极冷存储 (Deep Cold) | S3 Glacier Deep Archive | Archive (Deep Archive) | - (Coldline is coldest) |
点击图片可查看完整电子表格
关键区别:
|
二、 基于云存储的分级存储架构设计
- 统一数据湖作为基础:
- 将原始数据、清洗后数据、模型数据统一存储在云对象存储(如 S3)中,构建数据湖。
- 优势:打破数据孤岛,实现单一可信源(SSOT),便于实施统一的分级策略。
- 分层与存储层级映射:
- ODS (Operational Data Store):
- 存储:S3 Standard (热)。
- 原因:需要快速接收和处理来自业务系统的原始数据流,访问频繁。
- DWD/DWS (Data Warehouse Detail/Service):
- 策略:采用生命周期策略 (Lifecycle Policy)。
- 示例:fact_order 表
- 0-30 天:S3 Standard (热) -> 满足日常运营分析。
- 30-365 天:S3 Standard-IA (温) -> 满足月度、季度、年度分析。
- 365-1825 天(5 年):S3 Glacier Instant Retrieval (冷) -> 满足审计、合规、历史分析。
|
- ADS (Application Data Service):
- 核心报表数据:根据访问频率,可能保留在 Standard 或 Standard-IA。
- 历史快照/归档报表:可存入 Glacier 系列。
- 维度表 (Dimension Tables):
- 缓慢变化维 (SCD Type 1/2):主版本通常保留在 Standard 或 Standard-IA。
- 历史版本/归档:可应用生命周期策略迁移到更低成本层级。
- 计算与存储分离架构:
- 模式:使用 Snowflake, Redshift (Serverless), BigQuery, Databricks (Serverless SQL/Compute), Athena, Synapse Serverless 等。
- 优势:
- 弹性:计算资源可根据查询负载动态伸缩,按需付费。
- 解耦:存储成本与计算成本分离,优化更灵活。
- 透明访问:计算引擎能透明地查询存储在不同层级(Standard, IA, Glacier)的对象存储数据(尽管查询冷数据慢且贵)。
三、 核心实现技术:自动化生命周期管理
这是基于云存储实现分级存储的最核心、最推荐的实践。
- AWS S3 Lifecycle Policies:
- 功能:为 S3 存储桶或前缀(Prefix)定义规则。
- 操作:
- Transition:在指定天数后,将对象从当前存储类转移到另一个存储类(如 Standard -> Standard-IA)。
- Expiration:在指定天数后,永久删除对象。
- Abort Incomplete Multipart Uploads:清理未完成的上传,节省成本。
- Azure Blob Storage Lifecycle Management:
- 功能与 S3 类似,支持 tierToCool, tierToArchive, delete 等操作。
- Google Cloud Storage Object Lifecycle:
- 支持 SetStorageClass (如转为 NEARLINE, COLDLINE) 和 Delete。
- S3 Intelligent-Tiering(作者理想中的终极默认存储方案):
- 独特优势:无需预设数据访问模式。
- 原理:创建后,S3 监控对象的访问频率。
- 高频访问:留在 Frequent Access 层。
- 低频访问:自动迁移到 Infrequent Access 层。
- 极低频访问:可选迁移到 Archive Instant Retrieval 或 Deep Archive 层。
- 适用场景:访问模式不确定或变化的数据(如用户行为日志、新上线的模型表初期数据)。
四、 最佳实践与关键考量
- 精准定义策略:
- 基于业务需求:与业务方沟通,明确不同数据的保留期限和访问要求(SLA)。
- 基于数据特性:区分事实表(通常有明确时间维度,适合时间策略)和维度表(可能需要更复杂的策略)。
- 避免过度归档:如果某类“历史”数据被意外高频访问,归档策略可能导致性能骤降和高昂的检索费用。初期策略可保守些。
- 成本优化与监控:
- 监控工具:使用云平台的 Cost Explorer (AWS), Cost Management (Azure), Cost Table (GCP) 分析各存储层级的成本。
- 关注检索成本:Glacier / Archive 的检索费用可能远超存储费用。在设计策略时,估算潜在的检索成本。例如,一个 Deep Archive 对象的检索费用可能是其月存储费用的数十倍。
- 批量操作:如果需要大量检索冷数据,考虑使用批量操作以降低成本。
- 性能影响管理:
- 查询延迟:明确告知用户,查询 Glacier / Archive 层级的数据会有显著延迟(分钟到小时级)。
- 计算引擎选择:对于需要频繁访问冷数据的分析任务,考虑将数据临时“解冻”或复制到热存储进行处理,任务完成后按策略再归档。
- 缓存:在应用层或计算引擎层(如 Snowflake 的结果缓存)利用缓存减少对底层存储的重复访问。
- 数据安全与合规:
- 加密:所有层级的数据都应启用静态加密(SSE-S3, SSE-KMS, SSE-C)和传输加密(HTTPS/TLS)。
- 访问控制:通过 IAM Policy, Bucket Policy, ACL 严格控制对不同层级数据的访问权限。
- 合规性:生命周期策略的删除规则必须符合 GDPR、HIPAA、SOX 等法规。对于必须永久保留的归档数据,确保 Expiration 规则不会误删。
- 与数仓平台协同:
- Snowflake:虽然 Snowflake 管理底层存储,但其 Time Travel 和 Fail-safe 机制本质上也是一种自动分层。用户主要通过设置 DATA_RETENTION_TIME_IN_DAYS 来控制。长期归档仍可结合 S3。
- Delta Lake / Iceberg:这些开源表格式存储在云存储上。它们的元数据和数据文件都可以应用云存储的生命周期策略。OPTIMIZE 命令可以帮助整理小文件,提升查询性能。
- 元数据管理:确保数据目录(如 AWS Glue Data Catalog, Azure Purview, Google Data Catalog)能正确反映数据的物理位置和存储状态。
- 自动化与可观测性:
- IaC:使用 Terraform, CloudFormation, ARM Templates 等基础设施即代码工具定义和部署生命周期策略,确保环境一致性。
- 告警:设置告警,监控生命周期规则的执行状态、存储用量突增、异常的检索费用等。
- 渐进式实施与验证:
- 先在非生产环境或小范围数据集上测试生命周期策略。
- 验证数据迁移是否按预期进行(检查对象的存储类)。
- 测试查询不同层级数据的性能和成本。
五、 案例:电商订单数据分级存储
- 目标:降低存储成本 40%,同时满足业务分析和合规要求。
- 架构:
- 数据湖:s3://ecom-dw-lake/
- 计算引擎:Snowflake + Athena (Ad-hoc)
- 策略:
- ODS: s3://ecom-dw-lake/ods/orders/ -> S3 Standard (生命周期:30 天后转入 DWD)。
- DWD: s3://ecom-dw-lake/dwd/fact_orders/
- Lifecycle Rule:
- 0-7 days: Standard
- 8-365 days: Standard-IA
- 366-1825 days: Glacier Instant Retrieval
- 1826-2555 days: Glacier Deep Archive
- >2555 days: Delete
- ADS (核心报表): s3://ecom-dw-lake/ads/sales_summary/ -> Standard-IA (平衡成本和性能)。
- ADS (归档报表): s3://ecom-dw-lake/ads/archive/ -> Glacier Instant Retrieval。
- 结果:
- 近期数据(<1 年)查询性能良好。
- 历史数据(1-5 年)可通过 Athena 查询,延迟可接受(几分钟)。
- 存储成本显著下降,主要得益于将海量历史订单数据迁移到 Glacier 层级。
- 7 年以上的数据合规归档。
总结:
基于云存储的数仓分级存储,其成功关键在于充分利用云服务商提供的自动化生命周期管理功能。通过为不同业务价值和访问模式的数据制定精准的 Transition 和 Expiration 策略,可以实现存储成本的大幅优化。同时,必须清醒认识到冷/极冷存储带来的性能延迟和检索成本,并在架构设计、用户沟通和监控告警中予以充分考虑。结合计算与存储分离的现代数仓架构,这种实践能够构建出一个既经济高效又灵活可靠的现代化数据平台。
单位 DAU 成本
