聊聊当前主流分布式存储系统的特点

前言


笔者最近在学习,了解当前流行的若干分布式存储系统。为什么这么做呢?因为笔者比较了解HDFS,但是对其它同等类型的存储系统知道的不多,想借此学习比较一番,希望能够做到触类旁通吧。本文可能不会阐述的很具体,想到哪就说到哪吧。

按照元数据存储结构划分


数据存储必然涉及到其元数据的存储管理,以什么样的方式来管理这些元数据就成为了划分的区别。按照这个划分,能够划分出以下3类:

  • 集中式元数据管理。比如说典型的,HDFS。NameNode完全中心管理式的。优势是易于管理,路径查找什么的也很方便。弊端也很明显,扩展性问题,单点瓶颈问题。
  • 分布式元数据管理。分布式元数据与集中式的相比,由单点变为多点,扩展性会变好,但是会带来一个问题,元数据管理节点间的数据同步问题。当然为了简单化这其中的数据同步,我们可以让每个节点管理部分数据。
  • 无原数据管理。有人可能会好奇,还有这种方式?是的,GlusterFS用的就是这种模式。它的元数据和实际数据是存在一起的。它用的是hash算法来定位文件的位置的,输入的参数就是文件路径信息。那这种方式看起来很棒啊,扩展性相当好呢。但是目录树的查询就显得不太方便了,比如说列出扫描某个目录什么的,还有或者是深目录的查询,里面会涉及到多次的文件定位。

所以其实没用绝对的好坏,只有适不适合我们使用的存储系统。

数据定位方式


这里提到的数据定位方式其实是一个比较大的概念,它主要包含两层含义:

  • 新写的文件,应该创建在哪里,哪个机架,哪个节点?
  • 给定文件信息,如何定位到文件数据?

其实从根本上来说,存储系统的拓扑逻辑结构的设计决定了文件数据的定位问题。笔者以HDFS为例.。稍微了解过HDFS的人,基本都知道它有经典的“三副本”策略嘛,这3个副本横跨了不同的节点,机架,以此保证数据的高可用。所以我们看,HDFS在这里定义出了3个逻辑层的概念:

  • NODE_LOCAL:同节点
  • RACK_LOCAL:同机架
  • OFF_SWITCH:不同机架

然后根据管理区传入的集群拓扑结构,进行数据的位置选择。之后,数据的定位也是按照这种方式。当然了,还可以加上更多别的权重因素,比如Ceph的crush算法规则。

还有一个问题,无元数据管理的存储系统用的哈希方式是如何进行定位的呢?简单来说,这是一个哈希值的区间范围管理问题。感兴趣的同学可以学习GlusterFS的弹性哈希算法。

数据的存储形式


这里的存储形式指的主要有3方面:

  • 分布式(单副本)
  • 多副本
  • Striping(条带式)

前面2个很好理解,第3个条带式是什么意思呢?它指的是数据被横切到多个节点上,而不是连续的存储在一个节点上。条带式的好处是可以提高文件读写效率,因为我们能够在多个节点上并行读写文件的目的。

数据的对外服务形式


存储对外的服务形式,依据不同的使用场景,用户可自行选择。主要有以下3类:

  • 文件系统的形式。典型的比如说HDFS,不过它与本地文件系统最大的区别,它是分布式的。Ceph也提供了文件系统的使用方式。
  • 对象存储服务。这种服务方式与文件系统相比,更加简单化了用户的使用,使用者直接将自己需要存储的对象(图片,文本或其它),进行上传即可。目前HDFS也在做类似的服务叫做Ozone。而Ceph是已经有这样的服务。
  • 块服务。块服务的大致意思通过网络互连的方式把各个节点上独立的块设备进行组织,对外提供服务。

以上是笔者最近一周所看所想,当然了,在分布式存储系统中,还有其它很多值得探讨的点,比如说数据恢复。笔者会在后续的文章中继续进行分享。

猜你喜欢

转载自blog.csdn.net/androidlushangderen/article/details/79119041