一.本地文件系统技术
-
1.磁盘空间布局
-
2.文件的数据管理
-
3.缓存技术
-
4.快照与克隆技术
-
5.日志技术
-
6.权限管理
-
7.配额管理
-
8.文件锁的原理
-
9.拓展属性与ADS
二.分布式数据布局
2.1基于动态检测的数据布局
指通过检测存储集群各个节点的负载,存储容量和网络宽带等系统信息来决定新数据放置的位置.并通过节点之间心跳可以及时发现故障节点,保证在决策时剔除.
-
a.当客户端需要写入数据时,客户端首先与控制节点交互;
-
b.控制节点根据汇总的信息计算出新数据的位置,然后反馈给客户端;
-
c.客户端根据位置信息,直接与对应的数据节点交互.
2.2基于计算位置的数据布局
通过一个算法来计算文件或数据存储的具体位置.
-
a.当客户端要访问某个文件时,请求在客户端或经过的某个代理节点计算出数据的具体位置;.
-
b.然后将请求路由到该数据节点进行处理.
三.分布式数据的可靠性
3.1复制技术
通过将数据复制到多个节点的方式来实现系统的高可靠
有两种不同的模式:
-
a.基于主节点的多副本技术;
-
b.无主节点的多副本技术.
3.2纠删码技术
为了能保证高可靠,以3副本为例,需要消耗2倍的存储空间.而纠删码技术通过校验数据来保障数据可靠性的同时,只需较低的存储空间.
纠删码技术主要有三类
-
a.阵列纠删码
-
b.RS(Reed-Solomon)类纠删码
-
c.LDPC(LowDensity Parity Check Code)纠删码. 与RS编码相比,LDPC编码效率要略低,但编码和解码性能要优于RS码以及其他的纠删码,主要得益于编解码采用的相对较少并且简单的异或操作。
RS(Reed-Solomon)类纠删码
纠删码的算法很多,但是分布式存储通常使用的是RS(Reed-Solomon),这种算法可以提供更大的冗余数据量.
RS纠删码的基本原理是采用矩阵运算,其核心是找到一个生成矩阵(Generator Matrix),通过该矩阵与n个原始数据块进行运算,最终得到n+m个要存储的数据块.能保证丢失任意m个数据块还能恢复原始数据.
要求生成矩阵的任意n*n的子矩阵是可逆的,常见的有范德蒙德和柯西两种矩阵.
范德蒙德RS编码的特征:
-
1.最优MDS编码和最优的存储效率
-
2.灵活的编码长度和存储效率
-
3.编/解码算法基于域GF(2^w)运算,计算复杂度高
-
4.高密度编码,低IO吞吐率
柯西RS编码
主要是改善计算复杂度,将求逆矩阵的计算复杂度由O(r^3)降低到O(r^2)
3.3 运算过程
生成矩阵 * 数据块向量 = (数据块 + 校验块)向量 n
有生成矩阵上补是对角线为1的单元矩阵,因此在与遇事数据块乘法的计算结果得到的依然是原始数据块.而下部的m*n的子矩阵与原始数据块计算得到的结果为校验数据.
3.4 恢复过程
恢复的原则是保障条带数据的一致性
当出现部分数据块故障:
我们可以利用生成矩阵和剩余可用数据块来计算原始数据的过程.当出现任何小于m个数据块的故障情况下,我们仍然能够生成矩阵中找到对应的一个n*n的子矩阵 B'.
因为子矩阵B'与原始数据块的乘积为结果数据块的子集R': B' * D = R'
两边同时乘以B'^-1: B'^-1 * B' * D = R' * B'^-1
所以B'^-1 * B'消掉得到等式: D = R' * B'^-1
由于子矩阵B'可以根据生成矩阵计算得到,结果数据子集R'是已知的,因此我们可以根据两者计算出原始数据集D.
四.分布式数据一致性
由于一个数据块被放置在不同的节点上,无法保证一致性.
主要包括:
-
1.各个节点数据的一致性问题
-
2.客户端访问角度一致性的问题,如网络延迟导致更新延迟.
一般使用强一致性跟最终一致性来保证数据的一致性.不同的一致性要求跟性能也会不同,一般是一致性要求越高,性能越低.
五.设备故障与容错
大规模分布式系统中的设备总量很大,设备发生故障就会称为常态.为了应对系统随时出现的故障,分布式文件系统在设计时必须要考虑容错处理. 主要分为两方面:
1.能及时发现故障
通过检测磁盘,心跳包或服务异常来发现故障.
2.发现故障时,系统仍然可以无损地提供服务.
比如,GFS会将同一份数据放置到不同的数据节点,在出现故障磁盘甚至节点故障的情况下,仍然能够通过节点提供服务.