分布式存储系统设计的关键问题


本文介绍下分布式系统设计中的一些关键问题及解决思路:
数据的分布方式
副本的保存方式
副本的控制
节点状态监控

1)数据的分布方式
hash分布
用于key-value模型的存储系统中,数据库中的分表也可以使用这种方式。
利用hash函数将对象散列到不同的机器。
优点:
散列型号,分布均匀,实现简单。
缺点
可扩展性(scalability)不强,增加新的机器会导致之前的映射全部失效。

按数据范围分布
用于key-value模型的存储系统中,数据库中的分表也可以使用这种方式。
将数据分成不同的区间,分到不同的机器上,区间可以采用动态创建的方式。
优点:
数据拆分规则灵活,扩展性强
缺点:
元数据较多(维护数据分区和机器之间的对应关系),容易成为瓶颈。

按数据量分布
用于文件模型的存储系统。
分布过程中,保证个台机器上的数据量大体一致,即负载均衡方式。
优点:扩展性强
缺点:维护元数据(每个文件分布在那台机器上)

一致性哈希
用于key-value模型的存储系统中
克服了hash分布的扩展性缺陷,广泛用于各种产品实现,如memcached, openstack swift等。

2)副本的保存方式
以机器为单位
副本以机器为单位,若干机器互为副本,副本之间的数据完全相同。
优点
实现简单
缺点
数据恢复效率不高(恢复源较少);负载分布容易不均。

以数据段为单位
将数据拆分为合理的数据段,以数据段为单位进行副本保存。数据段的大小相同,有多种叫法:chunk, partition,segment等。
优点
恢复快,扩展性强
缺点
维护元数据,难于实现

3)副本控制
用来管理多副本之间的一致性问题,关系到系统的一致性模型。

中心化的副本控制
一个副本充当中心节点,控制其他副本,如primary-secondary方式。更新操作都要通过中心节点完成,该方式的实现相对简单。典型代表如GFS, mysql中的master-slave模式。

去中心化,个副本之间没有中心控制。
这种方式的实现比较复杂,采用的不多,代表产品Dynamo。

4)节点状态监控
heartbeat
存在一个监控节点,其他节点定时向监控节点发送heartbeat信息。

lease机制
也可以采用lease机制实现状态监控。

fastdfs中的方法
1)数据的分布方式
按数据量分布,不同的组之间做负载均衡。

2)副本的保存方式
以机器为单位保存副本,互为副本的几台机器构成一个组。

3)副本控制
由tracker在组中选择一个storage作为中心节点(primary),其他的节点为从节点(secondary),又中心节点负责向从节点同步数据。

4)节点状态监控
storage定时向tracker发送heatbeat信息,一旦规定的时间内没有收到心跳信息,将相应的节点下线。

参考文章
《分布式系统原理介绍》,刘杰


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值