zoukankan      html  css  js  c++  java
  • 分布式存储系统设计的关键问题

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

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


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

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

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

    2)副本的保存方式
    以机器为单位
    副本以机器为单位,若干机器互为副本,副本之间的数据全然同样。

    长处
    实现简单
    缺点
    数据恢复效率不高(恢复源较少)。负载分布easy不均。


    以数据段为单位
    将数据拆分为合理的数据段,以数据段为单位进行副本保存。数据段的大小同样,有多种叫法: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信息,一旦规定的时间内没有收到心跳信息,将对应的节点下线。

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


  • 相关阅读:
    Hashmap实现原理
    策略模式
    Google Drive ubuntu
    numix Docky
    Google Drive 和 Dropbox 同步同一个文件夹目录
    sublime text 2
    matlab cell
    liteide
    taglist and nerdtree
    codeblocks
  • 原文地址:https://www.cnblogs.com/jhcelue/p/6737768.html
Copyright © 2011-2022 走看看