李智慧 · 高并发架构实战课
李智慧
同程艺龙交通首席架构师,前 Intel & 阿里架构师,《大型网站技术架构》作者
23286 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 26 讲
李智慧 · 高并发架构实战课
15
15
1.0x
00:00/00:00
登录|注册

05 | 网盘系统设计:万亿 GB 网盘如何实现秒传与限速?

分片不均衡问题
性能问题
分片的关系数据库方案
文件长度和头部MD5值
MD5值判断
文件内容重复检测
Block服务器内线程数
并发Block服务器数目
用户付费类型
Block数据块表
File文件表
User用户表
带宽负载
QPS
存储量
流速控制
向付费用户倾斜
文件共享
断点续传
文件下载
文件上传
元数据存储优化
技术栈广泛与深入
基础设施架构师
应用系统架构师
秒传设计
限速设计
元数据库设计
数据块服务器集群
API服务器集群
对象存储方案
文件切分为Block
元数据与文件内容分离
秒传功能
数据安全性
高可用服务
高可靠存储
大流量负载
高并发访问
大数据量存储
负载指标估算
用户体验
核心功能
思考题
小结
详细设计
概要设计
非功能需求
需求分析
DBox网盘系统设计

该思维导图由 AI 生成,仅供参考

你好,我是李智慧。
网盘,又称云盘,是提供文件托管和文件上传、下载服务的网站(File hosting service)。人们通过网盘保管自己拍摄的照片、视频,通过网盘和他人共享文件,已经成为了一种习惯。我们准备开发一个自己的网盘应用系统,应用名称为“DBox”。
十几年前曾经有个段子,技术人员对老板说:您不能在公司电脑打开您家里电脑的文件,再贵的电脑也不能。事实上,随着网盘技术的成熟,段子中老板的需求已经成为现实:网盘可以自动将家里电脑的文件同步到公司电脑,老板可以在公司的电脑打开家里电脑的文件了。
网盘的主要技术挑战是海量数据的高并发读写访问用户上传的海量数据如何存储?如何避免部分用户频繁读写文件,消耗太多资源,而导致其他的用户体验不佳?我们看下 DBox 的技术架构以及如何解决这些问题。

需求分析

DBox 的核心功能是提供文件上传和下载服务。基于核心功能,DBox 需要在服务器端保存这些文件,并在下载和上传过程中实现断点续传。也就是说,如果上传或下载过程被中断了,恢复之后,还能从中断的地方重新上传或者下载,而不是从头再来。
DBox 还需要实现文件共享的需求。使用 DBox 的不同用户之间可以共享文件,一个用户上传的文件共享给其他用户后,其他用户也可以下载这个文件。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文介绍了一个名为“DBox”的网盘应用系统的设计与实现。文章首先介绍了网盘的核心功能和技术挑战,包括海量数据的高并发读写访问、存储空间、吞吐量和带宽负载的估算等。DBox实现了秒传功能,通过计算文件的MD5值和其他信息来判断文件是否已存在,从而减少存储负载和用户等待时间。文章详细讨论了DBox的需求分析、负载指标估算和非功能需求,以及概要设计和详细设计部分的关键内容。DBox采用了分片的关系数据库存储元数据表,通过限制并发Block服务器数目和限制Block服务器内的线程数来实现上传、下载速度的限制,同时实现了不重复上传的“秒传”功能。文章还掴了架构师的职责和技术栈要求,以及对网盘元数据存储采用分片的关系数据库方案的优化手段和方法。整体来说,本文深入探讨了网盘系统设计的方方面面,为读者提供了全面的技术视角和设计思路。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《李智慧 · 高并发架构实战课》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(35)

  • 最新
  • 精选
  • ABC
    老师,这个设计能对标现在大部分主流网盘设计吧?

    作者回复: 主要对标国内某度网盘。

    2022-03-21
    12
  • 瑾年
    老师,您好,请问这个业务为什么选型 Ceph 作为文件存储,而不是HDFS。选型分布式文件存储的依据可以分享下吗

    作者回复: 网盘文件以小文件为主,HDFS的设计目标是大文件。如果用HDFS,需要进行文件合并,后面短视频架构探讨这种设计方案。

    2022-03-15
    11
  • peter
    请教老师几个问题: Q1:用户数与并发数的估算。 一个500万注册用户的网站,并发数大约多少?如果业务是类似极客时间,带宽又需要多少? 怎么估算并发数和带宽啊? Q2:存储成本很高吗? 京东上的移动硬盘,价格有高有低,1TB大约300元。一亿TB的话,按照这个估算就需要大约300亿。如果再备份的话,就需要600亿。这个成本是不是太高?真实网盘,比如百度网盘,成本也是这么高吗? Q3:带宽成本很高吗? 高峰期网络带宽为160Gb/s,这个带宽一年的费用大约多少? Q4:对象存储的关键是什么?怎么体现“对象”?“ceph”是个标准还是一个具体品牌?

    作者回复: 1 专栏2后半部分讨论过估算的思路,注册用户数->在线用户数->并发用户数,根据业务场景的不同,这个数据是逐级以几十倍到几百倍的比例递减,极客时间这个场景的话,500万注册用户,并发用户大概几千吧。 并发数 * 响应数据量 = 带宽 2 用户和存储是逐渐增加的,不是一致性投入1亿TB,稳定下来,每年实际投入百亿左右即可。这个成本不高的,百度网盘会员费每年300,我们十亿用户只要10%成为付费会员,营收300亿。 4 ceph是一个开源软件

    2022-02-25
    11
  • Geek_aa780e
    请问老师,在秒传模块的设计中,用户上传之前需要计算文件的MD5,面对大文件上传的场景下,是不是会产生巨大的耗时? 能不能设计以block为单位的logic_block, physics_block,能够减少一次完整文件的计算md5耗时,并且增加重叠率。

    作者回复: 会比较耗时,所以用户端上传时应该有两个进度条,一个是上传准备进度条,一个是上传进度条。 以block为单位进行秒传,并不能解决问题,一个大文件可以秒传,那么每个block都需要判断MD5是否存在,上传下载都更耗时。

    2022-03-16
    5
  • 向东是大海
    系统设计很精妙,特别是秒传的设计!一个小建议, MD5是已退役的哈希算法,采用SHA256等现行的哈希算法可减少哈希碰撞,更加安全。

    作者回复: 谢谢建议

    2022-02-26
    5
  • 3AM
    存储不用考虑多副本嘛?

    作者回复: ceph已经实现多副本,所以网盘自己不需要考虑了

    2022-02-25
    4
  • 苏志辉
    double_md5和size是不是应该保存到Physics_File,否则没办法进行秒传比较吧

    作者回复: 是的,应该在Physics_File,我修订下设计文档。 感谢你的评审意见。

    2022-03-20
    3
  • 丫丫
    请教老师几个问题: Q1:Client 访问 Block 服务器是什么协议?Block 服务器也有API吗? Q2:Block 服务器向API服务器验证权限是否是基于“这里我们把用户权限存在了user表里“?实际过程中是否我们直接使用oauth +role base token来解决这个问题 Q3:当我实现秒传一个文件后,如果有用户想要删除这个physical file的时候,如何确保我们能够安全的删除文件? 是否在physical file里面我们要存和logical file的映射关系? Q4:如何在用户下载前确认这个文件已经上传完毕了,否则拒绝下载?也就是说我们是不是要在logical file里面加标志位?还是我们计算每个block的size和总的size比较? 谢谢老师

    作者回复: 1 Block服务器就普通的web应用,http协议,有API 2 文中的设计是检查user表,用token确实会更灵活、更低耦合一点,感谢建议 3 首先,physical文件不会在用户删除时立即删除,不管是不是有秒传关联。其次,网盘会定期清理垃圾文件,所以,physical文件需要有个引用计数器,每次有秒传关联,计数器+1,每次关联logical文件删除,计数器-1。这个关注点非常好,是关键实现细节,是架构评审要发现的要点。 4 好问题,我的想法,加标志位或者求size,操作都比较重,性能压力大。同时,从用户体验角度,我觉得文件的可见性应该以用户一次上传为单位,一次上传若干个文件,在全部上传未完成前,应该全部不可见。所以,我觉得用一个MySQL内存数据库,临时记录用户上传中的文件元数据,一次上传全部完成后,再将数据同步到MySQL元数据库。

    2022-03-13
    2
    3
  • 👽
    课后题:可以尝试根据文件md5值进行分片。因为md5是无序的,所以应该可以使分片更加平均。

    作者回复: 可是查找的时候,是按照用户和文件名查找的,用MD5分片如何完成查找呢?

    2022-03-02
    3
  • Mike
    老师,思考题方面,是不是可以对用户ID做一次hash然后分片来解决数据不均匀的问题?也不影响单用户上的查询

    作者回复: 分片就是对用户ID做hash,然后分片。因为不同用户上传文件数量不同,这样就会产生不均匀。

    2022-03-10
    1
收起评论
显示
设置
留言
35
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部