笔记都写在ipad上啦!只能拍个图纪念一下了。
gfs.jpeg
补充
1.因为只有一个master所以只能在一个数据中心运行,理论上可以跨机房,但更复杂。
2.master 会在本地磁盘存储 log,而不是存到数据库,原因是:数据库的本质是某种 B 树或者 hash table,相比之下,追加 log 会非常高效;而且,通过在 log 中创建一些 checkpoint 点,重建状态也会更快
3.教授提到client会从最近的chunkserver获取数据。怎么判断最近呢?(google的数据中的io地址是连续的随意可以从ip地址的差异判断网络位置的远近)
4.如果一个读请求跨越了一个chunk的边界怎么办。client会通过一个库给gfs发一个rpc,这个库将这个读请求拆成两个再发给master。
5.如果写文件都请求master的话。master会成为性能瓶颈。master找到拥有该chunk的chunkserver,并给其中一个chunkserver授予租约,拥有租约的chunkserver被称为Primary,其他的叫Secondary(chunk一般有三个副本)。租约短期有效(一般为60秒),对chunk的读写都由primary负责。
6.client将追加发送到所有的chunkserver,chunkserver先将数据写到lru缓存中,一旦client确认每个chunkserver都收到了数据,client向primary发送写请求,primary会将这些操作顺序写入本地。primary写完secondary开始写,全部写完primary应答客户端。全成功才算成功。如果失败client会发送请求重试。
7.gfs不是强一致性所以失败重试后会有重复数据。
如果没看过gfs的论文还是直接看这篇吧。我这是只是单纯的学习记录。
参考:https://zhuanlan.zhihu.com/p/354450124
网友评论