首页 > 代码库 > 分布式存储系统设计的关键问题
分布式存储系统设计的关键问题
本文介绍下分布式系统设计中的一些关键问题及解决思路:
数据的分布方式
副本的保存方式
副本的控制
节点状态监控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信息,一旦规定的时间内没有收到心跳信息,将相应的节点下线。
参考文章
《分布式系统原理介绍》,刘杰
分布式存储系统设计的关键问题
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。