亚马逊AWS官方博客

沐瞳科技大数据成本优化最佳实践

引言

客户介绍

沐瞳科技(Moonton)是一家全球领先的移动游戏开发与发行公司,成立于 2014 年,总部位于中国上海。公司致力于为全球玩家打造高品质的游戏体验,以满足多样化的需求。

沐瞳科技旗下最知名的产品是在线战术竞技游戏(MOBA)《决胜巅峰》(Mobile Legends: Bang Bang),该游戏在全球范围内,尤其是东南亚和拉丁美洲,拥有庞大的玩家基础和极高的市场占有率。

业务场景

在沐瞳的业务中,大数据系统已经成为企业决策和创新的重要支柱。然而,随着数据量的指数级增长和计算任务的日益复杂,大数据系统的运营成本也在快速攀升。无论是计算资源的闲置浪费,还是存储数据的过度堆积,这些问题都在吞噬企业的 IT 预算。

面对这些挑战,如何在提升资源利用率的同时降低成本,成为大数据架构设计和优化中的核心课题。本篇博客基于实际案例,分享了沐瞳大数据团队通过亚马逊云科技进行大数据系统成本优化的实践经验。从离线计算资源的弹性优化,到 S3 存储的分层管理,我们将逐步揭示如何借助亚马逊云科技原生工具实现计算与存储的双重突破,为沐瞳带来显著的成本节省和更高的运营效率。

项目背景

在本项目中,大数据架构基于亚马逊云科技构建,涵盖了离线计算、实时数据处理和海量数据存储的全链路支持。尽管整体架构成熟,系统的高昂运行成本逐渐成为业务发展的瓶颈:

  • 离线计算的闲置问题:许多离线计算任务具有强周期性特点,例如日常报表生成或定期批处理操作。这些任务对计算资源的需求并不稳定,导致资源闲置率居高不下,从而增加了不必要的成本。
  • 存储成本的持续增长:随着业务数据量的持续积累,S3 存储成本也在不断攀升。未进行分层管理的存储策略,导致高频访问和低频访问的数据共享同样的存储类别,进一步加剧了存储成本的不合理性。
  • 数据监控与管理的复杂性:在海量数据环境中,冗余数据和低频访问数据难以快速识别和清理。缺乏有效的监控手段,导致存储资源的浪费难以避免。

基于以上挑战,我们明确了优化目标:通过离线计算的弹性伸缩提升资源利用率,通过存储分层策略降低 S3 存储成本,并借助自动化工具实现大数据系统的精细化管理。以下内容将详细介绍如何分阶段实施这些优化方案,并最终实现显著的成本节省。

项目阶段讲解

第一阶段:存储优化(30%)

在项目的初始阶段,我们通过分析 S3 Inventory 清单访问日志来识别存储中的冗余数据和无用数据,并进行清理操作。主要目标是:

  • 关键任务
    • 生成每日 S3 清单,详细记录对象的元数据信息。
    • 利用日志分析工具,筛选出低频访问或长期未访问的数据。
    • 删除不再需要的文件,例如过期文件或重复数据。
  • 目标:在第一阶段,目标是优化存储容量,减少 30% 的无效存储数据占用。

通过这一阶段的执行,可以快速释放存储空间,为后续的精细化存储优化奠定基础。

第二阶段:成本优化(20%)

在第一阶段完成存储清理后,第二阶段专注于存储类别的优化。通过对日志数据的进一步分析,识别长期低访问频率的文件,将它们迁移至更适合的存储类别(如 Standard-IA 或 Glacier)。具体行动包括:

  • 关键任务
    • 基于访问频率和存储时长的综合分析,生成存储类别优化策略。
    • 将低访问频率的对象从 Standard 类别迁移至经济型类别,如:
      • Standard-IA(适合不频繁访问但需要快速响应的对象)。
      • Glacier(适合长期存档数据)。
    • 记录并分析迁移后的存储成本节约量。
  • 目标:实现20%的成本优化,降低整体存储费用。

这一阶段不仅优化了资源分配,还显著提升了存储效率。

第三阶段:生命周期管理

第三阶段旨在将优化流程标准化并自动化,实现存储管理的长效性。通过建立数据的生命周期管理机制,使存储优化持续进行,减少手动操作。主要工作包括:

  • 关键任务
    • 结合前两个阶段的数据,建立生命周期规则。例如,根据访问频率自动调整存储类别或删除超期数据。
    • 开发自动化任务,将日志分析结果与存储策略执行系统直接集成。
    • 利用脚本或自动化工具,定期执行清单更新、日志分析和存储优化操作。
  • 目标:实现存储优化的自动化和智能化,持续降低 S3 存储成本。

通过这一阶段,企业将构建起一套完整、可扩展的存储管理体系,为未来的存储需求提供了灵活的解决方案。

第一部分:离线计算的成本优化

背景与问题分析

在业务的大数据系统中,离线计算任务具有明显的周期性,例如报表生成或定期数据清洗任务。这类任务对计算资源的需求在一天内呈现显著的波动(如下图所示),资源利用率在高峰期可能接近饱和,而在低峰期却大量闲置。

这种周期性的特征导致以下问题:

  • 资源浪费:在低谷时段,资源处于闲置状态,增加了不必要的成本。
  • 调度复杂:手动调整资源分配难以精确满足任务需求,增加运维复杂性。

优化目标

通过动态调整资源配置,提升资源利用率,同时降低整体成本。目标是在高峰期满足计算需求,在低谷期减少资源浪费。

解决方案:弹性伸缩机制

我们采用亚马逊云科技提供的弹性伸缩工具(Auto Scaling Group, ASG)结合其他原生服务,构建了一套动态、高效的离线计算优化方案:

(1)弹性伸缩策略

  • 转换常驻资源为弹性资源

通过减少固定计算实例的数量,将一部分计算资源转化为按需扩展的弹性实例。在产生业务需求时,动态启动弹性资源,从而满足高峰期的计算需求。

如下图所示,优化后的资源架构显著减少了常驻实例的数量,同时引入按需扩展的弹性资源池。

  • 按需调度

使用亚马逊云科技 EventBridge 定时触发任务,按任务需求精确启动资源,确保任务在需求时间内高效完成。

(2)自动化任务管理

  • 环境初始化与任务启动

借助亚马逊云科技 Systems Manager 自动化实例环境初始化及任务启动。通过预配置的脚本和参数,计算资源可快速进入工作状态,无需额外手动操作。

(3)技术实现流程

如下图所示,具体技术实现包括以下步骤:

  1. 弹性组定义:使用 Auto Scaling 组定义计算实例的最小和最大数量及扩展规则。
  2. 任务定时触发:通过 EventBridge 设定触发时间和条件。
  3. 任务执行与日志管理:借助 Systems Manager 完成任务调度,并通过 CloudWatch 监控任务执行状态。

成本优化成果

通过上述弹性伸缩策略,我们在离线计算中实现了显著的成本优化效果(如下图所示):

  • 提升利用率:整体资源利用率从之前的低于 50% 提高至接近 80%。
  • 降低计算成本:减少了闲置计算实例的开销,每月节省计算成本高达 30%
  • 调度效率提升:任务调度更加精准,资源启动和释放实现自动化,运维负担大幅降低。

第二部分:S3 存储成本优化

背景与问题分析

在企业大数据系统中,随着数据存储需求的快速增长,存储成本成为不可忽视的问题。从下图(存储分布)中可以看到,存储中的数据主要分为以下三类:

  1. 热数据: 访问频率高,但占比小;它们往往存储在高性能的类别中,导致高昂的存储成本。
  2. 冷备数据: 占比最大,访问频率较低;但缺乏分层策略,存储在高成本层级中浪费资源。
  3. 待删除数据: 历史数据和无用数据占用存储空间,但缺乏有效的清理机制。

如下图(S3 存储现状问题分析)所示,当前存储面临以下核心问题:

  • 无用数据未及时清理: 导致冗余数据持续堆积,占用存储资源。
  • 冷备数据无分层管理: 低访问频率的数据仍存储在高性能存储层。
  • 临时性数据缺乏生命周期策略: 中间表和临时数据长期滞留,推高存储费用。

这些问题直接导致了存储成本的持续攀升,同时降低了整体存储效率。

优化目标

针对上述问题,本次存储优化的目标包括:

  • 分层管理存储数据: 根据数据访问频率划分热数据、冷数据和归档数据,选择最适合的存储类别以实现成本优化。
  • 清理无效存储: 针对待删除数据和冗余数据,建立自动化清理机制,释放存储空间。
  • 提升冷数据管理效率: 为冷备数据设计分层存储方案,降低存储成本。

解决方案

(1)存储类别优化

根据下图(存储类别与成本对比),亚马逊云科技 S3 提供多种存储类别以满足不同的访问需求:

  • S3 Standard适用于高频访问数据,性能高但成本昂贵。
  • S3 Standard-IA适合访问频率低但仍需快速响应的数据,存储成本较低。
  • S3 Glacier 系列:用于长期归档数据,存储成本最低但访问时间较长。

通过合理选择存储类别,可以在性能和成本之间找到最佳平衡点。

(2)分层存储的实施

  • 分析数据访问模式
    • 从数据的访问频率和场景出发,将数据分为:
      • 热数据: 频繁访问,需要高性能。
      • 冷数据: 偶尔访问,延迟容忍度较高。
      • 归档数据: 几乎不访问,仅需长期存储。
  • 数据分层存储策略
    • 热数据: 存储在 S3 Standard 中,确保高性能访问。
    • 冷数据: 根据访问频率存储在 S3 Standard-IAS3 Intelligent-Tiering 中,动态优化存储层次。
    • 归档数据: 使用 S3 Glacier 系列(如 Glacier 或 Deep Archive)存储,极大降低成本。
  • 分层后的优化效果
    • 从下图(数据成本变化曲线)可以看出,不同存储类别在请求量变化下表现不同:
      • 热数据成本稳定,但适合高频访问。
      • 冷数据成本显著下降,但访问成本需控制。
      • 归档数据存储在 Glacier 后,总体存储费用降至最低。

(3)无效数据清理

  • 识别冗余数据:
    • 针对待删除数据,通过日志分析和生命周期策略,筛选出无用文件和中间数据。
  • 批量删除:
    1. 使用批处理机制针对识别出的冗余文件进行批量清理,释放存储空间。

成本优化成果

通过分层存储和冗余清理的实施,取得了以下成果:

  • 显著降低存储成本:
    • 热数据存储在高性能层,冷数据和归档数据有效转移至低成本存储类别,总体存储费用减少 30%-50%
  • 性能与成本的平衡:
    • 热数据的访问性能得到保障,同时大幅压缩冷备数据的存储开销。
  • 形成长期优化机制:
    • 通过生命周期策略实现分层迁移和自动归档,确保存储成本的持续优化。

在这样一套方案中,能够准确地识别数据的冷热对于精确地降低风险是至关重要的,有什么自动化的方案可以搭配实现这一点呢?

第三部分:S3 存储监控与分析的智能化实践

背景与需求

在大数据存储成本优化的过程中,了解和掌控数据的存储增长、访问模式和冷热分层是必不可少的一步。企业在实践中面临以下问题:

  • 存储数据的快速增长:每天新增数据量是多少?数据的增长趋势如何?
  • 冷数据和热数据的有效识别:如何准确识别冷数据和热数据,并制定针对性的存储策略?
  • 存储类别和生命周期管理的优化:数据的存储模式如何影响整体存储成本?如何实现数据从热存储到冷存储的自动化转移?

为了解决这些问题,我们提出了基于 S3 Inventory访问日志分析Class Analysis 智能分析工具 的一整套存储监控与优化方案。

核心解决方案

S3 Inventory 清单分析

S3 Inventory 提供了每日生成的存储对象元数据清单(如文件大小、存储类别、最后修改时间等),用于全面了解存储情况。

  • 功能描述
    • 定期生成 Bucket 内所有对象的元数据清单,并以 CSV 或 Parquet 格式存储。
    • 支持对清单数据的 SQL 查询与分析,快速了解每个存储类别的对象数量和大小。
  • 实现步骤
    • 开启 S3 Inventory 功能(注意可能需要 24~48 小时生成首份清单)。
    • 将生成的清单文件导入分析系统,如 Athena,并创建 Hive 表(如图所示):
      •	CREATE EXTERNAL TABLE inventory_list (
      •	    bucket string,
      •	    key string,
      •	    size bigint,
      •	    last_modified_date string,
      •	    storage_class string
      •	)
      •	PARTITIONED BY (dt string)
      •	ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
      •	STORED AS INPUTFORMAT 'org.apache.hadoop.hive.ql.io.SymlinkTextInputFormat'
      •	OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.IgnoreKeyTextOutputFormat'
      LOCATION 's3://inventory/testinventory/data/hive';
      
      PowerShell
    • 使用 SQL 查询进行存储数据的分析,例如统计不同存储类别的对象数量和大小:
      SELECT count(*), sum(size)/1073741824 as GB
      FROM inventory_list
      WHERE storage_class = 'STANDARD' AND dt = 'YYYY-MM-DD-00-00';
      
      PowerShell

访问日志分析

S3 的访问日志(Access Log)记录了存储桶中每个对象的访问请求,可以帮助识别热点数据和访问模式。

  • 功能描述
    • 启用 S3 Access Log,将访问日志存储在指定的 S3 Bucket 中。
    • 日志包含详细的请求信息,包括访问时间、请求类型、对象名称等。
  • 实现步骤
    • 配置访问日志存储桶,启用访问日志记录。
    • 将日志文件导入分析工具(如 Athena),并创建外部表进行分析:
      •	CREATE EXTERNAL TABLE s3_access_logs_db.mybucket_logs (
      •	    bucket string,
      •	    time string,
      •	    operation string,
      •	    key string,
      •	    request string
      •	)
      LOCATION 's3://bucket-name/prefix-name/account-id/region/source-bucket-name/';
      
      PowerShell
    • 分析最近一段时间内的访问情况,例如统计每小时的访问量趋势:
      SELECT hour(time) as access_hour, count(*) as request_count
      FROM mybucket_logs
      GROUP BY hour(time)
      ORDER BY access_hour;
      
      PowerShell

通过以上分析可以识别出哪些对象是高频访问的热点数据,为后续存储优化提供依据。

Class Analysis 智能分析工具

在存储数据分析的基础上,Class Analysis 提供了一个自动化工具,可以长期跟踪数据的访问模式并给出存储类别优化建议。

  • 功能描述
    • 通过持续分析对象的访问情况,判断文件是否应该转移到更合适的存储类别(如从 Standard 转移到 Glacier)。
    • 支持冷热数据的自动分类和决策。
  • 实现步骤
    • 部署 Class Analysis 工具,并与访问日志和 Inventory 数据联动。
    • 分析对象的访问频率、数据年龄等关键指标,生成分类报告:
      • 示例报告
        StorageClass    ObjectAge   GetRequestCount   RecommendedClass
        STANDARD        180 days    10               GLACIER
        
        PowerShell
    • 根据报告建议,将符合条件的数据迁移到推荐的存储类别,实现存储成本的进一步优化。

第四部分:整体自动化方案

架构概述

基于如上内容,沐瞳的大数据团队与亚马逊云科技团队共同设计实现了如下技术优化方案。

架构流程图中的各模块相互配合,形成了数据的采集、分析、优化到执行的完整闭环。以下是具体模块与流程的详解:

数据采集层

模块:

  • 操作桶:存储生产环境中正在被频繁访问和操作的数据。
  • 冷备存储桶:存储已分类为低访问频率的数据,用于进一步分析和优化。

流程:

  1. 从操作桶中提取数据元信息,生成 S3 Inventory 清单文件,记录每个文件的关键属性(如存储类别、大小、上次修改时间等)。
  2. 同步启用 S3 访问日志功能,采集对象的访问情况(包括访问频次、操作类型等)。

数据分析层

模块:

  • 日志分析:基于 S3 访问日志,统计每个对象的访问频率、类型和时间,判断数据的冷热点。
  • 清单分析:通过清单数据计算各类文件的总存储量,并根据属性筛选出无用数据和适合降级存储的数据。

流程:

  1. 通过对清单和日志数据的分析,生成两类操作文件:
    1. 清理文件:标记为无用或超期的数据,建议删除。
    2. 优化文件:存储类别需要调整的冷数据,建议迁移到更便宜的存储类别(如 Standard-IA 或 Glacier)。
  2. 生成的分析报告用于后续的批处理操作,驱动存储优化的执行。

批处理执行层

模块:

  • 批处理操作桶:用于存储清理和优化操作文件。
  • 执行模块:依赖 亚马逊云科技 Batch 或其他自动化工具完成批量操作。

流程:

  1. 批处理系统根据清理文件批量删除标记为 key=delete 的数据对象。
  2. 对优化文件执行存储类别迁移,具体迁移路径如下:
    1. 将访问频率较低的对象从 Standard 迁移到 Standard-IAOne Zone-IA
    2. 将长期存档数据迁移到 GlacierGlacier Deep Archive

存储优化结果管理

模块:

  • 报告生成模块:实时记录存储优化操作的结果,包括清理数量、存储类别迁移情况及存储成本的节省量。

流程:

  1. 每个优化周期结束后,自动生成操作报告,提供给管理层参考。
  2. 通过周期性分析,进一步优化生命周期策略,形成存储的长期自动化管理能力。

架构价值总结

  • 全生命周期管理: 从数据采集到存储类别优化,实现了数据存储的全生命周期智能化管理。
  • 成本优化显著: 基于数据实际访问情况优化存储类别,节省存储成本并提高资源利用率。
  • 高效批处理能力: 自动化的批处理流程大幅降低人工干预,优化了管理效率。
  • 灵活可扩展: 架构支持接入更多数据分析模块,可适应不同的业务场景和存储需求。

通过本架构设计,企业可以大幅减少存储成本,同时实现存储管理的自动化和可视化,为未来业务的扩展奠定了坚实的基础。

本篇作者

马浩

沐瞳大数据运维负责人

李开元

亚马逊云科技解决方案架构师,十年云计算从业经验,主要支持客户的游戏解决方案与人工智能解决方案。