干货 | 公有云存储技术分享_第1张图片

公有云是PP视频核心的文件存储服务,目前正在为苏宁云、苏宁体育等部门提供后台支撑。本文就  “swift分布式存储”、“项目架构”、 “文件上传流程”、“上传功能”四个方面进行介绍。


一、swift分布式存储


什么是swift?


Swift 最初是由 Rackspace 公司开发的高可用分布式对象存储服务,并于 2010 年贡献给 OpenStack 开源社区作为其最初的核心子项目之一,为其 Nova 子项目提供虚机镜像存储服务。Swift 构筑在比较便宜的标准硬件存储基础设施之上,无需采用 RAID(磁盘冗余阵列),通过在软件层面引入一致性散列技术和数据冗余性,牺牲一定程度的数据一致性来达到高可用性和可伸缩性,支持多租户模式、容器和对象读写操作,适合解决互联网的应用场景下非结构化数据存储问题。


-官网地址: http://docs.openstack.org/developer/swift/

-Github代码地址: https://github.com/openstack/swift

 

下图是swfit系统架构,细节可参考相关文档:

干货 | 公有云存储技术分享_第2张图片

swift存储特点:


  1. 分布式对象存储: 理论上可以存任意大小,任意类型的文件。

  2. 极高的数据持久性。Swift具备10个9以上的数据持久性。

  3. 完全对称的系统架构。Swift中各节点可以完全对等,能极大地降低系统维护成本。

  4. 可扩展性。因为Swift是完全对称的架构,扩容只需简单地新增机器,系统会自动完成数据迁移等工作,使各存储节点重新达到平衡状态。

  5. 无单点故障。整个Swift集群中,也没有一个角色是单点的,并且在架构和设计上保证无单点业务是有效的。

  6. 简单、可依赖。SWift架构优美、代码整洁、实现易懂,不管出现任何问题,都能通过日志、阅读代码迅速解决。

  7. RESTful API: 资源访问路径规范, 统一http协议访问。

  8. 功能拓展和二次开发方便: 可以用插件的方式给swift服务添加附属组件, 方便开发人员对服务进行功能扩展以及二次开发。

  9. 技术栈完备:针对用户管理和鉴权, 有Keystone;针对存储服务器监控, 有Swift Recon插件;针对客户端请求监控, 有Swift Informant插件;另外,作为OpenStack项目的旗舰产品之一, Swift和Openstack技术栈的其他产品进行整合和扩展非常容易。


公有云Swift系统设计


  1. 使用lvs做proxy负载均衡和故障转移

  2. 使用udp发送到本机rsyslog收集日志

  3. 依照机柜划分zone

  4. 使用keystone认证

  5. 使用rsync同步ring文件


二、项目架构


公有云项目主要由 “filecenter, filecenter-tool, filecenter-hash”三个模块组成:


2.jpg

filecenter


公有云项目核心模块。主要功能包括: 文件的创建、上传、特征值校验,文件扩展信息管理等。同时它负责管理和调度系统内其它他模块(filecenter-hash、filecenter-tool)。


filecenter-tool


该模块主要包含一些定时任务,执行一些边缘化的任务。例如:


  • 由于文件是分块上传,如果文件没有上传完成,则删除一个月之前的分块记录。

  • 将文件的审核信息载入redis缓存, 供之后查询管理。


filecenter-hash


通过MQ接受filecenter派发的任务: 从swift下载文件流计算特征值,并将结果用MQ发送回filecenter。

干货 | 公有云存储技术分享_第3张图片

三、文件上传流程


1. 获取上传令牌: 用于后去上传操作中校验请求合法性

2. 获取文件ID: 用户提交文件信息, 公有云生成并返回文件的ID

3. 用户获取分段上传地址

4. 用户按分段地址上传分段到swift,swift在接收分段文件的同时验证每个分段的MD5值, 确保接收到的分段的有效性

5. 每个分段上传完成, 汇报公有云

6.公有云filecenter判断文件上传完毕,异步提交文件清单及通知特征值计算


四、上传功能


基于上述核心上传流程,公有云还实现了“秒传”,“断点续传”,“并发上传”等功能。


秒传


公有云利用独创的ppfeature作为上传文件的唯一标识, 其特点为客户端可以快速计算获取; 当上传的文件ppfeature和库文件重叠时, 判定为已存在文件, 走秒传流程.


断点续传


公有云利用分段缓存的机制实现断点续传; 当上传未完成文件时, 系统返回剩余分段地址给客户端。


并发上传

公有云利用分段缓存的机制实现并发上传:不同客户端可以同时上传同一文件, 并且各自获取不同的分段地址, 从而实现无重复接力上传。