块存储一般体现形式是卷或者硬盘(比如windows的c盘),数据是按字节来访问的,对于块存储而言,对里面存的数据内容和格式是完全一无所知的。好比上面图中,数据就像玉米粒一样堆放在块存储里,块存储只关心玉米粒进来和出去,不关心玉米粒之间的关系和用途。
块存储只负责数据读取和写入,因此性能很高,适用于对响应时间要求高的系统。比如数据库等。
文件存储一般体现形式是目录和文件(比如C:\Users\Downloads\text.doc),数据以文件的方式存储和访问,按照目录结构进行组织。文件存储可以对数据进行一定的高级管理,比如在文件层面进行访问权限控制等。好比上面图中,数据像玉米粒一样组成玉米棒子,再对应到不同的玉米杆上,要找到某个玉米粒,先找到玉米杆,再找到玉米棒子,然后根据玉米粒在玉米棒子上的位置找到它。
文件存储可以很方便的共享,因此用途非常广泛。比如常用的NFS、CIFS、ftp等都是基于文件存储的。
对象存储一般体现形式是一个UUID,数据和元数据打包在一起作为一个整体对象存在一个超大池子里。对于对象访问,只需要报出它的UUID,就能立即找到它,但访问的时候对象是作为一个整体访问的。好比上面图中,数据的玉米粒被做成了玉米罐头,每个玉米罐头都有一个唯一出厂号,但是买卖罐头,都一次是一盒为单位。
从设计之初衷(一般的对象存储都是基于哈希环之类的技术来实现),对象存储就可以非常简单的扩展到超大规模,因此非常适合数据量大、增速又很快的视频、图像等。
存储系统 | CephFS | GlusterFS | TFS | HDFS | MooseFS | FastDFS | MogileFS |
---|---|---|---|---|---|---|---|
开发语言 | C++ | C | C++ | Java | C | C | Perl |
系统性能 | 很高 | 高 | |||||
数据存储方式 | 对象/文件/块 | 文件/块 | 文件 | 文件 | 块 | 文件/块 | 文件 |
集群节点通信协议 | 私有协议(TCP) | 私有协议(TCP)/ RDAM(远程直接访问内存) | TCP | TCP | TCP | TCP |
HTTP
专用元数据存储点 | 占用MDS | 无 | 占用NS | 占用MDS | 占用MFS | 无 | 占用DB
在线扩容 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持
冗余备份 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 不支持
单点故障 | 不存在 | 不存在 | 存在 | 存在 | 存在 | 不存在 | 存在
跨集群同步 | 不支持 | 支持 | 支持 | 不支持 | 不支持 | 部分支持 | 不支持
易用性 | 安装简单,官方文档专业化 | 安装简单,官方文档专业化 | 安装复杂,官方文档少 | 安装简单,官方文档专业化 | 安装简单,官方文档多 |
安装简单,社区相对活跃 | 未知
适用场景 | 单集群的大中小文件 | 跨集群云存储 | 跨集群的小文件 | Mapreduce使用的文件存储 | 单集群的大中文件 | 单集群的中小文件 |
未知
FUSE挂载 | 支持 | 支持 | 未知 | 支持 | 支持 | 不支持 | 不支持
访问接口 | POSIX | POSIX | 不支持POSIX | 不支持POSIX | POSIX | 不支持POSIX | 不支持POSIX
TFS(Taobao File
System)是由淘宝开发的一个分布式文件系统,其内部经过特殊的优化处理,适用于海量的小文件存储,目前已经对外开源。TFS采用自有的文件系统格式存储,因此需要专用的API接口去访问,目前官方提供的客户端版本有:
C++/JAVA/PHP(没有C的接口)
FastDFS是国人开发的一款分布式文件系统,目前社区比较活跃,提供了C、Java和PHP
API。实现软RAID10,提升并发IO的性能、简单负载均衡及数据的冗余备份;同时通过线性的添加新的逻辑存储组,从容实现存储容量的线性扩容。文件下载上,除了支持通过API方式,目前还提供了apache和nginx的插件支持,同时也可以不使用对应的插件,直接以Web静态资源方式对外提供下载。内部的网络模型使用比较成熟的libevent三方库,具备高并发的处理能力。
Ceph是一个可以按对象/块/文件方式存储的开源分布式文件系统,其设计之初,就将单点故障作为首先要解决的问题,因此该系统具备高可用性、高性能及可扩展等特点。该文件系统支持目前还处于试验阶段的高性能文件系统BTRFS(B-Tree文件系统),同时支持按OSD方式存储,因此其性能是很卓越的。
GlusterFS是Red
Hat旗下的一款开源分布式文件系统,它具备高扩展、高可用及高性能等特性,由于其无元数据服务器的设计,使其真正实现了线性的扩展能力,使存储总容量可
轻松达到PB级别,支持数千客户端并发访问;对跨集群,其强大的Geo-
Replication可以实现集群间数据镜像,而且是支持链式复制,这非常适用于跨集群的应用场景。
MooseFS是一个高可用的故障容错分布式文件系统,它支持通过FUSE方式将文件挂载操作,相对比较轻量级,同时其提供的web管理界面非常方便查看当前的文件存储状态。但其对master服务器有单点依赖,用perl编写,性能相对较差,国内用的人比较多。
安装简单,官方文档专业化;大数据批量读写,吞吐量高;一次写入,多次读取,顺序读写;难以满足毫秒级别的低延时数据访问;不支持多用户并发写相同文件;不适用于大量小文件;适合存储非常大的文件。
依赖数据库,Trackers(控制中心):负责读写数据库,作为代理复制storage间同步的数据,除了API,可以通过与nginx集成,对外提供下载服务,
* 适合做通用文件系统的有:Ceph,Lustre,MooseFS,GlusterFS
* 适合做小文件存储的文件系统有:Ceph,MooseFS,MogileFS,FastDFS,TFS
* 适合做大文件存储的文件系统有:HDFS,Ceph,Lustre,GlusterFS,GridFS
* 轻量级文件系统有:MooseFS,FastDFS
* 简单易用,用户数量活跃的文件系统有:MooseFS,MogileFS,FastDFS,GlusterFS
* 支持FUSE挂载的文件系统有:HDFS,Ceph,Lustre,MooseFS,GlusterFS
* 考虑到GFS不开源,学习成本高,且相关特性资料不全面的情况下,暂时先不考虑使用GFS上文没写)
* Ceph目前不够成熟稳定,很少有使用在生产环境的案例,暂时排除
* Lustre对内核依赖程度过重,且不易安装使用,暂时排除(上文没写)
* TFS安装复杂,且官方文档少,不利于以后的学习使用,暂时先排除
* 经初步筛选剩下的文件系统有:HDFS、MooseFS、MogileFS、FastDFS、GlusterFS、GridFS
* 需求
1.需要搭建一部管理原始凭证的文件系统,原始凭证的文件类型主要是小文件(<100M),不会对文件进行变更,无写操作,读操作量大,且对安全性要求较高 2. 随着系统在使用过程中数据量逐步庞大,文件的量会变得繁多,对文件读取速率要求尽可能高但不追求极致 3. 文件系统需要有较完善的冗余备份与容错机制,功能尽量精简耐用,安装配置应简单且适合于国产环境部署
* 分析
1. 需要选择适合海量小文件存储的文件系统,适合的文件系统有:MooseFS,MogileFS,FastDFS 2. 其次需要支持冗余备份,适合的文件系统有:MooseFS、FastDFS、GlusterFS 3. 符合条件1,2且功能精简的文件系统有: **FastDFS** 4. 符合条件1,2且功能全面的文件系统有: **MooseFS**
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。