以下是一些可供参考的讨论点:
这里以下列需求作为设计目标:
以下特性暂不支持:
除以上需求外,非功能性需求也要得到保证:
规模预估:
从单服务器开始,逐渐将系统拓展到支持百万级用户。单服务器设计如下:
简单地使用一台Apache web服务器和MySql数据库,以及一个本地路径 drive/ 作为根目录即可实现上面的系统。在 drive/ 目录下,每个用户对应一个文件夹,每个文件夹存储对应用户的文件,文件名与用户上传的原始文件名相同。以下是这个系统的示例:

主要需要3个API:上传文件,下载文件,获取文件历史 。
包含两种上传:
以下是一个断点重传的API示例:
https://api.example.com/files/upload?uploadType=resumable |
包含上传类型和本地文件数据两个参数。
一次断点重传的流程如下:
示例API: https://api.example.com/files/download
参数:
示例参数:
{
"path": "/recipes/soup/best_soup.txt"
} |
示例API: https://api.example.com/files/list_revisions
参数:
以上所有的API都需要支持HTTPS,以保证数据是加密传输。
与其自建服务器分片与复制,不如将数据存储交给现有的云服务商来实现,这样可以借助云服务商成熟的服务和多数据中心来保障数据安全。以Amazon S3为例,Amazon S3支持同数据中心内的数据库复制和跨数据中心的数据库复制,通过将数据在多地进行冗余备份,可以有效保证数据安全及服务可用。

除了多地备份外,以下措施也必不可少:
经过以上措施的优化后,系统设计调整如下:

当两个用户同时修改了同一个文件时,冲突发生。这里我们以第一次修改提交为准,第二次提交被视为冲突,如下:

当用户2收到冲突通知时,服务器会一并返回服务器上最新的版本,由用户2自己来解决冲突。