分布式文件上传服务架构设计
来源:互联网 发布:澳大利亚歧视知乎 编辑:程序博客网 时间:2024/06/04 18:04
背景
由于某业务需要,需要对文件上传服务进行一次架构调整,初步考虑几点:
- 水平扩展性:上传worker节点按需弹性部署
- 负载均衡:根据上传worker节点的状态随时均衡调度
- 高可用性:无单点问题,快速替换故障点
- 支持断点续传:即需要提供分片上传接口
- 支持秒传:对于上传过的相同文件直接响应完成
- 就近原则:通过离用户最近的区域节点上传文件,通过CDN节点下载文件
初步架构逻辑
架构图如图所示:
重点功能模块说明:
- 上传调度服务
(1)根据用户申请上传的文件判断是否秒传;
(2)根据用户所在ip及worker节点状态返回上传接口地址。 - 文件上传模块
(1) 接收用户上传的文件数据(文件/分片);
(2) 合并分片/校验文件hash/写入临时存储;
(3) 定期上报worker节点负载/健康状态;
(4) 将已上传文件推送到待转移队列;
(5) 更新数据库文件表信息。 - 文件转移服务
(1) 将文件从临时存储转移到永久存储文件服务中;
(2) 更新数据库文件表信息。
技术点说明:
- 为什么需要临时存储和永久存储两级文件存储?
由于永久存储需要做文件校验和副本策略的步骤比较多,并且可能会跨机房传输;如果这样直接写入,用户可能会等待比较长的时间。
儿用户上传大文件时通过就近的worker节点上传,并持续append到就近的存储服务后,这个时候用户就可以下载了,用户体验较好。 - 文件转移服务的作用
既然有了两级存储服务,那就需要开启一个文件转移服务来异步将文件进行持续转移,并且根据需要删除临时存储内的文件;因此临时存储容量可以维持在比较稳定的规模。 - 数据库用于存放文件存储位置
文件未转移时,存储的地址是临时存储中的路径;
文件转以后,存储的地址是永久存储中的路径;
这样文件下载服务总是有效的。 - 关于分块合并
这里需要一整套接口来保证分块上传的完整性和冲突解决,之后再具体描述。 - 关于hash计算
每个分片算一次hash,并且最后有序的串起来算一次hash,最后作文件完整性校验。 - 关于监控和故障修复
还需要考虑完善监控完备性,快速报警及修复/替换故障节点。
考虑到无状态服务情况,客户端需保留几个目标host,以备通讯失败时能及时尝试连接到其他节点。
阅读全文
1 0
- 分布式文件上传服务架构设计
- 分布式服务架构:原理、设计与实践
- 《分布式服务架构原理设计与实战》第一章分布式微服务架构设计原理笔记
- 分布式架构学习之:020--服务接口设计原则
- 荐书:《分布式服务架构:原理、设计与实战》
- 分布式、服务化的ERP系统架构设计
- 分布式、服务化的ERP系统架构设计
- 分布式、服务化的ERP系统架构设计
- 分布式web服务架构
- Java 分布式服务架构
- 分布式服务架构和面向服务架构
- 《分布式服务架构原理设计与实战》第2章分布式系统一致性的问题笔记
- 网关分布式架构设计
- SOA分布式架构设计
- 分布式系统架构设计
- fastdfs分布式架构设计
- 分布式爬虫架构设计
- 大型分布式网站架构设计与实践 第一章《面向服务的体系架构(SOA)》
- SQL索引查找与索引扫描
- mysql的sql查询语句含有中文,rs.next()就false的解决办法
- gulp学习心得
- YAWL使用教程之实例介绍
- block wx:if
- 分布式文件上传服务架构设计
- 基础巩固--理解方法调用
- 插入排序
- 微信小程序包含文件
- C++ 变量及常量
- 车身设计
- 电路学习与设计
- 设计模式-工厂方法模式
- phpcms中在头部title中的输出有自己的格式