当前位置: 首页 > news >正文

分布式存储技术(上):HDFS 与 Ceph的架构原理、特性、优缺点解析

面对企业级数据量,单机容量太小,无法存储海量的数据,这时候就需要用到多台机器存储,并统一管理分布在集群上的文件,这样就形成了分布式文件系统。HDFS是Hadoop下的分布式文件系统技术,Ceph是能处理海量非结构化数据存储的对象存储技术,本文将对他们的架构原理、特性和优缺点做介绍。

— 分布式文件系统HDFS 

HDFS全称为Hadoop Distributed File System,在2006年由Doug Cutting发布了第一个版本,是运行在通用硬件上的分布式文件系统。它提供了一个高度容错性和高吞吐量的海量数据存储解决方案。HDFS的推出给当时的行业提供了一个低成本、高可扩展的数据存储方案,尤其适用于互联网行业的海量用户访问日志的存储和检索需求,因此一经推出就受到了互联网行业的欢迎,以Yahoo为代表的互联网企业快速构建了基于HDFS的企业数仓,从而加速了Hadoop在互联网行业内的快速落地(后来这个Yahoo团队独立出来创立了Hortonworks)。此后经过3~4年的快速发展,海外的大型企业都开始拥抱HDFS,各种新型应用场景开始出现并创造了较大的业务价值。从2009年开始,国内的Hadoop应用开始出现,并最早在运营商和互联网行业落地。作为Hadoop体系的最成功的项目,HDFS已经在各种大型在线服务和数据存储系统中得到广泛应用,已经成为私有化部署领域海量数据存储的实施标准。

HDFS通过一个高效的分布式算法,将数据的访问和存储分布在大量服务器之中,在可靠地多备份存储的同时还能将访问分布在集群中的各个服务器之上。在构架设计上,NameNode管理元数据,包括文件目录树,文件->块映射,块->数据服务器映射表等。DataNode负责存储数据、以及响应数据读写请求;客户端与NameNode交互进行文件创建/删除/寻址等操作,之后直接与DataNode交互进行文件I/O。

HDFS通过副本机制保证数据的存储安全与高可靠,默认如上图所示配置为3副本,每个数据块分布在不同的服务器之上。在用户访问时,HDFS将会计算使用网络最近的和访问量最小的服务器给用户提供访问。HDFS支持文件的创建、删除、读取与追加,对于一个较大的文件,HDFS将文件的不同部分存放于不同服务器之上。在访问大型文件时,系统可以并行从服务器阵列中的多个服务器并行读入,增加了大文件读入的访问带宽。通过以上实现,HDFS通过分布式计算的算法,将数据访问均摊到服务器阵列中的每个服务器的多个数据拷贝之上,单个硬盘或服务器的吞吐量限制都可以突破,提供了极高的数据吞吐量。

HDFS将文件的数据块分配信息存放在NameNode服务器之上,文件数据块的信息分布地存放在DataNode服务器上。当整个系统容量需要扩充时,只需要增加DataNode的数量,HDFS后续通过balance算法将数据块搬迁到新的DataNode实例中。通过以上实现,HDFS可以做到在不停止服务的情况下横向扩容和数据重新分布。HDFS文件系统假设系统故障(服务器、网络、存储故障等)是常态,并通过多方面措施来保证数据的可靠性。数据在写入时被复制多份,可以通过用户自定义的复制策略分布到物理位置不同的服务器上;数据在读写时将自动进行数据的校验,一旦发现数据校验错误将重新进行复制。

受限于当时的需求背景和硬件能力水平,HDFS也有一些明显的架构问题,随着技术和需求的演进而逐渐成为瓶颈。通过NameNode来管理元数据有它的架构问题,首先是服务高可用问题,在Hadoop 1.0时代这是最大的架构问题,不过在2013年Hadoop 2.0中通过Master-Slave的方式得以解决;另外每个存储的文件都必须在NameNode的内存中维护一个描述符从而占据内存空间,当文件数据量太大时就会受限于单个NameNode的内存资源从而导致性能瓶颈(一般单个集群文件数量在亿级别以上时),社区在2017年推出的Hadoop 2.9版本提供HDFS Router Federation功能,通过不同的NameService处理挂载在HDFS上不同目录下的文件的方式来缓解这个问题。

存储成本问题对于大型HDFS集群是个更大的问题,HDFS的三副本策略保证了性能和存储成本的均衡,适合于热数据和温数据的存储和处理,对于冷数据存储来说成本就偏高,尤其与对象存储类的解决方案相比。开源社区直到2019年Hadoop 3.0里才推出了Erasure Code技术(星环科技在2014年推出HDFS EC技术),但由于推出时间较晚和技术成熟度等原因,目前并没有大规模落地。与云计算的存储技术融合是另外一个重要的架构问题,公有云有成熟的云存储方案,相对HDFS成本更低,与云平台的调度系统协调的更好,而HDFS只能定位作为云上的企业存储的一个细分方案之一。如各个云平台都推出EMR(Elastic MapReduce)类产品,如Google Dataproc,阿里云EMR等,但总体受欢迎度比较一般,缺少与云上其他数据分析与处理系统的全方位的打通和互联。

从2012年开始,国内重点行业的中大型企业都已经开始了大数据的布局,到2019年像金融、运营商、能源、政府公安等重要行业大部分企业都已经构建了基于HDFS的数据存储系统,推动了一批重点的数字化应用的推广。如金融行业的ODS、历史数据存储、数据湖、科技监管类应用,运营商的经分系统、电子围栏、数字营销系统等,都已经是广泛使用的业务系统。由于国内外行业需求的差异性以及对公有云的接受程度不同,HDFS在国内仍然是一个非常重要的数据存储技术,也拥有更好的技术和应用生态,因此有着更为完善的技术生命力。

— 对象存储Ceph 

对象存储的设计目标是为了处理海量非结构化数据的存储问题,如邮件、图谱、视频、音频以及其他多媒体文件,并在社交、移动等应用中大量被使用,此外也大量被用于数据备份和灾备场景。

在业务开发层一般提供基于S3协议的开发接口,这套API提供了一整套的RESTful API,可以让应用可以通过HTTP PUT或GET命令来操作数据对象,每个对象有个自己的访问地址。与HDFS等文件类存储采用目录结构或多层级树形结构不同,对象存储在物理存储上一般采用一个扁平的数据存储结构,每个对象都是一个包括元数据、数据和唯一标识ID的完备数据描述,这样应用可以非常方便的去找到并访问这个数据对象,在存储的管理上也相对比较简单,尤其是大部分应用场景下数据对象都存储在远端的云服务器上。对象存储管理软件会将所有的硬盘资源抽象为一个存储池,用于数据的物理化存储。相对于文件类存储,对象存储相对来说成本更低,但相对数据分析的性能不佳,需要配套各种分析的缓存技术来能提供比较好的数据分析性能。

Ceph是一个开源的对象存储项目,诞生于2004年,提供对象、块和文件存储,其中对象存储功能在业内非常受欢迎,在国内已经有很多私有化云平台的对象存储生产落地案例。一个Ceph的存储集群一般包括三个部分:

  • Ceph存储集群服务端:在Ceph存储集群服务端架构中核心组件有Monitor服务、OSD(Object Storage Daemons)服务和Manager服务等。其中Mon服务用于维护存储系统的硬件逻辑关系,主要是服务器和硬盘等在线信息。Mon服务通过集群的方式保证其服务的可用性。OSD服务用于实现对磁盘的管理并实现真正的数据读写,通常一个磁盘对应一个OSD服务。

  • Ceph Clients:以library方式提供的客户端,可以用于访问Ceph服务端,它提供了3种协议来访问,包括对象存储的RADOSGW、块存储端的RBD以及文件存储的CephFS。

  • Ceph 协议:用于服务端和Client的通信协议。

由于一个分布式存储集群管理的对象数量非常多,可能是百万级甚至是千万级以上,因此OSD的数量也会比较多,为了有好的管理效率,Ceph引入了Pool、Place Groups(PGs)、对象这三级逻辑。PG是一个资源池的子集,负责数据对象的组织和位置映射,一个PG负责组织一批对象(数据在千级以上)。同时一个PG会被映射到多个OSD,也就是由多个OSD来负责其组织的对象的存储和查询,而每个OSD都会承载大量的PG,因此PG和OSD之间是多对多的映射关系。

当用户要将数据存储到Ceph集群时,存储数据会被分割成多个对象(Ceph的最小存储单元),每个对象都有一个唯一的id,每个对象的大小是可以配置的,默认为4MB。Ceph通过自创的CRUSH哈希算法,将若干个对象映射到PG上,形成一个对象与PG的逻辑组合,并根据PG所在的Pool的副本数,将数据复制到多个OSD上,保证数据的高可用。

图片来源于:https://www.wenjiangun.com/blog/952/

在集群的可扩展性上,Ceph可以做到几乎线性扩展。CRUSH 通过一种伪随机的方式将数据进行分布,因此 OSD 的利用就能够准确地通过二项式建模或者常规方式分配。无论哪一个都可以取得完美的随机过程。随着 PG 的增加,差异就下降:对于每个 OSD 100 个 PG的情况下,标准差是 10%;对于1000 个的情况下为 3%。线性的分布策略极好地将负载在集群中平衡。CRUSH 通过卸载所有的分配碎片到一个特定的 OSD 上从而来修正这样的问题。与哈希以及线性策略不同,CRUSH 同时也最小化了数据在集群扩展产生的迁移,同时又保证了负载的平衡。CRUSH 的计算复杂度为 O(log(n))(对于有 n 个 OSD 的集群),因此只需要 10 几个微秒就可以使集群增长到好几千个 OSDs。

值得关注的是,Ceph客户端所有的读写操作都需要经过代理节点,一旦集群并发量较大,代理节点就容易成为单点瓶颈。在数据的一致性方面,Ceph只能支持数据的最终一致性。

— 小结

本文从架构和原理介绍了高度容错性、高吞吐量的分布式文件系统HDFS,和处理海量非结构化数据存储的对象存储技术Ceph(现在各项技术发展比较快,可能存在技术描述跟最新技术发展情况不太一致的情况)。那么在特定场景下,数据的快速查询、快速写入和可扩展性也是必不可少的,下一篇我们将介绍搜索引擎技术和宽表存储技术。

相关文章:

分布式存储技术(上):HDFS 与 Ceph的架构原理、特性、优缺点解析

面对企业级数据量,单机容量太小,无法存储海量的数据,这时候就需要用到多台机器存储,并统一管理分布在集群上的文件,这样就形成了分布式文件系统。HDFS是Hadoop下的分布式文件系统技术,Ceph是能处理海量非结…...

【python设计模式】20、解释器模式

哲学思想: 解释器模式(Interpreter Pattern)是一种行为型设计模式,它提供了一种方式来解释和执行特定语言的语法或表达式。该模式中,解释器通过将表达式转换为可以执行的对象来实现对表达式的解释和执行。通常&#xf…...

【PostgreSQL】通过docker的方式运行部署PostgreSQL与go操作数据库

目录 1、docker的方式运行部署PostgreSQL 2、控制台命令 3、go操作增删改查 1、docker的方式运行部署PostgreSQL docker pull postgres docker run --name learn_postgres -e POSTGRES_PASSWORDdocker_user -e POSTGRES_USERdocker_user -p 5433:5432 -d postgres进入容器&am…...

Kotlin协程序列:

1: 使用方式一 ,callback和coroutine相互转化。 import kotlinx.coroutines.* import java.lang.Exception class MyCallback {fun doSomething(callback: (String?, Exception?) -> Unit) {// 模拟异步操作GlobalScope.launch {try {delay(1000) // 延迟 1 秒…...

java获取视频时长

1、先导包 <dependency><groupId>ws.schild</groupId><artifactId>jave-all-deps</artifactId><version>2.6.0</version> </dependency>2、获取时长 Testpublic void test01() {long time 0;try {String url "http://…...

EDAS投稿系统的遇到的问题及解决办法

问题1&#xff1a; gutter: Upload failed: The gutter between columns is 0.2 inches wide (on page 1), but should be at least 0.2 inches 解决&#xff1a; 在\begin{document}前添加\columnsep 0.201 in&#xff08;0.2in也会报错&#xff0c;建议填大一点点&#xff09…...

t-learning 产品经理课程笔记

t-learning 腾讯公开课——产品经理课程 第一课 化身用户研究员&#xff0c;张小龙《产品精讲》 1-3&#xff1a;执行 4-7&#xff1a;中坚力量 7&#xff1a;核心leader 能解决问题的&#xff0c;就是好的产品经理 如何储备产品知识与素养 &#xff08;1&#xff09;了解并…...

校招,从准备开始准备(持续更新ing...)

诸神缄默不语-个人CSDN博文目录 作者现在有科研任务在身&#xff08;今天还在标数据哦&#xff09;&#xff0c;所以不能实习。 所以就是纯纯拉个表。 最近更新时间&#xff1a;2023.4.9 最早更新时间&#xff1a;2023.4.6 文章目录1. 学习资料和知识点清单1.1 机器学习1.2 深…...

Android:使用LayerDrawable动态生成四宫格头像(包含双人、三人头像)

其实用自定义View也可以实现&#xff0c;我比较懒&#xff0c;就用LayerDrawable来创建一个新的Drawable资源实现。 举例4宫格&#xff0c;9宫格原理类似&#xff0c;每个图标的位置需要用边距慢慢调成预期的效果 效果如下&#xff1a; 双人头像&#xff1a; 三人头像&#x…...

Android Jetpack 从使用到源码深耕【数据库注解Room 从实践到原理 】(三)

前面两篇文章,我们一起学习了,Room引入的背景、Room的使用方式、Room的实现原理猜想验证、Room的源码原理探索总结。 本文,我们将其中牵扯到的课外知识点 or 过程中没有说到的知识点,进行一下单独的总结。 题外话:扩展知识点总结 1. 抽象工厂的设计模式应用 在源码探索…...

中国电子学会2023年03月份青少年软件编程Scratch图形化等级考试试卷三级真题(含答案)

2023-03 Scratch三级真题 分数&#xff1a;100 题数&#xff1a;38 测试时长&#xff1a;60min 一、单选题(共25题&#xff0c;共50分) 1.计算“248……128”&#xff0c;用变量n表示每项&#xff0c;根据变化规律&#xff0c;变量n的赋值用下列哪个最合适&#xff1f;&am…...

分布式事务培训

MQ发生成功 MQ响应失败 断网 DIY seary 不保证隔离性&#xff0c;扣账不成功&#xff0c;钱被花了。导致回滚不成功 超时处理。 超时处理机制 防悬挂&#xff0c; try 的 try catch 导致不报错。空提交 处理链&#xff0c;inputlog万一数据库出现问题。outlog 最终保证回滚。映…...

关键词采集工具可以帮助我们做那些方面的工作

针对搜索引擎的关键词采集工具可以帮助我们做那些方面的工作&#xff0c;至少从10个工作场景说明&#xff0c;并列举详细的使用场景 Msray-plus&#xff0c;是一款企业级综合性爬虫/采集软件。 支持亿级数据存储、导入、重复判断等。无需使用复杂的命令&#xff0c;提供本地W…...

2023年5月PMP难考吗?

PMP考试难不难&#xff0c;还是因人而异的&#xff0c;对小白而言&#xff0c;肯定是难的&#xff0c;对项目管理老人而言&#xff0c;难度肯定是没那么高。 难点主要是非常多而难理解的知识点&#xff0c;以及答题时的知识点提取。经过系统的学习&#xff0c;分解知识点&…...

定语从句的省略

1. 关系代词的省略&#xff08;即that which之类的&#xff09; 条件&#xff1a;首先限制定语从句&#xff08;即没有逗号的&#xff09; 先行词在从句中作宾语成分 两个条件缺一不可&#xff0c;先行词中作主语成分是不可以的。&#xff08;这就是形容词短语作定语后置和定…...

简易小工具实现批量打开多个网页

最近有个需求&#xff0c;希望一次性可以打开多个网页&#xff0c;网址自由指定&#xff0c;这个需求的实现非常简单&#xff0c;使用基本的c代码调用system函数即可&#xff0c;都不需要MFC相关的东西。 但是我实测一些工具后发现一个问题&#xff0c;当打开超过大约3个网址的…...

swiper 点击事件

点击swiper 获取当前下标 两种模式 "swiper": "^5.4.5", "vue-awesome-swiper": "^3.1.3",swiperOption: {autoplay: { delay: 3000 },loop: true, //循环slidesPerView: auto,direction: "vertical",disableOnInteraction:…...

旅游心得Traveling Experience

前言 加油 原文 旅游心得常用会话 ❶ Share photos of the trip with friends. 与朋友分享旅游的照片。 ❷ We’ll go to the Great Wall, if you prefer. 你如果愿意的话,我们去长城。 ❸ Would you go to the church or the synagogue or the mosque? 你会去教堂,犹太…...

【 SpringBoot ⽇志⽂件 】

文章目录一、⽇志的作用二、认识⽇志三、⾃定义⽇志打印3.1 在程序中得到⽇志对象3.2 使⽤⽇志对象打印⽇志3.3 ⽇志格式说明四、⽇志级别4.1 ⽇志级别的作用4.2 ⽇志级别的分类与使⽤4.2.1 ⽇志级别的分类4.2.2 ⽇志使⽤4.2.2.1 配置全局日志级别4.2.2.2 配置局部文件夹的日志…...

ThinkPHP路由不转换的原因及解决方法

随着互联网的发展&#xff0c;网站开发技术日新月异。而ThinkPHP作为一款流行的PHP开发框架之一&#xff0c;也在不断地吸纳更多的开发者来使用。然而&#xff0c;有时候我们在使用过程中会遇到一些问题&#xff0c;比如ThinkPHP路由不转换的问题。本文将详细介绍这个问题以及解…...

【案例教程】基于RWEQ模型的土壤风蚀模数估算及其变化归因分析实践技术

土壤风蚀是一个全球性的环境问题。中国是世界上受土壤风蚀危害最严重的国家之一&#xff0c;土壤风蚀是中国干旱、半干旱及部分湿润地区土地荒漠化的首要过程。中国风蚀荒漠化面积达160.74104km2&#xff0c;占国土总面积的16.7%&#xff0c;严重影响这些地区的资源开发和社会经…...

Twitter推荐算法总架构和算法说明

Twitter推荐算法总架构&#xff1a; 这个推荐架构的作用是生成在用户首页上显示的推文列表 步骤&#xff1a; 1、从不同的推荐来源中获取最好的推文&#xff0c;这个过程被称为候选来源。 2、使用机器学习模型对每条推文进行排名。 3、应用启发式方法和过滤器&#xff0c;例如…...

1.C语言题目---指针类(基础)

1. 小端,低地址存低字节,高地址存高字节 大端,低地址存高字节,高地址存低字节 人类读写数据习惯是大端字节序 比如说数字12345678在寄存器大端存储顺序如下: 在寄存器小端存储顺序如下: 假设&#xff0c;a变量的地址为0x64&#xff0c;则a变量在内存中的模型为&#xff1a; 0…...

【算法与数据结构】关于排序的问题思考

文章目录引言不断的插入值&#xff0c;并保证序列是递增的。Python中sort()和sorted()的区别是啥&#xff1f;sorted 函数如何使用&#xff1f;问题&#xff1a; 如何返回排序之后的索引问题&#xff1a;排序的稳定性问题&#xff0c;寻找第K大的元素的算法。引出一个算法题&am…...

行为型模式-命令模式

行为型模式-命令模式命令模式&#xff08;Command&#xff09;解决命令执行问题描述适用环境优点&#xff1a;缺点&#xff1a;违反原则&#xff1a;代码实现命令模式&#xff08;Command&#xff09; 解决命令执行问题 描述 将一个请求封装为一个对象&#xff0c;并定义该对…...

SHELL综合练习1

文章目录1、编写函数&#xff0c;实现打印绿色OK和红色FAILED 判断是否有参数&#xff0c;存在为Ok&#xff0c;不存在为FAILED2、 编写函数&#xff0c;实现判断是否无位置参数&#xff0c;如无参数&#xff0c;提示错误3、编写函数实现两个数字做为参数&#xff0c;返回最大值…...

ROS开发之如何使用发布者、订阅者和话题消息?

文章目录0、引言1、创建发布者&#xff08;velocity发布者 →geometry话题消息→turtlesim订阅者&#xff09;2、创建订阅者&#xff08;turtlesim发布者→turtlesim话题消息→pose订阅者&#xff09;3、自定义话题消息4、使用自定义话题消息&#xff08;person发布者→自定义话…...

基于Java+Springboot+vue高校资源共享交流平台设计和实现

博主介绍&#xff1a;✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…...

收藏! 38个Python数据科研库

通用的数据科学库&#xff0c;即那些可能被数据科学领域的从业人员用于广义的&#xff0c;非神经网络的&#xff0c;非研究性工作的库&#xff1a; 数据-用于数据管理&#xff0c;处理和其他处理的库 数学-虽然许多库都执行数学任务&#xff0c;但这个小型库却专门这样做 机…...

SpringBoot过滤器获取Bean-请求重复可读-获取请求体数据-用户IP归属地获取

文章目录一.获取Bean二. Request重复可读三. 过滤器获取Body请求体数据四.用户ip获取一.获取Bean 网上一些论调说Filter无法注入Bean的原因是加载顺序: listener—>filter—>servlet导致的.我不赞同. 原因:默认机制下&#xff0c;在SpringBoot应用启动时&#xff0c;IOC…...