Step 1 - 明确需求

以下是一些可供参考的讨论点:

  1. 主要特性是什么?=> 支持上传和下载文件,文件同步,以及通知。
  2. 移动端 or web应用 or both ? => both。
  3. 支持哪些文件类型?=> 所有类型。
  4. 文件需要加密存储吗?=> 需要。
  5. 文件大小有限制吗?=> 不超过10GB。
  6. 日活多少?=>1000万。

这里以下列需求作为设计目标:

以下特性暂不支持:

除以上需求外,非功能性需求也要得到保证:

规模预估:

Step 2 - 高阶设计

从单服务器开始,逐渐将系统拓展到支持百万级用户。单服务器设计如下:

简单地使用一台Apache web服务器和MySql数据库,以及一个本地路径 drive/ 作为根目录即可实现上面的系统。在 drive/ 目录下,每个用户对应一个文件夹,每个文件夹存储对应用户的文件,文件名与用户上传的原始文件名相同。以下是这个系统的示例:

API设计

主要需要3个API:上传文件,下载文件,获取文件历史 。

1. 上传文件

包含两种上传:

以下是一个断点重传的API示例:

https://api.example.com/files/upload?uploadType=resumable

包含上传类型和本地文件数据两个参数。

一次断点重传的流程如下:

2.下载文件

示例API: https://api.example.com/files/download

参数:

示例参数:

{
    "path": "/recipes/soup/best_soup.txt"
}

3.获取文件历史记录

示例API: https://api.example.com/files/list_revisions

参数:


以上所有的API都需要支持HTTPS,以保证数据是加密传输。

多服务器设计