大规模存储
分布式的底层运行着一个大型分布式存储系统,并有一套接口,评估指标包括并行性能,容错,复制,一致性
数据分割并放到多个服务器上,并且需要一个自动化的容错系统,一种容错方式是复制,保存多个数据副本,但是副本过多也会导致消耗较多,需要有良好的一致性。
GFS文件系统,只用来处理大文件的顺序访问,重点在吞吐量上,可以使用弱一致性,因为搜索之类的服务对于数据的可靠性要求并不那么高
master中有两个表,filename - array of chunk hands,hands - list of chunks,version等信息,使用日志的方式写入磁盘。
每隔一段时间进行一次checkpoint
读写过程,read是程序直到有一个文件,和偏移量,将这两个值发给master,master从文件表中查找文件名,用便宜/64mb得到chunk,再从chunk表中得到chunk server列表,再将这个列表传回客户端
read第一步,把文件名和偏移量发给master,然后master发送chunk handle和server列表,然后客户端和chunk server之一进行通信,发送一个chunk handle和偏移,chunk server中保存了chunk的命名,找到chunk后,读取客户端想要的数据。如果数据超过了64mb,将会进行切片,然后与master进行多次通信
应用程序需要提供的是文件名和偏移量,
chunk server本质上是不同的副本,但是因为分布式的原因,他们可能有一些区别
write提供文件名和一段字节数据,数据存在buffer中,寻找最后的chunk,对与写,需要有一个primary,这个有时候会由master指定,有的时候需要自己确定
master确定首先要确定最新的副本,一般是通过版本号确定,如果没有找到这些最新的副本,master要么暂停,要么回复未知,确定了最新的副本后会选择其中一个作为primary,其他作为secondry,然后master递增版本号并将其放入磁盘中。
当master发现更高的版本号的时候,默认使用那个更高的
ACK:确认字符
版本号的目的是让master找到哪些server有最新的chunk,primer的目的是保证数据最优先处理的,这样即使是崩了,也能有一个chunk保存了新的版本号和更新。
一种保证数据接受不会中途中断的的办法,primer和secondy接受数据会写到一个临时的地方,直到所有的数据都接受完之后,primer查看chunk的末尾,确定是否有足够的位置去记录。知道所有的secondy都成功将数据保存的时候,primer返回yes,否则返回no,然后客户端再次重新追加指令,首先chunk测试偏移量对不对,不对的进行重新的添加
当primer ping不到了,master不会立即指定一个新的primer,否则,在另一段将会有两个primer,但是他们的数据却并不相同,这种情况下将会个primer设定一个租约时间,这种情况下租约时间到了之后,旧的primer将会不接受master的进一步数据,这种时候就可以重新选择新的primer了
gfs转移到强一致性需要考虑的问题,primer需要检测重复要求,secondary必须执行primer提出的请求,如果不能执行,就要将这个secondary移除,新的primer必须进行同步
标签:6.824,版本号,chunk,笔记,server,副本,master,primer From: https://www.cnblogs.com/uestc-du/p/16820032.html