目的
本文通过对比当前主流的几种分布式存储方案(Ceph,TFS,FastDFS,MogileFS,MooseFS,GlusterFS等),让你知道他们的优缺点,便于你根据使用场景选择合适的方案。
系统整体对比
对比说明/文件系统 | TFS | FastDFS | MogileFS | MooseFS | GlusterFS | Ceph |
---|---|---|---|---|---|---|
开发语言 | C++ | C | Perl | C | C | C++ |
开源协议 | GPL V2 | GPL V3 | GPL | GPL V3 | GPL V3 | LGPL |
数据存储方式 | 块 | 文件/Trunk | 文件 | 块 | 文件/块 | 对象/文件/块 |
集群节点通信协议 | 私有协议(TCP) | 私有协议(TCP) | HTTP | 私有协议(TCP) | 私有协议(TCP)/ RDAM(远程直接访问内存) | 私有协议(TCP) |
专用元数据存储点 | 占用NS | 无 | 占用DB | 占用MFS | 无 | 占用MDS |
在线扩容 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 |
冗余备份 | 支持 | 支持 | - | 支持 | 支持 | 支持 |
单点故障 | 存在 | 不存在 | 存在 | 存在 | 不存在 | 存在 |
跨集群同步 | 支持 | 部分支持 | - | - | 支持 | 不适用 |
易用性 | 安装复杂,官方文档少 | 安装简单,社区相对活跃 | - | 安装简单,官方文档多 | 安装简单,官方文档专业化 | 安装简单,官方文档专业化 |
适用场景 | 跨集群的小文件 | 单集群的中小文件 | - | 单集群的大中文件 | 跨集群云存储 | 单集群的大中小文件 |
开源协议说明
1 | GPL:不允许修改后和衍生的代码做为闭源的商业软件发布和销售,修改后该软件产品必须也采用GPL协议; |
TFS
TFS(Taobao File System)是由淘宝开发的一个分布式文件系统,其内部经过特殊的优化处理,适用于海量的小文件存储,目前已经对外开源;
TFS采用自有的文件系统格式存储,因此需要专用的API接口去访问,目前官方提供的客户端版本有:C++/JAVA/PHP。
- 特性
1 | 1)在TFS文件系统中,NameServer负责管理文件元数据,通过HA机制实现主备热切换,由于所有元数据都是在内存中,其处理效率非常高效,系统架构也非常简单,管理也很方便; |
- 优点
1 | 1)针对小文件量身定做,随机IO性能比较高; |
- 缺点
1 | 1)TFS只对小文件做优化,不适合大文件的存储; |
- 应用场景
1 | 1)多集群部署的应用 |
源代码路径:http://code.taobao.org/p/tfs/src/
参考
http://rdc.taobao.com/blog/cs/?p=128
http://elf8848.iteye.com/blog/1724423
http://baike.baidu.com/view/1030880.htm
http://blog.yunnotes.net/index.php/install_document_for_tfs/
FastDFS
FastDFS是国人开发的一款分布式文件系统,目前社区比较活跃。如上图所示系统中存在三种节点:Client、Tracker、Storage,在底层存储上通过逻辑的分组概念,使得通过在同组内配置多个Storage,从而实现软RAID10,提升并发IO的性能、简单负载均衡及数据的冗余备份;同时通过线性的添加新的逻辑存储组,从容实现存储容量的线性扩容。
文件下载上,除了支持通过API方式,目前还提供了apache和nginx的插件支持,同时也可以不使用对应的插件,直接以Web静态资源方式对外提供下载。
目前FastDFS(V4.x)代码量大概6w多行,内部的网络模型使用比较成熟的libevent三方库,具备高并发的处理能力。
- 特性
1 | 1)在上述介绍中Tracker服务器是整个系统的核心枢纽,其完成了访问调度(负载均衡),监控管理Storage服务器,由此可见Tracker的作用至关重要,也就增加了系统的单点故障,为此FastDFS支持多个备用的Tracker,虽然实际测试发现备用Tracker运行不是非常完美,但还是能保证系统可用。 |
- 优点
1 | 1)系统无需支持POSIX(可移植操作系统),降低了系统的复杂度,处理效率更高 |
- 缺点
1 | 1)不支持断点续传,对大文件将是噩梦(FastDFS不适合大文件存储) |
- 应用场景
1 | 1)单集群部署的应用 |
源码路径:https://github.com/happyfish100/fastdfs
参考
https://code.google.com/p/fastdfs/
http://bbs.chinaunix.net/forum-240-1.html
http://portal.ucweb.local/docz/spec/platform/datastore/fastdfs
MooseFS
MooseFS是一个高可用的故障容错分布式文件系统,它支持通过FUSE方式将文件挂载操作,同时其提供的web管理界面非常方便查看当前的文件存储状态。
- 特性
1 | 1)从下图中我们可以看到MooseFS文件系统由四部分组成:Managing Server 、Data Server 、Metadata Backup Server 及Client |
- 元数据服务器(master):负责各个数据存储服务器的管理,文件读写调度,文件空间回收以及恢复
- 元数据日志服务器(metalogger):负责备份master服务器的变化日志文件,以便于在master server出问题的时候接替其进行工作
- 数据存储服务器(chunkserver):数据实际存储的地方,由多个物理服务器组成,负责连接管理服务器,听从管理服务器调度,提供存储空间,并为客户提供数据传输;多节点拷贝;在数据存储目录,看不见实际的数据
- 优点
1 | 1)部署安装非常简单,管理方便 |
- 缺点
1 | 1)存在单点性能瓶颈及单点故障 |
- 应用场景
1 | 1)单集群部署的应用 |
GlusterFS
GlusterFS是Red Hat旗下的一款开源分布式文件系统,它具备高扩展、高可用及高性能等特性,由于其无元数据服务器的设计,使其真正实现了线性的扩展能力,使存储总容量可 轻松达到PB级别,支持数千客户端并发访问;对跨集群,其强大的Geo-Replication可以实现集群间数据镜像,而且是支持链式复制,这非常适用 于垮集群的应用场景
- 特性
1 | 1)目前GlusterFS支持FUSE方式挂载,可以通过标准的NFS/SMB/CIFS协议像访问本体文件一样访问文件系统,同时其也支持HTTP/FTP/GlusterFS访问,同时最新版本支持接入Amazon的AWS系统 |
- 优点
1 | 1)系统支持POSIX(可移植操作系统),支持FUSE挂载通过多种协议访问,通用性比较高 |
- 缺点
1 | 1)通用性越强,其跨越的层次就越多,影响其IO处理效率 |
- 应用场景
1 | 1)多集群部署的应用 |
- 术语:
1 | brick:分配到卷上的文件系统块; |
参考
Ceph
Ceph是一个可以按对象/块/文件方式存储的开源分布式文件系统,其设计之初,就将单点故障作为首先要解决的问题,因此该系统具备高可用性、高性能及可 扩展等特点。该文件系统支持目前还处于试验阶段的高性能文件系统BTRFS(B-Tree文件系统),同时支持按OSD方式存储,因此其性能是很卓越的, 因为该系统处于试商用阶段,需谨慎引入到生产环境
- 特性
1 | 1)Ceph底层存储是基于RADOS(可靠的、自动的分布式对象存储),它提供了LIBRADOS/RADOSGW/RBD/CEPH FS方式访问底层的存储系统,如下图所示 |
- 优点
1 | 1)支持对象存储(OSD)集群,通过CRUSH算法,完成文件动态定位, 处理效率更高 |
- 缺点
1 | 1)目前处于试验阶段,系统稳定性有待考究 |
- 应用场景
1 | 1)全网分布式部署的应用 |
源码路径:https://github.com/ceph/ceph
MogileFS
开发语言:perl
开源协议:GPL
依赖数据库
Trackers(控制中心):负责读写数据库,作为代理复制storage间同步的数据
Database:存储源数据(默认mysql)
Storage:文件存储
除了API,可以通过与nginx集成,对外提供下载服务