一致性
前面已经说清楚明了体系的一致性。一般来说,越是强的一致性模型,用户应用起来越简单。
可扩大性
体系的可扩大性(scalability)指分布式存储体系经由过程扩大集群办事器范围来进步体系存储容量、计算量和机能的才能。跟着营业的成长,对调层存储体系的机能需求赓续增长,比较好的方法就是经由过程主动增长办事器进步体系的才能。幻想的分布式存储体系实现“线性可扩大”,也就是说,跟着集群范围的增长,体系整体机能与办事器数量呈线性关系。
数据分布
分布式体系差别于传统单机体系在于可以或许将数据分布到多个节点,并在多个节点之间实现负载均衡。数据分布的方法重要有两种,一种是哈希分布,如一致性哈希,代表体系为Amazon的Dynamo体系;另一种办法是次序分布,即数据按照主键整体有序,代表体系为Google的Bigtable体系。Bigtable将一张大年夜表根据主键切分为有序典范围,每个有序典范围是一个子表。
哈希分布
哈希取模的办法很常见,其办法是根据数据的某一种特点计算哈希值,并将哈希值与集群中的办事器建立映射关系,大年夜而将不合哈希值得数据分布到不合的办事器上。
如不雅哈希函数的散列特点很好,哈希方法可以将数据比较平均地分布到集群中去。然而,找出一个散列特点很好的哈希函数是很难的。举个例子,如不雅按照主键散列,那么同一个用户id下的数据可能被分散到多台办事器,这会使得一次操作同一个用户id下的多笔记录变得艰苦;如不雅按照用户id散列,轻易出现“数据倾斜”问题,即某些大年夜用户的数据量很大年夜,无论集群的范围有多大年夜,这些用户始终由一台办事器处理。
处理大年夜用户问题一般有两种方法,一种方法是手动拆分,即线下标记体系中的大年夜用户,并根据这些大年夜用户的数据量将其拆分到多台办事器上。这相当于在哈希分布的基本上针对这些大年夜用户特别处理;另一种方法是主动拆分,即数据分布算法可以或许犊飕调剂,主动将大年夜用户的数据拆分到多台办事器上。
传统的哈希分布算法还有一个问题:当办事器上线或者下线时,N值产生变更,数据映射完全被打乱,几乎所有的数据都须要从新分布,这将带来大年夜量的数据迁徙。
一种思路是不再简单地将哈希值和办事器个数之间做除法取模映射,而是将哈希值与办事器的对应关系作为元数据,交给专门的元数据办事器来治理。拜访数据时,起首计算哈希值,再萌芽元数据办事器,获得该哈希值对应的办事器。如许,集群扩容时,可以将部分哈希值分派给新参加的机械并迁徙对应的数据。
另一种思路就是采取一致性哈希算法。算法思惟如下:给体系中每个节点分派一个随机token,这些token构成一个哈希环。履行数据存放操作时,先计算Key(主键)的哈希值,然后存放到顺时针偏向第一个大年夜于或者等于该哈希值得token地点的节点。一致性哈希的长处在于节点参加/删除时只影响到在哈希环中相邻的节点,而对其他节点没影响。
次序分布
比来读了杨传辉的《大年夜范围分布式存储体系:原懂得析与架构实践》,这本书写的很好,涉及的常识点枚不堪举。本篇对于个中的分布式存储体系基本常识做些整顿,以飨诸君。
激发办事器宕机的原因有很多,例如内存缺点、办事器停电等等。办事器宕机可能随时产生,当产生宕机时,节点无法正常工作。办事看重启后,节点将掉去所有的内存信息。
哈希散列破坏了数据的有序性,只支撑随机读操作,不克不及够支撑次序扫描。次序分布在分布式表格体系中比较常见,一般的做法是将大年夜表次序划分为持续典范围,每个范围称为一个子表,总控办事器负责将这些子表按照必定的策略分派到存储节点上。
例如,用户表(User表)的主键范围为为1~7000,在分布式存储体系中划分为多个子表,分别对应数据范围1~1000,1001~2000,…,6001~7000。某些体系只有根表(Root表)一级索引,在Root表中保护用户表的地位信息,即每个用户子表存放在哪个存储节点上。为了支撑更大年夜的集群范围,Bigtable如许的体系将索引分为两级:根表以及元数据表(Meta表),由Meta表保护User表的地位信息,而Root表保护Meta表的地位信息。
次序分布与B+树数据构造比较类似,每个子表相当于叶子节点,跟着数据的插入和删除,某些子表可能变得很大年夜,某些变得很小,数据分布不平均,体系设计时须要推敲子表的决裂与归并。
负载均衡
分布式存储体系的每个集群一一般都有一个总控节点,其他节点为工作节点,由总控节点根据全局负载信息进行整体调剂。体系运行过程中须要赓续地履行迁徙义务,将数据大年夜负载较高的工作节点迁徙到负载较低的工作节点。
分布式存储体系中往往会存储数据的多个副本,个一一个副本为主副本,其他副本为备副本,由主副本对外供给办事。迁徙备副本不会对办事造成影响,迁徙主副本也可以起首将数据的读写办事切换到其他备副本。全部迁徙过程可以做到无缝,对用户完全透明。
复制
复制的概述
为了包管分布式存储体系的高靠得住和高可用,数据在体系一一般存储多个副本。当某个副本地点的存储节点出现故障时,分布式存储体系可以或许将办事切换到其他副本,大年夜而实现主动容错。分布式存储体系经由过程将复制协定将数据同步到多个存储节点,并包管多个副本的数据一致性。
同一份数据的多个副本往往有一个副本为主副本(Primary),其他副本为备副本(Backup),由主副本将数据复制到备副本。复制协定分为两种,强同步复制以及异步复制。二者的差别在于用户的写请求是否须要同步到备副本才可以返回成功。假如备副本不指荷琐,复制协定还会请求写请求至少须要同步到几个备副本。
主副本将写请求复制到其他备副本常见的做法是同步操作日记(Commit Log),主副本起首将操作日记同步到备副本,备副本回放操作日记,完成后通知主副本。等这些操作完成后再通知客户端写成功。这种协定称为强同步协定。强同步协定供给了强一致性,然则,如不雅备副本出现问题将壅塞写操作,体系可用性较差。
推荐阅读
数据分析对于运营来说异常重要,它就像帆海中的指南针,越精确的数据细度能反竽暌钩不合运营手段对应的不合效不雅。那么,到底该若何应用数据分析明显晋升运营效不雅呢?本文将大年夜4个维>>>详细阅读
本文标题:分布式存储系统基础
地址:http://www.17bianji.com/lsqh/34788.html
1/2 1