目的
将某一设备文件同步到远程分布式文件系统。
同步需求
- 根据用户需求同步文件数据需求将文件数据同步到用户指定的DFS系统中;
- 文件同步可能会中断所以需要同步系统保存用户进度;
- 文件同步可能会失败,所以需要同步系统需要有重试策略;
- 文件在通过过程中或同步完成后可能会被增删改,所以需要同步系统有应对文件增删改的能力;
- 涉及到的文件可能会比较多,所以文件元数据获取需要进行分页;
- 实时性要求:平衡设备和速度,暂不做要求。
文件同步
文件同步设计
模块设计
- 文件元拉取管理
- 文件拉取进度管理
- 文件元数据管理
- 文件元数据存储
- 文件上传管理
- 文件上传进度管理
- DFS(分布式文件系统)
系统设计
容错与可靠性
文件拉取可能会出错,系统负责获取异常信息并进行重试3次,重试3次失败后暂停拉取。
文件拉取进度保存可能失败,文件元数据保存需要做幂等性处理。
文件元数据可能保存失败,根据不同场景进行处理。比如:文件存储可能占用过大文件系统或内存无法存储时暂停文件拉取;
文件上传可能失败,重试3次后暂停文件上传。
文件上传进度可能失败,元数据管理尽可能保证幂等性,最终由DFS端保证幂等性。
文件拉取模块
文件拉取模块用户管理用户文件拉取。用户的文件数据可能来自数据库、文件系统或网络,所以文件拉取模块对于文件拉取需要用户实现,拉取模块提供一个接口以供用户实现自定义文件拉取器。
文件拉取进度管理
拉取模块管理拉取进度。
文件元数据管理
文件元数据管理拉取到的文件元数据,并将元数据存储到元数据存储。比如:文件数据包括文件名,文件绝对路径等等。
文件元数据存储
文件元数据存储负责存储文件元数据,可能的实现有基于内存,基于数据库(基于SQLite/MySQL/MongoDB)。
文件上传管理
文件上传管理负责文件的上传,调用用户自定义上传实现并更新文件上传进度。
文件上传进度管理
文件上传进度管理负责存储和获取文件上传进度。
接口设计
FileFetcher: 用户自定义文件拉取器
FileFetcherManager: 管理文件拉取并更新进度
FileFetcherProgress: 文件拉取进度管理
FileMetaManager: 文件元数据管理(读,写)
FileUploader:用户自定义文件上传
FileUploadManager: 用户自定义文件上传管理
FileSyncConfig: 配置文件同步系统
FileSyncBuilder: 文件同步构造
FileSync: 文件同步接口
LifeCycle: 文件同步声明周期接口定义