Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >OPPO数据湖统一存储技术实践

OPPO数据湖统一存储技术实践

作者头像
从大数据到人工智能
发布于 2022-04-23 05:38:42
发布于 2022-04-23 05:38:42
6800
举报
文章被收录于专栏:大数据-BigData大数据-BigData

导读

OPPO是一家智能终端制造公司,有着数亿的终端用户,每天产生了大量文本、图片、音视频等非结构化数据。在保障数据连通性、实时性以及数据安全治理要求的前提下,如何低成本、高效率地充分挖掘数据价值,成为了拥有海量数据的公司的一大难题。目前业界的流行解决方案是数据湖,本文介绍的OPPO自研的数据湖存储CBFS在很大程度上可解决目前的痛点。

数据湖简述

数据湖定义:一种集中化的存储仓库,它将数据按其原始的数据格式存储,通常是二进制blob或者文件。一个数据湖通常是一个单一的数据集,包括原始数据以及转化后的数据(报表,可视化,高级分析和机器学习等)

数据湖存储的价值

对比传统的Hadoop架构,数据湖有以下几个优点:

  • 高度灵活:数据的读取、写入和加工都很方便,可保存所有的原始数据
  • 多重分析:支持包括批、流计算,交互式查询,机器学习等多种负载
  • 低成本:存储计算资源独立扩展;采用对象存储,冷热分离,成本更低
  • 易管理:完善的用户管理鉴权,合规和审计,数据“存管用”全程可追溯

OPPO数据湖整体解决方案

OPPO主要从三个维度建设数据湖:最底层的湖存储,我们采用的是CBFS,它是一种同时支持S3、HDFS、POSIX文件3种接入协议的低成本存储;中间一层是实时数据存储格式,我们采用了iceberg;最上层可支持各种不同的计算引擎

OPPO数据湖架构特点

早期大数据存储特点是流计算和批计算的存储放在不同的系统中,升级后的架构统一了的元数据管理,批、流计算一体化;同时提供统一的交互查询,接口更友好,秒级响应,并发度高,同时支持数据源Upsert变更操作;底层采用大规模低成本的对象存储作为统一的数据底座,支持多引擎数据共享,提升数据复用能力

数据湖存储CBFS架构

我们的目标是建设可支持EB级数据的数据湖存储,解决数据分析在成本,性能和体验的挑战,整个数据湖存储分成六个子系统:

  • 协议接入层:支持多种不同的协议(S3、HDFS、Posix文件),可做到数据用其中一种协议写入,用另外两种协议也可直接读到
  • 元数据层:对外呈现文件系统的层次命名空间和对象的扁平命名空间,整个元数据是分布式的,支持分片,线性可扩展
  • 数据缓存层:用来管理元数据缓存,提供元数据访问加速能力
  • 资源管理层: 图中的Master节点,负责了物理资源(数据节点,元数据节点)以及逻辑资源(卷/桶,数据分片,元数据分片)的管理
  • 多副本层:支持追加写和随机写,对大对象和小对象都比较友好。该子系统一个作用是作为持久化的多副本存储;另一个作用是数据缓存层,支持弹性副本,加速数据湖访问,后续再展开。
  • 纠删码存储层:能显著降低存储成本,同时支持多可用区部署,支持不同的纠删码模型,轻松支持EB级存储规模

接下来,会重点分享下CBFS用到的关键技术,包括高性能的元数据管理、纠删码存储、以及湖加速

CBFS关键技术

元数据管理

文件系统提供的是层次命名空间视图,整个文件系统的逻辑目录树分成多层,如右图所示,每个元数据节点(MetaNode)包含成百上千的元数据分片(MetaPartition),每个分片由InodeTree(BTree)和DentryTree(BTree)组成,每个dentry代表一个目录项,dentry由parentId和name组成。在DentryTree中,以PartentId和name组成索引,进行存储和检索;在InodeTree中,则以inode id进行索引。使用multiRaft协议保障高可用性和数据一致性复制, 且每个节点集合会包含大量的分片组,每个分片组对应一个raft group;每个分片组隶属于某个volume;每个分片组都是某个volume的一段元数据范围(一段inode id ); 元数据子系统通过分裂来完成动态扩容;当一分片组资源(性能、容量)紧接临近值时,资源管理器服务会预估一个结束点,并通知此组节点设备,只服务到此点之前的数据,同时也会新选出一组节点,并动态加入到当前业务系统中。 单个目录支持百万级别容量,元数据全内存化,保证优秀的读写性能,内存元数据分片通过snapshot方式持久化到磁盘以作备份及恢复使用。

而对象存储提供的是扁平命名空间;以访问objectkey为/bucket/a/b/c的对象为例,从根目录开始,通过”/”分隔符层层解析,找到最后一层目录(/bucket/a/b)的Dentry,最后找到的/bucket/a/b/c对于的Inode,此过程涉及多次节点间交互,层次越深,性能较差;因此我们引入PathCache模块用于加速ObjectKey解析,简单做法是在PathCache中对ObjectKey的父目录(/bucket/a/b)的Dentry做缓存;分析线上集群我们发现,目录平均大小约为100,假设存储集群规模在千亿级别,目录条目也才10亿个,单机缓存效率很高,同时可通过多个节点不同来提升读性能;在同时支持”扁平”和”层次”命名空间管理的设计,与业界其他系统相比,CBFS实现得更简洁,更高效,无需任何转换即可轻松实现一份数据,多种协议访问互通,且不存在数据一致性问题。

纠删码存储

降低存储成本的关键技术之一是纠删码(Erasure Code, 简称EC),简单介绍一下纠删码原理:将k份原始数据,通过编码计算得到新的m份数据,当k+m份数据丢失任意的不多于m份时,通过解码可还原出原始数据(原理有点像磁盘raid); 相比传统的多副本存储, EC的数据冗余度更低,但数据耐久性(durability)更高;其实现也有多种不同方式,多数基于异或运算或者Reed-Solomon(RS)编码,我们的CBFS也采用了RS编码

计算步骤:

  1. 编码矩阵,上面n行是单位阵I,下方m行是编码矩阵;k+m个数据块组成的向量,包含原始的数据块和m个校验块
  2. 当某块丢失时:从矩阵B删除该块对应的行,得到新的矩阵 B’,然后左边乘上B‘的逆矩阵,即可恢复丢失的块,详细计算过程大家可线下阅读相关资料

普通的RS编码存在一些问题:以上图为例,假设X1~X6 ,Y1~Y6为数据块,P1和P2为校验块,若其中任意一块丢失,需要读其余12个块才能修复数据,磁盘IO损耗大,数据修复所需带宽高,在多AZ部署时,问题尤为明显; 微软提出的LRC编码,通过引入局部校验块来解决该问题,如图所示,在原来全局校验块P1和P2的基础上,新增2个局部校验块PX和PY,假设X1损坏,只需读取与其关联X1~X6共6个块即可修复数据。统计表明,在数据中心,一个条带在一定时间内单块盘故障的概率是98%,2个盘同时损坏的概率是1%,因此LRC在大多数场景可大幅提升数据修复效率,但缺点是其非最大距离可分编码,无法做到像全局RS编码那样损失任意m份数据能把所有的丢修复回来。

EC类型
  1. 离线EC:整个条带k个数据单元都写满后,整体计算生成m校验块
  2. 在线EC:收到数据后同步拆分并实时计算校验块后,同时写入k个数据块和m个校验块
CBFS跨AZ多模式在线EC

CBFS支持了跨AZ多模式条带的在线EC存储,针对不同的机房条件(1/2/3AZ)、不同大小的对象、不同的服务可用性和数据耐久性需求,系统可灵活配置不同的编码模式 以图中“1AZ-RS”模式为例,6个数据块加3个校验块单AZ部署; 2AZ-RS模式,采用了6个数据块加10个校验块2AZ部署,数据冗余度为16/6=2.67;3AZ-LRC模式,采用6个数据块,6个全局校验块加3个局部校验块模式;同一个集群内同时支持不同的编码模式。

在线EC存储架构

包含几个模块 Access: 数据访问接入层,同时提供EC编解码能力 CM:集群管理层,管理节点,磁盘,卷等资源,同时负责迁移,修复,均衡,巡检任务,同一个集群支持不同EC编码模式并存 Allocator:负责卷空间分配 EC-Node:单机存储引擎,负责数据的实际存储

纠删码写

1、流式收取数据 2、对数据切片生成多个数据块,同时计算校验块 3、申请存储卷 4、并发向各个存储节点分发数据块或校验块 数据写入采用简单的NRW协议,保证最小写入份数即可,这样在常态化的节点及网络故障时,请求也不会阻塞,保障可用性;数据的接收、切分、校验块编码采取异步流水线方式,也保障高吞吐和低时延。

纠删码读

数据读取也采取了NRW模型,以k=m=2编码模式举例,只要正确读到2个块(不论是数据块还是校验块), 即可快速RS解码计算得到原始数据并;此外为提升可用性和降低时延,Access会优先读临近或低负载的存储节点EC-Node 可以看到,在线EC结合NRW协议为确保了数据的强一致性,同时提供保障高吞吐和低时延,很适合大数据业务模型。

数据湖访问加速

数据湖架构带来显著的收益之一是成本节约,但存算分离架构也会遇到带宽瓶颈和性能挑战,因此我们也提供了一系列访问加速技术: 首先是多级缓存能力:

  1. 第一级缓存:本地缓存,其与计算节点同机部署,支持元数据和数据缓存,支持内存、PMem、NVme、HDD不同类型介质,特点是访问时延低,但容量少
  2. 第二级缓存:分布式缓存,副本数目弹性可变,提供位置感知能力,支持用户/桶/对象级的主动预热和被动缓存,数据淘汰策略也可配置

多级缓存策略在我们的机器学习训练场景有不错的加速效果

另外存储数据层还支持了谓语下推操作,可显著减少存储与计算节点间大量的数据流动,降低资源开销并提升计算性能;

数据湖加速有还很多细致的工作,我们也在持续完善的过程中

未来展望

目前CBFS-2.x版本已开源,支持在线EC、湖加速、多协议接入等关键特性的3.0版本预计将于2021年10月开源; 后续CBFS会增加存量HDFS集群直接挂载(免数据搬迁),冷热数据智能分层等特性,以便支持大数据及AI原架构下存量数据平滑入湖。

作者简介: Xiaochun OPPO存储架构师

本文转载自Xiaochun,原文链接:https://blog.csdn.net/weixin_59152315/article/details/119750978。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
详解HDFS3.x新特性-纠删码
EC(纠删码)是一种编码技术,在HDFS之前,这种编码技术在廉价磁盘冗余阵列(RAID)中应用最广泛(RAID介绍:大数据预备知识-存储磁盘、磁盘冗余阵列RAID介绍),RAID通过条带化技术实现EC,条带化技术就是一种自动将 I/O 的负载均衡到多个物理磁盘上的技术,原理就是将一块连续的数据分成很多小部分并把他们分别存储到不同磁盘上去,这就能使多个进程同时访问数据的多个不同部分而不会造成磁盘冲突(当多个进程同时访问一个磁盘时,可能会出现磁盘冲突),而且在需要对这种数据进行顺序访问的时候可以获得最大程度上的 I/O 并行能力,从而获得非常好的性能。在HDFS中,把连续的数据分成很多的小部分称为条带化单元,对于原始数据单元的每个条带单元,都会计算并存储一定数量的奇偶检验单元,计算的过程称为编码,可以通过基于剩余数据和奇偶校验单元的解码计算来恢复任何条带化单元上的错误。
五分钟学大数据
2021/01/15
1.6K0
CubeFS 进入 CNCF 孵化阶段,国产分布式存储的新里程碑!| Q推荐
CubeFS 是国内首个云原生开源分布式存储产品,2019 年开源并捐赠托管至云原生计算基金会 (CNCF),2020 年 10 月 OPPO 开始主导 CubeFS 社区运营与版本迭代,累计发布 7 个 release 版本。在 OPPO 的全力推进下,CubeFS 于 2022 年 6 月进入 CNCF 孵化阶段。 本文,我们与 CubeFS Maintainer OPPO 的何小春进行了对话,共同探讨 CubeFS 的技术演进及云原生存储技术的发展方向。 1 云原生存储技术“越来越分布式” 随着云
深度学习与Python
2023/03/29
1.1K0
CubeFS 进入 CNCF 孵化阶段,国产分布式存储的新里程碑!| Q推荐
分布式系统下的纠删码技术(一) — Erasure Code (EC)
近几个月主要参与一个分布式存储系统的纠删码部分(用于数据容错),纠删码在学术界出现比较早,现在ceph,微软的存储系统,Hadoop 3.0等都用了EC。文章会分为多篇,主要将Erasure Code,LRC, 以及相关的数学基础,作为学习总结。
全栈程序员站长
2022/11/17
3.2K0
分布式系统下的纠删码技术(一) — Erasure Code (EC)
CubeFS在大数据和机器学习的探索和实践丨ArchSummit峰会实录
近日,AS 全球架构师峰会上海站圆满落地。会上,来自 OPPO 安第斯智能云的唐之享围绕云原生分布式存储 CubeFS 在机器学习和大数据的探索和实践这一主题展开了精彩分享,以下为本次分享的精华内容。本次分享主要从以下四个方面进行: CubeFS 的架构设计和关键产品特性; CubeFS 在机器学习领域的应用和实践,详细说明 OPPO 机器学习存储的演进过程和遇到的问题和挑战,以及如何基于 CubeFS 应对这些问题和挑战; CubeFS 在大数据的应用和实践; 展望 CubeFS 的未来演进方向。 01
深度学习与Python
2023/05/09
8860
CubeFS在大数据和机器学习的探索和实践丨ArchSummit峰会实录
HDFS廉颇老矣?基于对象存储的数据湖构建新思路
我们经常会被问到一个企业大数据架构的问题:随着企业收集 / 产生的数据越来越多,如何设计一套高效廉价的大数据架构,在尽可能多保留所有原始数据内容的同时还可以支持“无缝接入”的新的分析算法。本文所要介绍的数据湖解决方案可能是解决这个难题的一种新思路。
深度学习与Python
2021/06/08
8190
HDFS廉颇老矣?基于对象存储的数据湖构建新思路
纯干货 | 深入剖析 HDFS 3.x 新特性-纠删码
HDFS是一个高吞吐、高容错的分布式文件系统,但是HDFS在保证高容错的同时也带来了高昂的存储成本,比如有5T的数据存储在HDFS上,按照HDFS的默认3副本机制,将会占用15T的存储空间。那么有没有一种能达到和副本机制相同的容错能力但是能大幅度降低存储成本的机制呢,有,就是在HDFS 3.x 版本引入的纠删码机制。
五分钟学大数据
2021/04/01
1.8K0
XINNOR:高效RAID的存储实践
按:存储介质快速创新,催生RAID硬件加速变革以提供更高读写效率。众所周知本地存储读写效率是最高,但可扩展性容易受到诟病,xiRAID创新RAID算法+IB低延迟网络,能实现90%以上本地存储读写效率,同时获得网络存储可扩展性,这对高端应用场景是极具吸引力的。
数据存储前沿技术
2025/02/11
1700
XINNOR:高效RAID的存储实践
分布式存储系统纠删码技术分享
海云捷迅云课堂专题,旨在秉承开源理念,为大家提供OpenStack技术原理与实践经验,该专题文章均由海云捷迅工程师理论与实践相结合总结而成,如大家有其他想要了解的信息,可留言给我们,我们会根据问题酌情回复。
海云捷迅
2020/07/08
4K0
分布式存储系统纠删码技术分享
有趣的纠删码(erasure code)
RAID 是 "Redundant Array of Independent Disk" 的缩写,中文意思是独立冗余磁盘阵列 是一种古老的磁盘冗余备份技术,也许你从未了解其中的原理,但肯定也听说过它的大名。简单地解释,就是将N台硬盘通过RAID Controller(分Hardware,Software)结合成虚拟单台大容量的硬盘使用,其特色是N台硬盘同时读取速度加快及提供容错性.
王磊-字节跳动
2021/05/30
12.1K0
RS 纠删码为什么可以提高分布式存储可靠性?| 原力计划
Erasure Code(EC),即纠删码,是一种前向错误纠正技术(Forward Error Correction,FEC,说明见后附录)。目前很多用在分布式存储来提高存储的可靠性。相比于多副本技术而言,纠删码以最小的数据冗余度获得更高的数据可靠性,但是它的编码方式比较复杂。
区块链大本营
2020/03/24
1.6K0
RS 纠删码为什么可以提高分布式存储可靠性?| 原力计划
Ozone社区的领航者:腾讯Ozone EC的方案剖析
[导语] EC(Erasure Coding, 纠删码) 是现代分布式存储系统一个重要的能力。它可以保证在相同数据持久度的基础上大幅提高存储空间利用率,对降低存储成本有极为重要的意义。腾讯大数据存储团队全程参与了 Ozone 社区 EC 的设计与开发,并先于社区在内部完成了 EC offline recovery 的开发和测试。本文主要讲解 EC 在 Ozone 中的设计与实现,并讨论其中的利弊权衡。 0.引言 Apache Ozone 做为 Hadoop 生态的下一代分布式存储系统,是 Hadoop 生态
腾讯大数据
2022/08/26
9780
Ozone社区的领航者:腾讯Ozone EC的方案剖析
​纠删码理论基础
纠删码数据容错原理 纠删码是一种前向纠删码。过程分为编码和解码。编码过程是将文件分割为固定大小的文件块,针对这些被分割的文件块编码为k个块(k个块中包括了k1个数据块和k2个校验块)。解码过程是将编码后的多个子块作为输入,经过解码可以恢复任何一个块的数据(不管是数据块还是校验块)。 采用纠删码技术来做数据容错,当磁盘出现故障,失效数据可以通过纠删码的校验链的构建机制来恢复数据,而不是纠正数据自身的错误,一般(k+r,k)纠删码存储开校门为r/k,相对副本纠删码具有低存储开销,但是纠删码涉及到的编解码
用户4700054
2022/08/17
1.4K0
​纠删码理论基础
Web3公链DA扩展方向(1-概述、danksharding、validium)
区块链网络中的节点如何确保新提议的区块的所有数据实际上都是可用的? 交易数据确定已经发布了吗?
davy the bot
2024/05/15
3180
TStor统一存储与你同行
从公有云迈向混合云存储模式 “ 全球正加速迈进数字经济时代,企业也从最初的IT上云向业务全面云化方向发展。云计算厂商只有充分发挥IaaS、PaaS、SaaS等各方面能力,才能全面满足企业数字化升级的需求。云计算发展迅速,形态复杂多样,包括公有云、私有云、混合云、边缘云等等。根据中国信息通信研究院数据显示,中国公有云和私有云市场规模持续加速增长。 ” 腾讯云在公有云上的表现有目共睹,国际权威调研机构IDC最新发布的《IDC Quarterly Public Cloud Service Tracker,2
云存储
2022/07/18
7130
TStor统一存储与你同行
CubeFS - 新一代云原生存储系统
CubeFS 是一种新一代云原生存储系统,支持 S3、HDFS 和 POSIX 等访问协议,支持多副本与纠删码两种存储引擎,为用户提供多租户、 多 AZ 部署以及跨区域复制等多种特性。
我是阳明
2024/05/07
1.2K0
CubeFS - 新一代云原生存储系统
大数据平台:资源管理及存储优化技术
大数据平台的资源管理组件主要涉及存储资源和计算资源管理两部分,属于大数据平台运维管理系统。基于资源管理系统,大数据平台的开发运维人员能够清晰掌控平台的资源使用情况和资源在不同时间段下的变化趋势,能对资源使用异常进行及时发现并定位处理,避免造成更严重的影响,如磁盘空间撑爆,计算资源无空余,任务长时间等待不运行等造成业务阻塞。
Yiwenwu
2024/05/01
9320
大数据平台:资源管理及存储优化技术
HDFS EC 在知乎的应用
纠删码(Erasure Coding)简称 EC,是一种编码技术,通常被用于 RAID 和通信领域来保证数据的可靠性。采用纠删码编码的文件通常称为纠删码文件或者 EC 文件,EC 文件在小部分损坏时,也能够解码出可靠的数据。
从大数据到人工智能
2023/02/21
1.2K0
HDFS EC 在知乎的应用
应用AI芯片加速 Hadoop 3.0 纠删码的计算性能
在保证可靠性的前提下如何提高存储利用率已成为当前 DFS 应用的主要问题之一。
ethanzhang
2018/12/30
10.5K1
应用AI芯片加速 Hadoop 3.0 纠删码的计算性能
什么是HDFS的纠删码
Fayson在前面的文章中介绍过CDH6,参考《Cloudera Enterprise 6正式发布》和《如何在Redhat7.4安装CDH6.0》。CDH6主要集成打包了Hadoop3,包括Hadoop3的一些新特性的官方支持,比如NameNode联邦,纠删码等。纠删码可以将HDFS的存储开销降低约50%,同时与三分本策略一样,还可以保证数据的可用性。本文Fayson主要介绍纠删码的工作原理。
Fayson
2018/11/16
5.5K0
世界最优秀的分布式文件系统架构演进之路
Hadoop是一个由Apache基金会所开发的分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。
玄姐谈AGI
2020/02/13
7940
世界最优秀的分布式文件系统架构演进之路
推荐阅读
相关推荐
详解HDFS3.x新特性-纠删码
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档