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
      • 何时检查:读出前查
  • 面试问题: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开始)
          

  

 

posted on 2020-06-15 10:19  chrayn  阅读(129)  评论(0)    收藏  举报