0-5 分布式文件系统
分布式文件系统 (GFS)
设计流程#
文件位置
一个 chunk 备份到三个 chunk server 中
|---------------------------|
| Master |
|---------------------------|
| filename |
| chunk-01 -> CS1, CS3, CS4 |
| chunk-02 -> CS2, CS3, CS5 |
| chunk-03 -> CS1, CS2, CS3 |
| filesize |
|---------------------------|
| ... |
| |
| |
|-------------------------------|
| CS(Chunk Server) |
|-------------------------------|
| filename chunk-xx -> offset1 |
| filename chunk-xx -> offset2 |
| ... |
|-------------------------------|
| offset1 64MB |
| offset2 64MB |
| ... |
写入
修改(非追加)
同写入
读取
读完之后在 Client 将它们合并在一起.
扩展#
Master
一般来说, 工业界 90% 是一个 Master.
双 Master
https://research.facebook.com/publications/apache-hadoop-goes-realtime-at-facebook/
多 Master
https://lamport.azurewebsites.net/pubs/paxos-simple.pdf
Chunk Server
判断磁盘是否损坏的方法, 在写入文件的时候就计算文章的 MD5 的值, 然后在读数据的时候重新计算文件的 MD5, 如果有变化, 则文件被修改了, 说明磁盘损坏.
MD5 的值直接写入到文件的最后就行, 写在一个 chunk (块) 的最后.
备份
一个文件有三个备份, 三个备份的地理位置选择: 同城2个放在一个机架上, 跨城1个.
如果一个 chunk 坏掉了, 那么就问一下 master 这个 chunk 的备份在哪里. 然后用同城的备份来恢复.
Master 使用心跳机制来确保 chunk server 可用.
写瓶颈的解决方案
Client 需要将每一个文件的每一个块都传输三次, 因为有三个备份. 这样就会导致 Client 出现写瓶颈. 解决方案是将一个文件传递给一个备份, 然后让这个备份复制到另外两个备份上.
怎么选择这个快备份的机器呢: 比较 Master 对于这个 chunk 给的三个 chunk server, 选择近的, 选择不忙的.
传输的时候 chunk server 挂了
告诉 Master, Master 会为这个文件块重新分配三个 Chunk Server.
面试#
设计一个只读的 lookup service, 后台的数据是 10 billion 个 key-value pair, 服务形式是接收用户输入的 key, 返回对应的 value. 已知每个 key 的 size 是 0.1KB, 每个 value 的 size 是 1KB. 要求系统 QPS >= 5000, latency <= 200ms.
server 性能参数: 8X CPU cores, 32G memory, 6T disk. 任意数量的 server.
硬盘询道时间大概: 10ms. 磁盘读 1MB 的数据大概需要 30ms.
在硬盘中读取一次 value 的时间为: 10ms x 1KB/1MB x 30ms == 10ms, 在磁盘中读取一次 key 的时间为 10ms x 0.1KB/1MB x 30ms == 1ms. 在内存中读取的时间忽略不计. 10 billion 的 value 的大小: 10 billion x 1KB = 10TB, 10 billion 的 key 的大小: 10 billion x 0.1KB = 1TB.
这样我们假设每一台 server 都有全部的数据, 有两个 disk. 一个 server 有 32 G 的内存, 用来存放 key -- position, position 大概需要 8bit 就可以. 这样 40 台机器就有 1TB 内存, 就够了.
作者:Kohn
出处:https://www.cnblogs.com/geraldkohn/p/17091088.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人