DFS
如何选取架构模型及基本元素
- peer 2 peer(FB的Cassandra)
- 稳定性好
- 机器间通信cost是大的,而且需要经常通信保持数据一致性
- client过来读写,不知道是sharding后哪个机器, 一开始通信的机器就得和其他机器数据交换
- Master-Slave
- 非DB 的MS模型,这里的master不存数据
- DB的MS, Slave是一种backup
- 存硬盘存内存
- 内存和硬盘价格差了1000倍
- 存数据库还是存file
- 数据库适合存structure的数据,而非文件
如何存储数据
- 面试问题:How to save a file in one machine? 操作系统如何存,100G大文件怎么存
- matadata是经常被查看,Disk有专门的matadata区
- 文件存储不是一大块连续的,文件删除后会产生碎片;
- 分开存储,有一组指针指向每一个存储单元的地址(存储在metadata里, 叫index)
- 1 block = 1024 Byte = 1 KB
- 面试问题:How to save a large file in one machine? 100T大文件怎么存
- block 还合适吗?100*1000*1000*1000K,要存这么多指针,不合适
- 1 chunk = 64M, 小文件浪费(缺点), 但meta减少了(优点)
- 面试问题:How to save extra-large file in several machine? 10P(万兆)

-
-
-
-
-
-
- Master don't record diskOffset of a chuck,reduce matadata storage in master
- alloctate Diskofferset query to slave server, reduce master work load
- reduce the traffic betwen master & ChunkServer (chunckOffset 改变不需要通知master
- 1 chunk = 64MB needs 64B(经验值) 10PB的文件需要 10G的meta(32G 64G cpu可以放内存)
-
-
-
-
-
如何写入数据
- 一次写入还是裁成多分多次写入?(迅雷断点续传)
- 存按chunk(64MB)也按这个拆
- master拆还是slave拆(都不是, 是client拆)

如何修改数据
- GFS中其实没有修改这个概念,WORM(write once read many)
- 修改就是把整个文件删了,重新写入
理解:
- 方法1:直接locate要修改的chunk, 改之。 不可,数据增加了,会抹掉后面chunk原本的数据
- 方法2:load到cpu,改完了在覆盖原来的chunk。做无用功,慢!已经已知有新的了,为啥还有load老的进CPU,改老的,再存回
- 方法3:到别的available的chunk重新写。 可以,但是做的更绝,是整个文件重写
如何读数据
-
拆成多块,多次读
- client从master拿到都要去那些Chunk Server去拿
Scale
Single Master Failure
- 工业界90%单master (能承受挂掉重启的,single master 足够了)
- 多Master同步是一件很难麻烦(同步是为了一台挂掉另一台可以顶替),Paxos最多10-20,30以上延时会很厉害
- Double Master Paper: Apache Hadoop Goes Realtime at Facebook
- Multi Master Paper: Paxos Algorithm
Chunk Server Service Failure Detect & Recover
- 面试问题:How to idetify whether a chunk on the dixt is broken?
- CheckSum
- CheckSum大小:4Byte 1P文件需要64MB
- 存哪?何时存? 每个Chunk末尾,写入Chunk时查,真实拆分文件每块小于64MB
- 何时检查:读出前查
- CheckSum
- 面试问题:How to avoid ChunkServer fail/dwon
- Replica(热备份,3个,物理地址2个近,同一个机房不同机架, 另一个远,防止地震火灾)
- 面试问题:Master 如何选择Chunk Server?
- 最近写入较少的(LRU,least recently used)
- Disk存储比较低的
- 面试问题:How to recover a broken Chunk
- 找Master问Replica在哪里,删坏的,重新写入备份的好的
- 面试问题:How detect Chunk Sever is down
- Chunk Server 发heartbeat 给master
- 面试问题:How solve client bottleneck(client 给三Chunk Server)
- client 写给你个Chunk Server, 这个Chunk Server 做replica
- 有一个Server 坏了,speak loud,返回fail给client ,重新来一遍(从client 和master要ChunkServer开始)
浙公网安备 33010602011771号