背景
从上图可以看到我们前期文件上传的技术架构,各应用都需要mount到文件服务器进行文件的相关管理、文件管理不便,所以这样进行文件上传就会带来以下几个问题:
增加运维人员工作量
由于文件上传是由个应用方来实现,所以有的应用方可能并没有对文件进行删除,移动的权限,所以需要运维人员来进行操作,增加了运维人员的工作量。
文件无法实现统一管控
上传的文件大小,类型,访问权限都是由各应用来管控,所以无法实现统一的管控。
大文件,批量上传重复工作
像大文件,批量文件上传操作是需要客户端与服务端共同来协调进行的,所以此类文件操作都会存在各个应用重复建设的情况。
文件网关技术架构
所以针对以上提出的问题,便有了文件网关这个项目,将文件上传移动等操作进行服务化,提供统一的接口。
文件网关支持两种文件通道(本地存储,七牛云存储)的方式来进行文件管理,同时可以使用七牛提供的CDN服务,加速文件的访问速度。以下是文件网关实现的几个功能特点:
数据容灾
当七牛不可用时,文件网关会记录相关文件操作事件,在七牛恢复时将数据同步,保证数据的可用性。
断点续传
当网络出现较大波动时,大文件上传往往会失败,所以大文件要按照一定大小分块,每次请求只上传其中的一块,通过多次请求来上传。
并发上传
文件网关支持多文件的并发上传,所以高并发的上传请求不会阻塞文件网关,导致文件网关无法服务。
实现
文件上传主要有规则校验器,文件分发器两个模块来实现。
上图是文件网关的线程模型,文件上传请求首先会通过规则校验器对文件的大小,类型,文件目录等参数进行校验,校验成功后的文件通过文件分发器进行文件分发,为了保证数据一致性,文件分发是一个原子操作,保证文件同时上传至文件服务器和七牛中,当七牛不可用时,文件网关记录事件日志,定时任务会周期性的探查七牛是否恢复服务,当七牛恢复服务时,则会将文件服务器中的文件同步到七牛中。