【读正常流程】

(1)Clinet携带文件名从Master中获取数据位置。
(2)Clinet任意选择一份副本来进行读取(其中,也要考虑读取的位置等)。

对异常的读取:
如果读取第一个位置出错,则开始读取第二个位置……依次尝试直到读取到正确数据。这种方式增加了读取的时间。

【读流程优化】

目的是为了解决依次重试带来的性能下降。
关键:并行读取某几个CS(比如两个)。一旦一份读取完成,就发送结束读取的消息。
缺点:增加了两份IO复用。

慢节点规避
Clinet收到Master返回的文件位置后,对多个位置评价延迟时间,然后选择延迟时间最小和第二小的进行读取。

Posted in BigData

【链式写正常流程】

(1)Client端进程在Master上打开文件写(Client请求时传输文件名,Master返回数据写入位置等)。
(2)Client端以链式方式将数据写入到多个CS中。
Client将数据传递给CS1,CS1将数据传递给CS2,CS2将数据传递给CS3……最后一个节点将写入成功的结果依次向上传递给Client。

【写流程——主从模式】

链式写入方式适合:数据写入量大,但是不注重latency(延迟)的业务。
主从模式适合:数据写入频繁,要求低延迟的业务。
primary:写操作的协调者和接收者
replica:数据的接收者
流程:
(1)Client将数据传送给Primary,Primary将数据转发给另外两台Replica,等到所有数据都合并到内存的cache后,Primary返回给Client确认消息。
(2)等待Replica将所有数据都写入到物理磁盘后,Replica将发送磁盘写入成功的消息给Primary。Primary在将数据成功写入磁盘后,也将发送数据写入成功的消息给Client。
分析:
(1)Primary流量是两份流量(有两个Replica交互)。如果是数据导入量较大的业务,则不适合。
(2)在写入3个副本的情况下,只需两跳即可达到Client端(1个Primary和2个Replica一共写了3个副本,之后Replica发送一跳到Primary,Primary再发送一跳到Client,一共需要发送两跳)。从而减小了网络延迟。

【链式写入异常】

以链式写入方式为例。使用链式写入方式在写入时,如果链条中间节点写入失败,可以采取放弃写入,直接写入到失败节点后边的节点的方法来提高写入成功率。

【Seal and New】

在性能和数据安全方面进行协调以满足业务需求。
前提是Chunk的长度是不固定的(因此导致需要更多meta管理)。
(1)Seal(封闭):当发现异常节点时,先Seal当前正在写的chunk副本,不再允许写入,然后以当前最短的副本作为chunk的标准长度。
(2)New:申请一个新的chunk,在新的chunk副本继续写入数据。

Posted in BigData

【分布式存储系统的重要功能设计】

(1)读写流程
(2)QoS
(3)数据校验Checksum
(4)数据复制Replication
(5)数据平衡Rebalance
(6)垃圾回收Garbage collection
(7)数据压缩Erasure coding

Posted in BigData

【分布式存储系统例子】

(1)HDFS:Hadoop
(2)Ceph:开源的分布式文件系统
(3)Pangu:阿里云
(4)其他:GPFS、Lustre、MouseFS

Posted in BigData

【小概率事件】

(1)磁盘机器损坏:磁盘具有损坏率(5000中有每天5-6个),要对数据进行紧急复制
(2)Raid卡故障:Raid卡将数据写入磁盘
(3)网络故障:集群中的部分节点网络失联、网络丢包等
(4)电源故障:机器掉电,影响数据可靠性
(5)数据错误:数据在磁盘上可能会发生错误
(6)系统异常:多个节点时钟不一致、机器死机
(7)热点:计算热点过度抢占存储资源,热点机器需要做存储隔离,否则可能发生错误
(8)软件缺陷:用户经常重启、用户频繁切换文件、软件设计不合理、低效的用户程序

分布式存储系统应具备识别和检验数据有效性的能力,防止数据混乱。

Posted in BigData