1. 项目背景

我们团队为网易互娱大量游戏产品提供了常规概况、经济分析、留存分析、回流分析、付费分析、服务器分析、渠道分析、定制专题、社交分析、全球分析、问卷分析、全球设备等多种游戏分析专题服务,也支持自定义指标展示的BI看板分析。


目前为止,已累计服务互娱300+款产品,离线数仓 SQL 月执行次数便最高可达近400万次。

2. 项目挑战

随着业务发展,目前离线数仓执行作业数已达到每月三百万+个,各个环节的问题也凸显出来:

  • 日志管理混乱,多产品多程序规范不统一,日志打印随意,解析与维护困难;
  • 产品持续运营,作业与数据累积,作业常需长期执行,数据生命周期不明确;
  • 日志重复存储,原始日志与经格式化解析后的原始表并存两份,成本负担大;
  • 海外市场开拓,海外数据存储成本远高于国内,导致产品数据存储成本飙升。

为此,对项目进行数据成本优化迫在眉睫。

3. 项目实现

我们总体的优化方向分为存储和计算两大部分,基于日志的处理流向分不同阶段进行优化。

对于存储部分,对互娱数仓总体存储进行占比分析,我们发现ODS层数据占据了全项目的75%的存储空间。因此,我们的首要目标便是优化ODS层的数据存储,分为存储前、存储时、存储后三个子目标进行优化。

对于计算部分,由于计算任务众多,我们优先针对耗时较长、逻辑通用性较高的P1指标的计算任务进行优化,分为计算前、计算时两个子目标进行优化。

3.1 存储前:日志格式规范管理

程序日志作为互娱ODS层数据的直接来源,合理的日志格式规范可以直接从源头上降低人力和存储成本。这里我们提出了日志打印的三大原则:

  • 标准

    • 日志打印遵守统一标准格式,保证下游可正常解析,异常日志的存储或特化解析会带来存储空间的浪费、人力维护跟进的投入开销与下游解析作业的性能开销;
  • 按需
    • 仅打印下游业务所需的日志,非必要的日志可不打印或不采集到下游链路中;在满足业务分析的前提下,日志打印可遵守最小原则,最大限度减少下游日志传输量;
  • 精简
    • 对于频繁在多条日志反复打印的字段,可仅在会话中的第一条日志打印完整信息,后续日志通过会话ID进行关联查询;可通过维表查询替换的字段,在日志打印时可进一步压缩字段的大小。

当然,基于人工遵守原则来保证日志规范总会有遗漏的地方,因此互娱数据治理平台的日志上报模块便应运而生。就以日志精简打印为例,用户可在日志上报模块上报和配置日志的映射关系,首先程序按约定打印日志时仅打印日志列名的缩写,其次业务同学按约定的映射字段登记表或字段的英文全名以及业务描述,理论上可以减少10%-20%的日志存储空间。

3.2 存储时:共享数仓方案

互娱旧版原始日志存储架构中多个部门都有各自ETL后的ODS层,形成了多份原始日志重复存储的局面。为此,UX+SDC+GDC等多个部门联合推进了共享数仓的方案,实现一个多部门共享实时ODS层:读取实时流数据,实时ETL后按日志名入库为不同表,分钟级时效,业务部门直接基于共享ODS层进行上层指标计算,实现一份ODS层的最优存储。该方案的推进,也带来了诸多好处:

  • 解决原先原始日志不可「查询」的问题:提供给用户最基础的ODS表查询,而原始日志本身将不再存储;
  • 解决原先文件存储无法细粒度管理问题:调整为表存储模块, 给产品提供项目日志数据管理入口;
  • 优化上层业务线按单日志重跑执行效率:底层日志按表分别存储,上层数据重跑无需扫描全部日志。

3.3 存储后:动态生命周期管理

早期我们对于ODS层数据存储优化的手段便是由业务同学人工配置ODS表生命周期,但该方式存在诸多问题:

  • 错误冲突:人工配置可能会误消亡正在读取的表分区数据,业务A配置的规则不一定符合业务B的要求;
  • 维护麻烦:生命周期额外配置,与业务同学计算指标作业隔离,业务逻辑更新时需兼顾两处;
  • 历史遗留:人工配置容易可能会造成历史遗留问题,出于稳定考虑,业务无法有绝对把握缩短生命周期。

因此,针对上述痛点,互娱数据团队提出了一个自动化方案:基于SQL审计记录,动态消亡长期未读分区数据,再次读取时自动重切数据


2022年6~9月份,某海外大型项目,回收过期数据2229.5T,截止2022年09月27日,项目现存数据仅386.3T,减少了85%的存储空间。

3.4 存储后:数据分级与压缩存储

当数据必须存储时,我们可以通过分级存储与压缩存储来进一步降低存储成本。

通过SQL审计信息发现,按时间从近到远,数据的读取频率也从高到低递减,因此我们提出了分级存储的模式:按数据生产日期从近到远,权衡读写性能,选择存储介质。

  • 第一级:存储在常规Hadoop集群,保证读写性能;
  • 第二级:存储在冷备Hadoop集群,可读写,但性能稍差;
  • 第三级:存储在冷备S3集群,只读不可写,性能最差。


同时,在存储时,我们可以基于数据的读写特性,比如是否要支持追加写等约束,为数据选择合适的压缩格式,这里我们也分为两级进行实现:

  • 第一级:格式压缩,基于不同表,压缩为orc/textfile+snappy格式,压缩率在30~48%左右;
  • 第二级:使用纠删码技术,从3副本减少到1.5副本,压缩率在50%左右。

3.5 计算前:计算效率优化

由于互娱数仓作业任务数众多,因此我们选择优先针对耗时较长、逻辑通用性较高的计算任务进行优化。具体思路是从数据仓库建模角度重新梳理数据链路,减少跨层引用,复用数据中间层降低重复计算和IO等。经过测验,项目里满足条件的作业所需计算资源会降低70%-90%,整体常规运营指标任务所需计算资源能降低30%-50%。

3.6 计算时:任务错峰调度

在早期,由于缺乏有效规范,过往的计算任务分配调度时间相对随意。从项目调度图可以观测到,很多项目下的任务运行时间集中在了忙时阶段,造成计算成本相对较高。而不同的时段的内存、CPU等计算资源成本是不一致,一般可以分为忙时(凌晨2点-8点)和闲时两个阶段,忙时和闲时计算费用单价比为4:1。


因此我们通过对项目任务优先级和预期产出时间进行梳理,使用迁移非关键分析指标至闲时等手段,重新合理分配了任务的调度运行时间,从而降低了总体项目的计算成本。

4. 项目成果

4.1 2021年的计算存储优化效果

2021年9月份对公司部分游戏业务进行存储和计算优化之后,如右图所示,在保障不影响业务运转的前提下,成本方面环比8月各业务都有了较为明显的下降。存储部分最高优化65%,计算部分最高优化71%,总计预估年节约成本约合960万元。

4.2 2022年的计算存储优化效果

2022年6月份起对公司海外项目为主进行存储和计算优化后,优化占最终优化总体各为45%、55%,总计预估年节约成本约合1500万+元。

原文: 网易互娱数据成本优化治理实践

网易互娱数据成本优化治理实践相关推荐

  1. 应用实践 | Apache Doris 在网易互娱的应用实践

    编者荐语: 网易互娱于 2021 年 4 月引入了 Apache Doris 产品,目前已经发展为多个集群,服务数十个业务,在查询速度及易用性方面也得到了业务的认可,将来会有更多的业务正在往 Dori ...

  2. 连接impala出现method not supported_Impala在网易大数据的优化和实践

    文章作者:温正湖 网易杭研 编辑整理:张博 出品平台:DataFunTalk 导读:网易大数据平台的底层数据查询引擎,选用了Impala作为OLAP查询引擎,不但支撑了网易大数据的交互式查询与自助分析 ...

  3. Impala在网易大数据的优化和实践

    导读:网易大数据平台的底层数据查询引擎,选用了Impala作为OLAP查询引擎,不但支撑了网易大数据的交互式查询与自助分析,还为外部客户提供了商业化的产品与服务.今天将为大家分享下Impala在网易大 ...

  4. Impala 在网易大数据的优化和实践

    导读: 网易大数据平台的底层数据查询引擎,选用了 Impala 作为 OLAP 查询引擎,不但支撑了网易大数据的交互式查询与自助分析,还为外部客户提供了商业化的产品与服务.今天将为大家分享下 Impa ...

  5. AI面试锦囊|网易互娱AI Lab人工智能研究工程师两面分享

    ©原创作者 | 三金 写在前面 网易经过近20年的飞速发展,现已经跻身全球七大游戏公司之一,旗下拥有游戏行业领先的人工智能实验室--网易互娱AI Lab.该实验室致力于将AI技术应用在游戏中,现网易游 ...

  6. 网易互娱C++岗一面面经(凉面)

    前言 我报的网易互娱的提前批游戏研发工程师C++岗,这个过程其实挺坎坷的,8月初跟着导师去黑龙江佳木斯开会,中途忽然间接到通知要笔试,从会场逃出来在宾馆做的远程笔试题,做的不是特别好,4道题只做对了一 ...

  7. 网易互娱AI Lab视频动捕技术iCap被CVPR 2022接收!

    点击下方卡片,关注"CVer"公众号 AI/CV重磅干货,第一时间送达 动作捕捉技术在影视和游戏行业已得到广泛的应用,其中最常用的技术方案是光学动作捕捉.光学动捕需要演员穿着紧身动 ...

  8. 橙汁的面试经验汇总(百度、平安壹钱包、诺瓦、快手、bigo、海信、奇安信、小米、迈瑞医疗、顺丰、网易互娱、多益游戏、京东、穆迪)

    百度 二面 1.首先1到2分钟进行一个自我介绍 2.然后介绍一下你最拿手的项目 3.介绍完项目之后,因为涉及到数据库和监控问道如下问题 4.为什么选择zabbix 5.如果你的项目商用,你觉得哪里还可 ...

  9. 【2020校招总结】接受社会的毒打,收获腾讯天美、字节跳动、网易互娱、华为等offer(开发岗)

    文章目录 0.背景介绍 1.时间节点 2.关于暑期实习 3.关于刷题及看书学习 4.关于测评 5.关于笔试 6.关于面试 7.关于岗位选择 0.背景介绍 回忆起下决心转行,已经快一年的时间了,当然,如 ...

最新文章

  1. 【转】如何用Redis做LRU-Cache
  2. 类和对象:给大家介绍对象
  3. 云笔记项目-补充JS面向对象编程基础知识
  4. 【NOIP2016PJ】【Luogu2058】海港
  5. 酷派android是什么系统版本,酷派大神X7的手机系统是什么?能升级安卓5.0吗?
  6. 基于python3的Opencv(一)-打开摄像头显示图像
  7. 指纹支付为什么没有推广?
  8. jquery.validate动态更改校验规则
  9. Zabbix4.2邮件告警python脚本
  10. 一些Arduino 测试代码
  11. PHP 之建行龙支付 - 退款
  12. 冻结表格模板html,Excel冻结单元格(锁定单元格)用选项和快捷键,含冻结一个、多个和有公式的单元格及冻结表格格式不能输入...
  13. Centos7 压缩文件
  14. RHCSA 知识点汇总
  15. 二进制拆弹(20181023-20181026)
  16. 2022-Arch安装(详细)
  17. Fatal error: require(): Failed opening required ‘/home/www/xx/public/../thinkphp/start.php
  18. js 数字转为千分符格式
  19. Shell 遍历数组的方法
  20. response.reset() 与response.resetbuffer使用场景

热门文章

  1. 边缘计算2.0时代,“云边缘”与“边缘云”你分清了吗?
  2. 不让登QQ恶作剧小程序
  3. 动态规划,且学且放弃
  4. 毕业第二年写给百度HR的一封求职信
  5. js游戏键盘延时问题完美解决方案
  6. xbox game bar无法打开/安装怎么办?
  7. tkinter音乐播放器
  8. 国产CPU乘风破浪,飞腾发布多路服务器CPU腾云S2500
  9. 如何强制删除需要卸载密码的软件
  10. 逆势:衰退的开发者信心和不断示好的开发环境