系统核心功能:上传文件和下载文件
背景知识:
- 一个文件的数据主要由两部分组成:元数据和具体的文件数据
- 元数据描述了文件的基本信息,如文件名称,大小,格式.
- 元数据的访问频率远高于具体的文件数据,我们会查看文件夹里的内容,但不会每个文件都打开,因此元数据和文件数据一般是分开存储的
核心架构
- one master + chunk servers
- master 存储文件元信息和文件chunk所在服务器信息
- chunkserver存储具体的文件chunk
业务流程
上传文件
前置动作:客户端需要先将大文件分片
- 客户端发送文件名(文件ID)和chunk编码
- 服务端返回该chunk应该写在哪个哪台服务器上
- 客户端传上传具体的分片数据
- 返回写入成功
下载文件
- 客户端发送要请求的文件
- 返回chunk列表,列表记录chunk与具体文件服务器的映射关系
- 请求分片数据
- 返回分片数据
Scale
只有一个master,万一挂了怎么办?
- 重启master或重新选主
- 多master可以增加系统的可靠性,但是在大部分主从系统中,还是使用单master.
- 单master故障的频率并不高
- 多master要解决数据同步和数据一致性的问题,系统复杂度比单master要高得多
如何校验文件是否损坏
- 计算每个chunk的哈希值(chunkSum)
- 写入chunk时,顺便写入chunkSum
- 读取chunk时,重新计算chunkSum并与存储的chunkSum进行比较
chunk备份
为了提高系统可靠性,可以考虑将chunk备份在多台机器上.