05 | 网盘系统设计:万亿 GB 网盘如何实现秒传与限速?
该思维导图由 AI 生成,仅供参考
需求分析
- 深入了解
- 翻译
- 解释
- 总结
本文介绍了一个名为“DBox”的网盘应用系统的设计与实现。文章首先介绍了网盘的核心功能和技术挑战,包括海量数据的高并发读写访问、存储空间、吞吐量和带宽负载的估算等。DBox实现了秒传功能,通过计算文件的MD5值和其他信息来判断文件是否已存在,从而减少存储负载和用户等待时间。文章详细讨论了DBox的需求分析、负载指标估算和非功能需求,以及概要设计和详细设计部分的关键内容。DBox采用了分片的关系数据库存储元数据表,通过限制并发Block服务器数目和限制Block服务器内的线程数来实现上传、下载速度的限制,同时实现了不重复上传的“秒传”功能。文章还掴了架构师的职责和技术栈要求,以及对网盘元数据存储采用分片的关系数据库方案的优化手段和方法。整体来说,本文深入探讨了网盘系统设计的方方面面,为读者提供了全面的技术视角和设计思路。
《李智慧 · 高并发架构实战课》,新⼈⾸单¥59
全部留言(35)
- 最新
- 精选
- ABC老师,这个设计能对标现在大部分主流网盘设计吧?
作者回复: 主要对标国内某度网盘。
2022-03-2112 - 瑾年老师,您好,请问这个业务为什么选型 Ceph 作为文件存储,而不是HDFS。选型分布式文件存储的依据可以分享下吗
作者回复: 网盘文件以小文件为主,HDFS的设计目标是大文件。如果用HDFS,需要进行文件合并,后面短视频架构探讨这种设计方案。
2022-03-1511 - 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-2511 - Geek_aa780e请问老师,在秒传模块的设计中,用户上传之前需要计算文件的MD5,面对大文件上传的场景下,是不是会产生巨大的耗时? 能不能设计以block为单位的logic_block, physics_block,能够减少一次完整文件的计算md5耗时,并且增加重叠率。
作者回复: 会比较耗时,所以用户端上传时应该有两个进度条,一个是上传准备进度条,一个是上传进度条。 以block为单位进行秒传,并不能解决问题,一个大文件可以秒传,那么每个block都需要判断MD5是否存在,上传下载都更耗时。
2022-03-165 - 向东是大海系统设计很精妙,特别是秒传的设计!一个小建议, MD5是已退役的哈希算法,采用SHA256等现行的哈希算法可减少哈希碰撞,更加安全。
作者回复: 谢谢建议
2022-02-265 - 3AM存储不用考虑多副本嘛?
作者回复: ceph已经实现多副本,所以网盘自己不需要考虑了
2022-02-254 - 苏志辉double_md5和size是不是应该保存到Physics_File,否则没办法进行秒传比较吧
作者回复: 是的,应该在Physics_File,我修订下设计文档。 感谢你的评审意见。
2022-03-203 - 丫丫请教老师几个问题: 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-1323 - 👽课后题:可以尝试根据文件md5值进行分片。因为md5是无序的,所以应该可以使分片更加平均。
作者回复: 可是查找的时候,是按照用户和文件名查找的,用MD5分片如何完成查找呢?
2022-03-023 - Mike老师,思考题方面,是不是可以对用户ID做一次hash然后分片来解决数据不均匀的问题?也不影响单用户上的查询
作者回复: 分片就是对用户ID做hash,然后分片。因为不同用户上传文件数量不同,这样就会产生不均匀。
2022-03-101