网易互娱出海之旅:大数据平台上云架构设计与实践

news2025/2/24 5:43:08

2020 年初,随着网易互娱的海外业务增长与海外数据合规的需求,我们开始了网易互娱大数据离线计算平台迁移出海的工作。前期,我们采取了云主机裸机加上高性能 EBS 块存储的方案。但是,这个方案存储费用高昂,成本是国内自建机房的数十倍。

于是,我们决定在公有云上构建一个平台,这个平台不仅需要更加适应当前业务场景、与历史业务更为兼容,还要比公有云的 EMR 托管方案更为经济。我们主要从存储、计算和数据分层生命周期管理三方面进行了成本优化,具体的优化方案将在下文为大家详细介绍。

最终,这个项目给下游数据业务和分析部门提供了完整 Hadoop 的兼容性,避免了所有业务逻辑推倒重来;给游戏数据业务出海节省了大量成本,存储成本为优化前的 50%,算力总成本为优化前的 40%,冷数据成本为优化后线上存储成本的 33%。未来随着业务量的增加,成本节约按 10 倍比例节约相应的费用,为出海后的数据化运营等提供有力支持。

01. 大数据平台海外上云方案设计

在 2020 年,我们开始了一项紧急的出海任务。在国内,我们的业务一直以自建集群的方式进行部署和运行。为了在海外能够快速上线,我们紧急上线了一个与国内集群完全相同的解决方案,采用了物理节点构建的一套存算一体的系统。我们选用了裸金属服务器 M5.metal,并使用 EBS gp3 作为存储。

这套方案的缺点是成本非常高昂,但是它的好处是解决了一个非常痛苦的问题,即我们需要兼容所有历史业务,确保所有历史业务能够快速、立即地在海外运行。我们的上下游业务可以无缝迁移到海外,并支持每天接近30万个作业的调度。

但是,成本一直是一个不能忽视的问题。因此,我们需要重新选择方案,以获得性能更优、成本更低的解决方案,并确保兼容性。根据业务需求和大数据场景的特点,我们从以下几个方向评估如何进行方案选择:

  • 以时间/空间换性能;
  • 基于业务场景的实现部署优化;
  • 加入中间件实现兼容性的整合;
  • 充分利用云资源的特性优化成本。

Hadoop 上云

一般 Hadoop 上云有下面两种方案,EMR+EMRFS、Dataproc+GCS。这两种方案就是一个正常出海的姿势。或者使用一些云原生的平台,例如 BigQuery、Snowflake,Redshift 等做数据查询方案,但是我们没有去用这些方案。

为什么没有使用 EMR

因为我们所有的业务都非常依赖 Hadoop,我们目前使用的 Hadoop 版本是根据业务需求定制的内部版本,并实现了各种新版本功能向下兼容,有很多内部的需求和优化在 EMR 的 Hadoop 版本未能覆盖。至于云原生的 BigQuery 等方案对业务来说,是一个改动更大更遥远的方向。

为什么没有直接使用 S3 存储

  1. 由于对数据业务安全的高需求导致我们有复杂的业务权限设计,远超亚马逊 IAM(Identity and Access Management)ROLE 能够实现的上限。

  2. S3 的性能受限,需要分桶和随机目录等优化措施,对业务使用不透明,调整目录 prefix 去适配 S3 分区或使用更多的桶的方案都需要业务调整已有的使用方法,无法适配我们目前的目录设计。另外,作为对象存储实现的文件系统,直接对 S3 的目录进行 list 和 du 等操作在超大文件数据情况下,基本上是不可用的,但是这又恰好是大数据场景下大量使用的操作。

存储选型:HDFS vs 对象存储 vs JuiceFS

我们主要从以下这些维度来评估存储组件。

业务兼容性:对于我们这种拥有大量存量业务需要出海的情况,兼容性是一个非常关键的考虑因素。其次,降本增效不仅仅指降低存储成本,还包括资源成本和人力成本的考虑。兼容性方面,JuiceFS 社区版兼容 Hadoop 生态,但需要在用户端部署 JuiceFS Hadoop SDK。

一致性:在当时,我们对 S3 进行了调研,但在 2020 年第一季度之前,并没有实现强一致性,而目前也并非所有平台都能做到强一致性。

容量管理:对于我们当前自建的集群,有一个重要的问题是需要预留资源。也就是说,我们不可能使用到 100% 的资源,因此按需使用是一个非常节省成本的方向。

性能:基于 HDFS 可以达到我们国内自建的 HDFS 的性能水平。我们国内提供给业务的 SLA 是在单集群下 4 万 QPS 的情况下,能够实现 p90 在 10 毫秒以内的 RPC 性能。但是对于类似 S3 的情况,实现这样的性能非常困难。

权限认证:在自建集群中,使用 Kerberos 和 Ranger 做认证和权限管理。但 S3 当时并不支持。JuiceFS 社区版本同样也不支持。

数据可靠性:HDFS 使用三副本来确保数据可靠性。当时我们测试时 JuiceFS 元数据引擎使用的是 Redis。我们发现,在高可用模式下,如果发生主节点切换,存储会出现卡顿,这对我们来说是很难接受的。所以我们采用在每台机器上独立部署 Redis 元数据服务的方式,细节将在下文展开。

成本:块设备这样的方案成本很高。我们的目标是要使用 S3,如果每个人都只使用 S3,成本当然是最低的。如果使用 JuiceFS,后面的架构会有一定的额外成本,因此我们后面会解释为什么它的成本不是最低的。

02. Hadoop 海外多云迁移方案

存储层存算分离: Hadoop+JuiceFS+S3

JuiceFS 与 Hadoop 的结合可以降低业务的兼容的成本,快速实现已有的业务出海。许多用户在使用 JuiceFS 方案时,是通过 SDK 加上 Hadoop 开源版本来实现的。但这样使用会有一个权限认证的问题,JuiceFS 社区版不支持 Ranger 和 Kerberos 的权限认证。因此,我们还是使用了 Hadoop 的整个框架。维护成本看上去很高,但在国内我们有一套自建的组件在维护着,所以对我们来说差不多没有成本。如下图所示,我们使用 Fuse 将 JuiceFS 挂载到 Hadoop,再使用 S3 存储。

先简单对比我们与基于 EBS 自建单集群的性能。

  • 在 4 万 QPS 的情况下可以达到 p90 10ms;
  • 单节点能够承受 30000 IOPS。

一开始我们上云时采用了 HDD 模式,具体来说就是 st1 存储类型。但很快我们发现,当节点数量较少时,实际的 IOPS 远远不能满足我们的要求。因此,我们决定将所有的st1存储类型全部升级到 gp3。

每块 gp3 默认提供大约 3000 个 IOPS。为了提升性能,我们挂载了 10 块 gp3 存储卷,总共实现了 30000 IOPS 的性能。这个改进让我们的系统可以更好地满足 IOPS 的需求,不再受限于节点数量较少时的性能瓶颈。gp3 的高性能和灵活性使得它成为我们解决 IOPS 问题的理想选择。

每个节点目前的默认带宽是 10Gb。但是不同的机型带宽也有所不同。我们取了一个基准,即 30000 个 IOPS 单节点,带宽为 10Gb。我们的目标是要能够整合我们的 S3 存储,即在高性能的同时也要考虑存储的成本,数据最终会落在 S3 上面。

而最重要的是要兼容 Hadoop 访问,也就是所有的业务其实都不需要做任何修改,可以直接上云解决兼容性问题。对于一些历史业务来说,它可能有一定的业务价值,但是我们要评估业务的改造成本和平台兼容的成本,在我们场景业务中重构所有历史业务的人力成本当前是大于平台兼容成本,而且不可能短时间完成。

我们对 JuiceFS 的挂载方式与官网可能有所不同。我们在每台机器上都部署了本地的 JuiceFS 和 Redis(如下图所示)。这样做是为了最大化 JuiceFS 的性能,并将本地元数据的损耗降到最低。我们曾尝试过使用 Redis 集群和 TiDB 集群,但发现元数据性能差了好几个数量级。因此,我们一开始就决定采用本地的部署方式。

另一个好处是我们的系统与 DNO(Data Node Object)绑定。我们可以控制每个 DNO 的文件数量,即单个节点的文件数量,使其稳定在一个合理的水平范围内。例如,我们一个 DNO 大约有 3 百万到 8 百万个元数据文件的上限,所以元数据单节点大约为 20GB。这样,我们不需要过于关注其膨胀情况,将一个大规模的分布式 Redis 需求转化为单节点元数据可控的 Redis 需求。但稳定性也是一个问题,如果单节点出现稳定性问题,我们就会面临丢失的风险。

为了解决单节点的宕机问题,我们与 DNO 进行了绑定,并利用了 HDFS 多副本机制,在我们集群有两种副本模式,一种是三副本,一种是 EC(Erasure Coding)副本。不同模式下,都通过副本的机制实现数据的高可靠性:在多副本的部署方案下,即使某个节点完全挂掉,我们也可以直接剔除它,而不影响整体运行和数据的可靠性。

在实践中,将单节点部署在本地,同时使用 JuiceFS 和单节点 Redis,是能够获得最佳性能的方式。因为我们需要与 HDFS 和 EBS 方案的性能进行对标。

我们通过基于 HDFS 的分布式水平扩展和 JuiceFS 的缓存与读写策略优化,实现了高性能的 HDFS。优化部分如下:

  1. 使用 JuiceFS 替换 gp3 的目录,以一块小的 gp3 存储作为 JuiceFS 的缓存目录,实现了 IOPS 对齐 gp3 的水平;
  2. 通过优化 JuiceFS 缓存机制,定制的异步删除,异步合并上传,S3 目录 TPS 预置等优化减少落到 S3 的情况,低成本存储的 S3 替换 gp3;
  3. 基于 HDFS 集群的分布式实现节点水平扩展;
  4. 利用 Hadoop 异构存储的特性,根据业务特性拆解 IO,以优化性能和成本。我们将 HDFS 存储拆分为两个部分,“DISK” 和 “SSD”。“SSD” 存储类型对应的是使用 JuiceFS 的 EBS 缓存与 S3 整合的混合存储。“DISK” 存储类型被配置为写入 DN 的 EBS 存储的目录。在那些会频繁覆写的目录,例如 Stage 目录,我们会将这些目录设置成使用 DISK 进行存储。EBS 存储更适合频繁擦写,对比 S3 的少了额外 OP 费用,而且这些目录对存储的总量要求是可控的,因此这个场景我们保留了一小部分 EBS 存储。

计算层:Spot 节点与按需节点混合部署方案

首先,当我们将国内自建的 YARN 集群迁移到云上时,它无法适应云上的资源特性以实现成本优化。因此,我们基于 YARN 的智能动态伸缩方案与标签调度相结合,同时采用 Spot 节点与按需节点混合部署方案,来优化计算资源的使用。

  1. 调整调度器策略为容量调度 (CapacityScheduler);
  2. 划分按需节点分区和 Spot 节点分区;
  3. 调整有状态的节点到按需节点的分区 ,让不同状态的任务跑在不同的区域;
  4. 使用按需节点兜底;
  5. 回收通知与 GracefulStop,当抢占节点在回收之前会提前收到回收的通知,调用与 6. GracefulStop 停止业务,避免与用户作业直接失败;

Spark+RSS,减少当节点回收的时候,数据本来在动态节点上面从而去导致要重算作业的概率。

  1. 基于我们的业务需求去做了一些动态智能伸缩的方案。和原生方案对比,我们更关注的方向是:基于业务的状态去做动态伸缩,因为云厂商不可能知道业务的热点时间。

  2. 基于内部运维工具 Smarttool 的周期性预测,实现智能伸缩。我们取前三周的一个历史数据,去做一次简单的拟合,然后通过 Smarttool 预置的算法得到拟合残差序列 resid,以及预测值 ymean。通过这个工具预测某一天某个时间点它的资源使用应该是什么样子,然后去实现动态伸缩容。

  3. 基于时间规则的定时伸缩,例如针对特定时间做预伸缩:每月 1 号的月报表生成时间、大促等特定的时间做提前的容量预置。

  4. 基于使用率的动态伸缩,使用容量在一定时间内大于阈值上限,或小于阈值的下限,会触发自动扩容和缩容,实现非预期的用量需求兜底。尽量保障我们的业务在云上面是能够得到一个稳定的,但是成本相对比较低的,计算资源的方案。

生命周期管理:数据分层,实现存储成本优化

我们实际上是基于副本机制将 JuiceFS 和 S3 整合的数据可靠性。不论是三副本还是 1.5 副本的 EC,都会有额外的存储支出成本,但是我们考虑到一些数据热度的情况,一旦数据过了一定的生命周期,其对 IO 的需求可能不再那么高。因此,我们引入了一层 Alluxio+S3 的单副本层,来处理这些数据。但是需要注意,如果不改变目录架构,这一层的性能其实比使用 JuiceFS 要差很多。尽管如此,在冷数据的场景下我们仍然可以接受这样的性能。

因此,我们自主开发了一个数据治理和组织分层的服务,通过对数据进行异步处理,实现了对不同生命周期数据的管理和成本优化。我们称这个服务为数据生命周期管理工具 BTS。


BTS 的设计基于我们的文件数据库、元数据以及审计日志数据,通过对表格及其热度的管理,来实现数据生命周期管理。用户可以使用上层的 DAYU Rulemanager 自定义规则以及使用数据的热度来生成规则。这些规则指定哪些数据被视为冷数据,哪些数据被视为热数据。

根据这些规则,我们会对数据执行压缩、合并、转换、归档、或删除等不同的生命周期管理操作,并将它们分发到调度器去执行。数据生命周期管理工具 BTS 提供了以下能力:

  • 数据重组织,将小文件合并为大文件,优化 EC 存储的效率和 namenode 压力;
  • 表存储和压缩方式的转换:异步将表从 Text 存储格式转换为 ORC 或 Parquet 存储格式,并将压缩方式从 None 或 Snappy 转换为 ZSTD,可以提高存储和性能效率。BTS 支持按分区进行异步表转换;
  • 异构数据迁移,将数据异步在不同架构的存储之间迁移,为数据分层提供组织能力。

存储分层架构我们简单地分为三层:

  • 性能最好的是 HDFS on JuiceFS(热),3 副本;
  • 其次是 HDFS on JuiceFS EC 的模式(温热)1.5 副本;
  • 再次是 Alluxio on S3(低频冷数据)1 副本;
  • 在所有数据消亡之前,它们都会被归档到 Alluxio on S3 并变为单副本。

目前,数据生命周期治理效果如下:

  • 60%冷, 30%温热, 10%热;
  • 平均的副本数 (70% * 1 + 20% * 1.5 + 10% * 3) = 1.3 在归档这样对性能要求不高的场景,我们能够实现约 70%的数据。使用 EC 副本时,大约 20% 的数据,而使用三副本时约为 10%的。我们整体上控制了副本的数量,平均副本数维持在约 1.3 个。

03. 出海新架构的上线效果:性能与成本

在测试中,JuiceFS 在大文件的读写方面能够达到相当高的带宽。特别是在多线程模型下,大文件读取的带宽接近客户端的网卡带宽上限。

在小文件场景下,随机写入的 IOPS 性能较好(得益于 gp3 磁盘作为缓存),而随机读的 IOPS 性能相比之下较低,大约差了 5 倍。

EBS 方案与 JuiceFS+S3 方案在业务实测的对比,测试用例为我们生产环境下的业务 SQL, 可以看出 JuiceFS + S3 基本与 EBS 差别不大,部分 SQL 甚至更优。所以 JuiceFS + S3 能够替换掉全量 EBS 。

使用基于JuiceFS 的 S3+EBS 混合分层的存算分离方案替换原来的 EBS 方案,通过数据治理和数据分层,从原来的 Hadoop 三副本的机制下降到平均 1.3 个副本,节省 55% 的多副本成本,整体存储成本下降 72.5%。

通过智能动态伸缩实现了 85% 集群使用率和使用 95% 的 Spot 实例替换了按需节点,总体计算成本对比优化前优化超过 80%

04. 总结与展望:迈向云原生

相比原生的 JuiceFS 方案,Hadoop+JuiceFS 使用额外的副本实现了储性能优化和实现兼容性与高可用的支持。DN 只写一个副本的方案, 依赖 JuiceFS 在可靠性上的迭代优化。

虽然已经在不同云上实现一套多云兼容、对比 EMR 更好的方案,但是对于混合多云和云原生的方案还需要更多的迭代。

对于未来大数据云原生场景的展望,目前我们采取的解决方案并非终极版本,而是一个过渡性方案,旨在解决兼容性和成本问题。未来,我们计划采取以下措施:

  1. 推进业务向更云原生的方案迁移,实现 Hadoop 环境的解耦,并将数据湖和云上计算紧密结合在一体。
  2. 推动更高层次的混合多云计算和混合存储方案,实现真正的整合,而不仅仅是现在的兼容性。这将为上层业务部门带来更多的价值和灵活性。

希望这篇内容能够对你有一些帮助,如果有其他疑问欢迎加入 JuiceFS 社区与大家共同交流。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/863451.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【强化学习】值函数算法DQNs详解【Vanilla DQN Double DQN Dueling DQN】

DQNs【Vanilla DQN & Double DQN & Dueling DQN】 文章目录 DQNs【Vanilla DQN & Double DQN & Dueling DQN】1. DQN及其变种介绍1.1 Vanilla DQN1.2 Double DQN1.3 Dueling DQN 2. Gym环境介绍2.1 Obseravtion Space2.2 Reward Function2.3 Action Space 3. D…

Vue3 :Pinia入门

Vue3 :Pinia入门 Date: May 11, 2023 Sum: Pinia概念、实现counter、getters、异步action、storeToRefs保持响应式解构 什么是Pinia Pinia 是 Vue 的专属状态管理库,可以实现跨组件或页面共享状态,是 vuex 状态管理工具的替代品&#xff0c…

晨控CK-GW06-E01与汇川H5U系列PLC通讯手册

晨控CK-GW06-E01与汇川H5U系列PLC通讯手册 晨控CK-GW06-E01是一款支持标准工业通讯协议 EtherNet IP 的网关控制器,方便用户集成到PLC等控制系统中。本控制器提供了网络 POE 供电和直流电源供电两种方式,确保用户在使用无 POE 供电功能的交换机时可采用外接电源供电…

18 | 淘宝用户行为分析

分析目的 本报告以淘宝app的用户消费行为数据为数据集,通过行业的指标对淘宝用户行为进行分析,从而探索淘宝用户的行为模式,具体指标包括: 日PV和日UV分析,付费率分析,复购行为分析,漏斗流失分析和用户价值RFM分析。为用户运营更好地解析和管理用户(例如对高价值用户的维…

SpringBoot+Vue3打造企业级一体化PaaS系统

目录 一、前言 二、PaaS的概念 三、PaaS中包含什么? 四、使用PaaS的优势 五、SpringBootVue3打造企业级PaaS系统 六、小结 一、前言 云计算的三种模型是PaaS,SaaS(软件即服务)和IaaS(基础架构即服务)。 Iaa…

陪跑多年,Postgres终崛起封王!(译)

Postgres开源数据库刚刚度过了它的25岁生日。遗憾的是,它既没有凭借数百万美元的风险投资脱颖而出,也没有获得技术布道师DevRel团队的支持,只处于起步阶段,但却一直在更新。 几个月之后,Postgres 16正式版可能会闪亮登…

Active Directory安全和风险状况管理

风险评估和管理 风险评估和管理是主动安全性和合规性管理不可或缺的一部分。 发现关键基础设施组件中的风险行为和配置对于阻止网络入侵和预防网络攻击至关重要。帐户泄露和配置错误漏洞是用于破坏网络的常见技术。当评估、监控和降低 Active Directory 基础架构的风险时&…

阿里云SMS开通流程

No1:登录阿里云首页:选择 产品——>企业服务与云通信——>云通信——>短信服务 No2:选择 免费开通 No3:之后根据提示操作即可。 No4:开通之后效果如图: 至此短信服务已经开通。购买短信包之后便可使用

python异步IO完全指南

原地址:https://flyingbyte.cc/post/async_io/ python异步IO完全指南 做为一种并行编程的範式,异步IO在Python中非常受重视,从Python3.4到3.7快速演进。 我们已经有多线程,多进程,并发(concurrency&#x…

cesium学习记录05-加载数据(矢量、影像、地形、3D模型)

1. 矢量数据: 1.1. GeoJSON 定义: 一个基于JSON的地理数据格式,Cesium支持GeoJSON的直接加载。 例子: 加载一个简易故宫建筑的GeoJSON数据。 代码: /*** 添加故宫geojson数据*/AddGuGong() {var viewer this.v…

提取有像素的掩码和原图

有些数据集给的掩码是全黑图片,需要将全黑的掩码剔除,保留有标签的掩码。 DDR-dataset 眼底图像处理 from PIL import Image import cv2 import osdef extract_mask_and_original(mask_path, original_path, output_folder):# 读取黑白掩码图片和同名原…

UDP 的报文结构和注意事项

目录 一. UDP的特点 二. UDP协议 1. UDP协议端格式 2.UDP的报文结构 3. 基于UDP的应用层协议 三. (高频面试题) 一. UDP的特点 无连接:知道对端的IP和端口号就直接进行传输,不需要建立连接。不可靠:即使因为网络故障等原因无法将数据报发送…

重磅!软考或全部改为机考?

最近,有同学分享了一张署名为“工业和信息化部教育与考试中心”的文件截图。 注:该截图来源于网络,而非官方 以下为该截图文件全文: 关于2023年下半年计算机软件资格考试有关工作调整的通知 各省、自治区、直辖市及计划单列市…

医疗PACS源码,支持三维多平面重建、三维容积重建、三维表面重建、三维虚拟内窥镜

C/S架构的PACS系统源码,PACS主要进行病人信息和影像的获取、处理、存储、调阅、检索、管理,并通过网络向全院提供病人检查影像及诊断报告;各影像科室之间共享不同设备的病人检查影像及诊断报告;在诊断工作站上,调阅HIS中病人的其它…

ThreadLocal的内存泄漏是怎么发生的

前言 在分析ThreadLocal导致的内存泄露前,需要普及了解一下内存泄露、强引用与弱引用以及GC回收机制,这样才能更好的分析为什么ThreadLocal会导致内存泄露呢?更重要的是知道该如何避免这样情况发生,增强系统的健壮性。 内存泄露 …

元宇宙核能发电VR模拟仿真实训教学为建设新型电力系统提供重要支撑

随着“碳达峰、碳中和”目标与建设新型能源体系的提出,在元宇宙环境下建设电力系统是未来发展的趋势。以物联网、区块链、数字孪生、混合现实等技术为主要代表的元宇宙技术体系及其在电力和能源系统中的应用,将会促进智能电网的发展,为建设新…

Win10启动Jmeter报错提示jmeter.log拒绝访问问题

jmeter版本:5.4.1 查看版本 在dos命令窗口中进入jmeter安装目录下的bin目录中:执行jmeter - v命令 我启动的方式是:进入jmeter安装目录下的bin目录中双击jmeter.bat启动的。结果报错,但是不影响使用。 报错日志如下: …

ip地址修改器软件哪个好 ip地址切换器有哪些

IP地址修改器是一种常用的网络工具,用于修改计算机或网络设备的IP地址。在网络连接中,IP地址被用于标识每个设备的唯一地址,通过它来实现设备之间的通信和数据传输。然而,有时候我们需要修改IP地址以解决一些网络问题或实现特定的…

网络基础知识:Trunk、Bond、mode4

【背景】 近期项目涉及到硬件服务器的交付,组网涉及到Trunk、Bond、mode4,做一个学习笔记。 【为什么要做mode4 ?】 硬件都有故障率,为了做到硬件冗余高可用,通过软件配置将两个或多个(一般是两个&#xf…

恒运资本:申购新股不买可以吗?

跟着商场改变,现在申购新股已成为许多出资者的热门论题。可是,许多人对于申购新股后不购买的处理方式存在疑惑。在现实中,申购新股后不购买的状况是常常发生的,本文将深入探讨这个论题并从不同的视点进行剖析。 首先,从…