代码拉取完成,页面将自动刷新
Cloud-Drive是一个私人文件存储系统,实现了主流文件存储系统的全部核心业务。
项目主要包括以下几个模块:
对应的代码架构设计如下:
分片上传业务可以拆分为三步:
具体流程图如下:
Dropbox创始人12年前在Youtube上的一场分享:「How We've Scaled Dropbox」
将服务宏观角度拆分为:
可以这么理解,metaserver用于与DB打交道,blockserver存储真正的物理文件。
如果后续进行服务拓展和拆分,可以首先对服务拆分成metaserver和blockserver。之后根据需要对服务进行水平拓展,例如如果存储服务用本地存储,就要考虑安全性(文件备份)、存储容量的限制。如果存储服务用第三方存储例如阿里OSS,则只需要考虑对metaserver进行水平拓展,主要是保证高可用。
解决问题:如何保证同一个文件只存储一次,同时对用户隔离文件合并的实际操作。
设计理念:
操作过程:
锁定:
identifier
进行锁定。合并与校验:
合并完成并更新数据库后,释放锁。
后续获取锁的用户需再次检查文件表(double-check)判断文件是否已存在。
去重:
real_path
更新为已存在文件的路径即可。之所以不再上游加锁主要考虑以下原因:
业务角度:对于用户2的体验非常不好,我正常上传一个文件为啥不让我上传呢?
技术角度:客户端上传速度非常不可控,如果出现客户端1网速极慢的情况下,而客户端2速度较快,仍然会出现用户体验问题。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。