分布式系统

谷歌三剑客

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)

 

posted on 2024-02-27 12:46  dddddcoke  阅读(7)  评论(0编辑  收藏  举报