- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
分布式存储课件
三、分布式系统-数据分布 哈希分布 哈希取模的方法很常见,其方法是根据数据的某一种特征计算哈希值,并将哈希 值与集群中的服务器建立映射关系,从而将不同哈希值的数据分布到不同的服务器上。 所谓数据特征可以是 key-value 系统中的主键(key),也可以是其他与业务逻辑相关的 值。例如,将集群中的服务器按 0 到 N-1 编号(N 为服务器的数量),根据数据的主 键(hash(key) % N)或者数据所属的用户 id(hash(user_id) % N)计算哈希值,来决定将数据映射到哪一台服务器。 处理大用户问题一般有两种方式,一种方式是手动拆分,即线下标记系统中的大用 户(例如运行一次 MapReduce 作业),并根据这些大用户的数据量将其拆分到多台服务 器上。这就相当于在哈希分布的基础上针对这些大用户特殊处理;另一种方式是自动拆 分,即数据分布算法能够动态调整,自动将大用户的数据拆分到多台服务器上。 传统的哈希分布算法还有一个问题:当服务器上线或者下线时,N 值发生变化,数据映射完全被打乱,几乎所有的数据都需要重新分布,这将带来大量的数据迁移。 三、分布式系统-数据分布 一种思路是不再简单地将哈希值和服务器个数做除法取模映射,而是将哈希值与服 务器的对应关系作为元数据,交给专门的元数据服务器来管理。访问数据时,首先计算 哈希值,再查询元数据服务器,获得该哈希值对应的服务器。这样,集群扩容时,可以 将部分哈希值分配给新加入的机器并迁移对应的数据。 另一种思路就是采用一致性哈希(Distributed Hash Table,DHT) 算法。算法思想 如下 :给系统中每个节点分配一个随机 token,这些 token 构成一个哈希环。执行数据 存放操作时,先计算 Key(主键)的哈希值,然后存放到顺时针方向第一个大于或者等于该哈希值的 token 所在的节点。一致性哈希的优点在于节点加入 / 删除时只会影响到 在哈希环中相邻的节点,而对其他节点没影响。 特点:哈希散列破坏了数据的有序性,只支持随机读取操作,不能够支持顺序扫描 三、分布式系统-数据分布 顺序分布在分布式表格系统中比较常见,一般的做法是将大表顺序划分为连续的范 围,每个范围称为一个子表,总控服务器负责将这些子表按照一定的策略分配到存储节 点上。 顺序分布与 B+ 树数据结构比较类似,每个子表相当于叶子节点,随着数据的插入 和删除,某些子表可能变得很大,某些变得很小,数据分布不均匀。如果采用顺序分 布,系统设计时需要考虑子表的分裂与合并,这将极大地增加系统复杂度。子表分裂指 当一个子表太大超过一定阀值时需要分裂为两个子表,从而有机会通过系统的负载均衡 机制分散到多个存储节点。子表合并一般由数据删除引起,当相邻的两个子表都很小 时,可以合并为一个子表。一般来说,单个服务节点能够服务的子表数量是有限的,比 如 4000~10000 个,子表合并的目的是为了防止系统中出现过多太小的子表,减少系统 中的元数据。 三、分布式系统-数据分布 负载均衡 分布式存储系统的每个集群中一般有一个总控节点,其他节点为工作节点,由总控 节点根据全局负载信息进行整体调度。工作节点刚上线时,总控节点需要将数据迁移到 该节点,另外,系统运行过程中也需要不断地执行迁移任务,将数据从负载较高的工作 节点迁移到负载较低的工作节点。 工作节点通过心跳包(Heartbeat,定时发送)将节点负载相关的信息,如 CPU, 内存,磁盘,网络等资源使用率,读写次数及读写数据量等发送给主控节点。主控节点计算出工作节点的负载以及需要迁移的数据,生成迁移任务放入迁移队列中等待执行。 需要注意的是,负载均衡操作需要控制节奏,比如一台全新的工作节点刚上线的时候, 由于负载最低,如果主控节点将大量的数据同时迁移到这台新加入的机器,整个系统在 新增机器的过程中服务能力会大幅下降。负载均衡操作需要做到比较平滑,一般来说, 从新机器加入到集群负载达到比较均衡的状态需要较长一段时间,比如 30 分钟到一个 小时。 负载均衡需要执行数据迁移操作。在分布式存储系统中往往会存储数据的多个副 本,其中一个副本为主副本,其他副本为备副本,由主副本对外提供服务。迁移备副本 不会对服务造成影响,迁移主副本也可以首先将数据的读写服务切换到其他备副本。整 个迁移过程可以做到无缝,对用户完全透明。 三、分布式系统-数据分布 负载均衡 假设数据分片 D 有两个副本 D1 和 D2,分别存储在工作节点 A1 和 A2,其中,D1 为主副本,提供读写服务,D2 为备副本。如果需要将 D1 从工作节点 A1 中迁移出去, 大致的操作步骤如下: 1)将数据分片 D 的读写服务由工作节点 A1 切换到 A2,D2 变成主副本; 2)增加副本
文档评论(0)