图片文件分布式存储解决方案
一、 背景
ShareSDK每天都上传大量的图片,原有的图片存储采用NFS挂载磁盘的形式。这种方式的缺点很明显:(1)不便于管理.(2)当挂载的磁盘过多时,也会有很大的性能问题。随着图片数量越来越大,急需一种分布式图片存储方案,替代当前的存储方案。调研了图片存储的需求之后,得出以下结论:
(1)图片需要以posix标准存储,便于后期维护和图片处理。
(2)磁盘能够动态增加。
(3)不需要备份和冗余。
(4)存储服务必须有负载均衡。
二、方案调研
基于以上需求,开始调研市面上流行的文件存储解决方案。
1,FastDFS
FastDFS是一个高性能的轻量级开源文件分布式存储系统,主要C语言完成,并提供Java api。主要功能包括:文件存储,文件同步,负载均衡。主要组件:
(1)Track Server:主要负责存储协调和负载均衡作用,管理所有的Storage Server。
(2)Storage Server:存储服务,提供文件存储和备份。以group为单位,每个group可以有多个Storage Server,相同group内数据,互为备份。
(3)Client:客户端,首先请求Track Server,获取要操作的Storage Server,最后操作Storage Server。
架构图:
2,TFS
TFS是淘宝针对海量非结构化数据存储设计的分布式系统,构筑在普通的Linux机器集群上,可为外部提供高可靠和高并发的存储访问。高可扩展、高可用、高性能、面向互联网服务。这是TFS官网的介绍。适用场景为海量小文件存储。为了减少文件句柄压力,TFS会把多个文件存储为一个大文件(Block)。每个Block在集群内有唯一编号,这个编号由nameserver分配,而DataServer实际存储Block。一个TFS集群有两个NameServer和多个DataServer组成。
架构图:
通过调研以上两种分布式文件存储系统,都很难满足ShareSDK的需求。因此决定开发MobDFS系统。
三、 MobDFS介绍
MobDFS参考FastDFS的架构,主要组件为NameServer和DataServer,实现了文件的posix标准存储,充分利用nginx的特性,实现文件高速下载。架构图如下:
MobDFS根据group进行文件负载均衡,每个DataServer对应一个group,配置信息保存在zookeeper中。DataServer上线和下线时,自动通知NameServer并同步zookeeper配置。
文件上传时首先请求NameServer,NameServer根据每个DataServer的磁盘使用情况进行负载均衡,给客户端返回要上传到的具体group。客户端再次请求Router,并同时上传文件。Router根据group,反向代理请求到具体的DataServer服务,对应的DataServer处理具体的上传请求。时序图如下:
文件下载时请求到Router,Router根据group反向代理请求到具体的DataServer服务,DataServer上面的nginx根据group映射到磁盘具体路径,文件下载完成。时序图如下:
文件的灾备使用raid5方式备份,当需要更换机器时,只需要更新zookeeper中的配置文件和对应的nginx配置即可。
四、总结
MobDFS使用group组对文件负载均衡,文件直接上传到具体的DataServer,减少了入口的压力,同时也减少不必要的文件传输同步,能够极大的节省带宽压力。文件下载时,利用nginx直接访问磁盘,能够极大的提高文件下载速度。
文 / Mob 温东征
ShareSDK 轻松实现社会化功能,以其强大的 App 社交分享功能深受开发者熟知和好评;
SMSSDK 可快速集成短信验证功能,帮助开发者打通手机通讯录好友的社交圈;
MobLink 打破了 App 孤岛,实现了 Web 与 App 的无缝链接,新用户在首次打开 App 时,大大提高用户转化率;
Mob统计分析 用数据驱动产品,精准化行为分析 + 多维数据模型 + 匹配全网标签 + 垂直行业分析顾问;
MobPush 快速集成推送服务,应对多样化推送场景;
BBSSDK 是 Discuz 论坛移动化解决方案,同步 Discuz 论坛数据实现论坛移动化;
ShareREC 手游录像分享则是 ShareSDK 图文分享的延伸,可为手游实现边玩边录的功能,以此提升玩家黏度并有效促进推广;
MobAPI 为开发者提供各种所需的原始数据及稳定的 API SERVICE,也免去了自己收集数据的繁琐步骤;
MobPay 多种主流支付渠道可一键接入,满足企业多样化需求;
ShopSDK 2小时快速搭建您的商城系统,商品管理 - 订单交易 - 售后退款 - 整套解决方案,丰富您APP的应用场景;
MobIM 为开发者提供即时通讯的消息通道服务,专注于保障通讯的安全稳定可靠,支持开发者使用App的自有用户系统,或第三方用户系统;
App工厂 全新App制作解决方案 ,可组合几十种不同种类的App满足电商、生活服务、教育、资讯、社交等多个行业的需求;
截止 2017 年 12 月,Mob 开发者服务平台全球设备覆盖超过 76 亿,SDK下载量超过 318 万次,服务超过 36 万款移动应用。