分布式系统
谷歌三剑客
Distributed File System(Google FIle System)
如何有效存储数据? Nosql底层需要一个文件系统
Bigtable = Nosql database
怎么链接底层存储和上层数据
Map Reduce
怎么快速处理数据
GFS C++ Google
HDFS Java Yahoo
scenario
用户写入一个文件,用户读取一个文件。 >1000T
多台机器存储
service
client + server
社会主义: client找任何一个机器,平级
peer 2 peer: 优势,一台机器挂了还可以工作。劣势,多台机器需要经常通信保持数据一致
资本主义: master + slave ✅
优势,simple design,数据容易一直。劣势, 单master挂(重启)
storage
大文件存在哪?硬盘,内存存不下
怎么设计GFS?
metadata访问常常多余内容的访问。
✅文件metadata....(反应速度快) + 实际内容... or 穿插(找metadata寻轨时间长)
机械硬盘,磁头到某一轨道需要寻轨时间
文件内容1+2+3... or ✅文件内容1-1 + 1-2 + 2-1 + 2-2 + 1-3... (方便修改,顺次写)
频繁修改文件,要删掉重新找位置。
metadata
file info: name = xx.mp4, createdTime = xxx, size = xx, index block11 ->diskOffset1, block12 -> diskOffset2...
blocks 1block = 4kb = 4096 bytes
100T文件,block数量太多了
增加block大小 1chunk = 64M = 64*1024k (4k -> 64k)
pros: reduce size of metadata, cons: waste space for small files
10P文件
1台服务器最多插10个硬盘, 10 * 10T = 100T = 0.1P
100台
master - slave通讯模式 one master + many slave servers(chunk servers)
master:
meta data: name, createTime, size
index: chunk01 -> cs5 chunk02 -> cs5 chunk03 -> cs5 ...(节省master存储空间)
slaveServer5:
index: xx.mp4-chunk-01-offset3, xx.mp4-chunk-01-offset5 (节省通讯成本)
offset1.. offset3: xx.mp4-chunck-01
master存储10P文件的metadata需要多少容量: 1 chunk = 64MB needs 64B 的meta data, 10 P needs 10G meta data(内存存的下)
How to write a file?
一次写入 or ✅拆分成多份多次写入(写入过程出错,可以重新传一下一小部分)
每一份传输大小单位是chunk
chunk怎么写入server?
直接写到chunk server(master变成瓶颈,都传master) or ✅先和master沟通,分配chunk server,再写入chunk server
client to master 1.write file_name = xx.mp4, chunk index = 1
master to client 2. assign chunk server_locations=US, CS1
client to CS1 3. transfer data = gfs/home/xx.mp4-01-of-09
chunk server1 to clientr and master 4. write finish
修改xx.mp4怎么办
chunk变大
chunk变小
一次写入多次读取,先删掉文件,重新把整个写一遍
How to read from a file
client to master 1. filename=/gfs/home/xx.mp4
master to client 2. return a chunk list
client to CS1 3. read /gfs/home/xx.mpt-00-of-09 in CS1
CS1 to client 4. return data /gfs/home/xx.mpt-00-of-09
scale
单master够不够, 90%都系统都采用单master
How to identify whether a chunk on the disk is broken?
check sum
写入一块chunk顺便写check sum
读入这一块数据检查,重新读数据并且计算现在都checksum,比较
周期性检查
How to avoid chunk data loss when a chunk server is down/fail?
replica做备份
存三份,两个备份相对比较近(一个机架),另一个较远
ask master for help
chunk03->CS3,CS5,CS4
How to find whether a Chunk Server is down?
heart beat chunk servers -> master
How to solve client bottle neck?
client -> CS1 队长 -> CS2 (内网传快)
-> CS3
怎么选队长? 1.找距离最近的(快) 2.找现在不干活的(平衡traffic)