分布式存储系统关键问题

(一)关键问题

  • 数据分布

对于存储系统,最重要的问题就是数据分布,即什么样的数据放置在什么样的节点上。数据分布时需要考虑数据是否均衡、以后是否容易扩容等一系列问题。不同的数据分布方式也存在不同的优缺点,需要根据自身数据特点进行选择。

1)哈希分布 => 随机读取

取模直接哈希:将不同哈希值的数据分布到不同的服务器上

1

 

关键:找出一个散列特性很好的哈希函数

问题:增加、减少服务器时的大量数据迁移

解决:1)将<哈希值,服务器>元数据存储在元数据服务器中;2)一致性哈希

一致性哈希: 给系统每个节点分配一个随机token,这些token构成一个hash环。执行数据存放操作时,先计算key的hash值,然后存放到顺时针方向第一个大于或者等于该hash值的token所在节点。

2

 

关键:哈希值变成了一个范围,每个物理节点上存储的数据是哈希值处于前一段范围的数据。

优点: 节点增加/删除时只会影响到在hash环中相邻的节点,而对其他节点没影响。

维护每台机器在哈希环中的位置方式:1) 记录它前一个&后一个节点的位置信息,每次查找可能遍历整个哈希环所有服务器;2) O(logN)位置信息,查找的时间复杂度为O(logN);3) 每台服务器维护整个集群中所有服务器的位置信息,查找服务器的时间复杂度为O(1)

虚拟节点:将哈希取模的模数取得很大,就会得到更多的哈希值,这个哈希值成为逻辑节点,一个物理机器可以根据自己的能力选择若干个逻辑节点的存储节点。

3

 

优点:将传统哈希的一(物理节点)对一(哈希值)的分布变成了一(物理节点)对多(哈希值)的分布。可以根据物理节点的能力调整数据的分布。

2)顺序分布 => 顺序扫描

表格上的数据按照主键整体有序

  • 负载均衡

1)数据写入时,写入节点的选择(空间容量?CPU负载?)

2)运行过程中,数据的迁移

如果运行过程中有新机器的加入,导致每个机器的存储数据量不同,需要能够自动发现,并自动进行调整。但是在调整的过程中也要控制好速度,以免对业务产生影响。

  • 复制&多备份

1)最大保护模式

强同步复制:至少在一个备库上执行成功

至少成功存储2个备份,才返回成功。

2)最大性能模式

异步复制模式:主库执行成功即返回

只要成功存储1个备份,就返回成功。

3)最大可用性模式

两种模式折衷:正常情况是最大保护模式,出现故障时变成最大性能模式

  • 数据一致性

版本号:在收到写入数据请求时,生成对应版本号。

删除老的版本号;读取时,保证读取到的是最新的版本号的数据;写入时,保证写入数据的版本号要新与存储的。

  • 容错

1)故障检测

心跳:S每隔一段时间向C发送一个心跳包

租约机制:带有超时时间的授权

2)故障恢复

master:主备机制,持久化索引

datanode:永久故障,增加备份

  • 可扩展性

1)总控节点是否成为瓶颈

不是瓶颈:舍弃小文件的处理,数据的读写控制权下放到工作机,通过客户端缓存元数据减少对总控节点的访问

内存成为瓶颈:采用两级结构,在总控机与工作机之间加一层元数据节点

2)同构系统

存储节点分为若干组,每个组内的节点服务完全相同的数据

3)异构系统

将数据划分为大小接近的分片,每个分片的多个副本分布到集群中的任何一个存储节点,某个节点发生故障,原有的服务将由整个集群而不是某几个固定的存储节点来恢复

本站部分文章源于互联网,本着传播知识、有益学习和研究的目的进行的转载,为网友免费提供。如有著作权人或出版方提出异议,本站将立即删除。如果您对文章转载有任何疑问请告之我们,以便我们及时纠正。

PS:推荐一个微信公众号: askHarries 或者qq群:474807195,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

转载请注明原文出处:Harries Blog™ » 分布式存储系统关键问题

赞 (0)
分享到:更多 ()

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址