版本比较

标识

  • 该行被添加。
  • 该行被删除。
  • 格式已经改变。

...

在当前系统中,块服务器承载了文件上传的全部压力。块服务器会把用户上传的文件分成合适的块,然后压缩并加密,块服务器还负责只上传那些被修改过的块。通过增量同步和数据压缩,可显著降低服务器的带宽占用。

高一致性要求

本系统天然需要强一致性,因为同一时间用户看到的文件必须是相同的,系统要求在元数据缓存和数据库层保证强一致性。

缓存一般使用最终一致性模型,意味着不同副本可能不一样,为了实现强一致性,必须保证以下两点:

  • 数据在缓存中和在主服务器中必须保持一致
  • 写数据库采用无缓存操作,以保证数据库中的值和元数据缓存一致。

在关系型数据库中实现强一致性相对简单,因为关系型数据性支持ACID属性。但是非关系型数据库一般不支持ACID属性,需要由软件来保证在同步时能保持强一致性。在本系统设计中,我们使用关系型数据库,以支持ACID。

元数据库

以下是一个简化的元数据库的表设计:

Image Added

包含以下组件:

用户表:包含用户的基本信息,比如用户名,邮件地址,头像等。

设备表:存储设备信息,通过device_id来发送和接收推送消息。用户可能有多个设备。

工作空间:用户的根目录。

文件:存储文件的最新信息。

文件历史:存储文件的历史记录,现有行必须是只读的,以保证文件历史的完整性。

块:存储文件块的信息。任何版本的文件都可以通过块来组装。

上传流程

Image Added本系统天然需要强一致性,因为同一时间用户看到的文件必须是相同的。