公有云是PP视频核心的文件存储服务,目前正在为苏宁云、苏宁体育等部门提供后台支撑。本文就 “swift分布式存储”、“项目架构”、 “文件上传流程”、“上传功能”四个方面进行介绍。
一、swift分布式存储
什么是swift?
Swift 最初是由 Rackspace 公司开发的高可用分布式对象存储服务,并于 2010 年贡献给 OpenStack 开源社区作为其最初的核心子项目之一,为其 Nova 子项目提供虚机镜像存储服务。Swift 构筑在比较便宜的标准硬件存储基础设施之上,无需采用 RAID(磁盘冗余阵列),通过在软件层面引入一致性散列技术和数据冗余性,牺牲一定程度的数据一致性来达到高可用性和可伸缩性,支持多租户模式、容器和对象读写操作,适合解决互联网的应用场景下非结构化数据存储问题。
-官网地址: http://docs.openstack.org/developer/swift/
-Github代码地址: https://github.com/openstack/swift
下图是swfit系统架构,细节可参考相关文档:
swift存储特点:
- 分布式对象存储: 理论上可以存任意大小,任意类型的文件。
- 极高的数据持久性。Swift具备10个9以上的数据持久性。
- 完全对称的系统架构。Swift中各节点可以完全对等,能极大地降低系统维护成本。
- 可扩展性。因为Swift是完全对称的架构,扩容只需简单地新增机器,系统会自动完成数据迁移等工作,使各存储节点重新达到平衡状态。
- 无单点故障。整个Swift集群中,也没有一个角色是单点的,并且在架构和设计上保证无单点业务是有效的。
- 简单、可依赖。SWift架构优美、代码整洁、实现易懂,不管出现任何问题,都能通过日志、阅读代码迅速解决。
- RESTful API: 资源访问路径规范, 统一http协议访问。
- 功能拓展和二次开发方便: 可以用插件的方式给swift服务添加附属组件, 方便开发人员对服务进行功能扩展以及二次开发。
- 技术栈完备:针对用户管理和鉴权, 有Keystone;针对存储服务器监控, 有Swift Recon插件;针对客户端请求监控, 有Swift Informant插件;另外,作为OpenStack项目的旗舰产品之一, Swift和Openstack技术栈的其他产品进行整合和扩展非常容易。
公有云Swift系统设计
- 使用lvs做proxy负载均衡和故障转移
- 使用udp发送到本机rsyslog收集日志
- 依照机柜划分zone
- 使用keystone认证
- 使用rsync同步ring文件
二、项目架构
公有云项目主要由 “filecenter, filecenter-tool, filecenter-hash”三个模块组成:
filecenter
公有云项目核心模块。主要功能包括: 文件的创建、上传、特征值校验,文件扩展信息管理等。同时它负责管理和调度系统内其它他模块(filecenter-hash、filecenter-tool)。
filecenter-tool
该模块主要包含一些定时任务,执行一些边缘化的任务。例如:
- 由于文件是分块上传,如果文件没有上传完成,则删除一个月之前的分块记录。
- 将文件的审核信息载入redis缓存, 供之后查询管理。
filecenter-hash
通过MQ接受filecenter派发的任务: 从swift下载文件流计算特征值,并将结果用MQ发送回filecenter。
三、文件上传流程
1. 获取上传令牌: 用于后去上传操作中校验请求合法性
2. 获取文件ID: 用户提交文件信息, 公有云生成并返回文件的ID
3. 用户获取分段上传地址
4. 用户按分段地址上传分段到swift,swift在接收分段文件的同时验证每个分段的MD5值, 确保接收到的分段的有效性
5. 每个分段上传完成, 汇报公有云
6.公有云filecenter判断文件上传完毕,异步提交文件清单及通知特征值计算
四、上传功能
基于上述核心上传流程,公有云还实现了“秒传”,“断点续传”,“并发上传”等功能。
秒传
公有云利用独创的ppfeature作为上传文件的唯一标识, 其特点为客户端可以快速计算获取; 当上传的文件ppfeature和库文件重叠时, 判定为已存在文件, 走秒传流程.
断点续传
公有云利用分段缓存的机制实现断点续传; 当上传未完成文件时, 系统返回剩余分段地址给客户端。
并发上传
公有云利用分段缓存的机制实现并发上传:不同客户端可以同时上传同一文件, 并且各自获取不同的分段地址, 从而实现无重复接力上传。
原文地址:http://blog.51cto.com/13662240/2153669