分布式存储系统对比之Ceph VS MinIO
对象存储概述
对象存储通常会引用为基于对象的存储,它是能够处理大量非结构化数据的数据存储架构,在众多系统中都有应用。对于部署在公有云的服务来说,公有云一般都提供对象存储服务,如阿里云的 OSS, 华为云的 OBS ,腾讯云的 COS 。通过提供的 SDK 就可以访问。如果不想用公有云的话,也有一些开源方案可以自己搭建。
一些开源的对象存储都会遵循 Amazon s3 协议。 Amazon s3 协议定义了操作对象存储的 Resestfull 风格的 API 。通过在 pom 中引用 aws-java-sdk-s3 可以实现对存储的操作。
开源方案对比
存储的方案分成两种: ① 一种是可以自定对象名称的;②另一种是系统自动生成对象名称。
不能自定义名称的有领英的 Ambry , MogileFS 。
TFS 是淘宝开源的,但是目前已经很少有人维护它并且也不是很活跃。
Ceph 是一个比较强大的分布式存储,但是它整个系统非常复杂需要大量的人力进行维护。
GlusterFS 为本身是一个非常成熟的对象存储的方案, 2011 年被收购了,原班的人马又做了另外一个存储系统 MinIO 。
其中 Ceph 跟 MinIO 是支持 s3 协议的。后面对这两种方案做了一个详细的介绍。
对象存储选型
①MinIO
MinIO 是一个基于 Apache License V2.0 开源协议的对象存储服务,它兼容亚马逊 S3 云存储服务,非常适合于存储大容量非结构化的数据,如图片,视频,日志文件等。而一个对象文件可以任意大小,从几 KB 到最大的 5T 不等。它是一个非常轻量级的服务,可以很简单的和其它的应用结合,类似于 NodeJS, Redis 或者 MySQL 。
MinIO 默认不计算 MD5 ,除非传输给客户端的时候,所以很快,支持 windows ,有 web 页进行管理。
②Ceph
Ceph 同时支持对象存储,块存储和文件系统服务。 Ceph 有以下几个特点:
高性能:摒弃了传统的集中式存储元数据寻址的方案采用 CRUSH 算法数据分布均衡并行度高 ; 考虑了容灾域的隔离,能够实现各类负载的副本放置规则,例如跨机房、机架感知等 ; 能够支持上千个存储节点的规模,支持 TB 到 PB 级的数据 ;
高可用性:副本数可以灵活控制 ; 支持故障域分隔,数据强一致性 ; 多种故障场景自动进行修复自愈 ; 没有单点故障,自动管理 ;
高可扩展性:去中心化 ; 扩展灵活 ; 随着节点增加而线性增长 ;
特性丰富:支持三种存储接口:块存储、文件存储、对象存储 ; 支持自定义接口,支持多种语言驱动 .
Ceph | MinIO | |
优点 | · 成熟 · 红帽继子,Ceph创始人已经加入红帽 · 功能强大 · 支持数千节点 · 支持动态增加节点,自动平衡数据分布。 · 可配置性强,可针对不同场景进行调优 | · 学习成本低,安装运维简单,开箱即用 · 目前MinIO论坛推广给力,有问必答 · 有java客户端、js客户端 · 数据保护:分布式MinIO采用 纠删码来防范多个节点宕机和位衰减bit rot。分布式MinIO至少需要4个硬盘,使用分布式MinIO自动引入了纠删码功能。 · 一致性:MinIO在分布式和单机模式下,所有读写操作都严格遵守read-after-write一致性模型。 · 支持联盟模式扩展集群 |
缺点 | · 学习成本高,安装运维复杂。 · 国内有所谓的Ceph中国社区,私人机构,不活跃,文档有滞后,而且没有更新的迹象。 | · 不支持动态增加节点,MinIO创始人的设计理念就是动态增加节点太复杂,后续会采用其它方案来支持扩容。 |
开发语言 | · C | · Go |
数据冗余 | · 副本,纠删码 | · Reed-Solomon code |
一致性 | · 强一致性 | · 强一致性 |
动态扩展 | · HASH | · 不支持动态加节点 |
中心节点 | · 对象存储无中心 | · CephFS有元数据服务中心点 |
存储方式 | · 块、文件、对象 | · 对象存储 |
活跃度 | · 高,中文社区不算活跃 | · 高,没有中文社区 |
成熟度 | · 高 | · 中 |
文件系统 | · EXT4,XFS | · EXT4,XFS |
客户端 | · c、python,S3 | · java,s3 |
断点续传 | · 兼容S3,分段上传,断点下载 | · 兼容S3,分段上传,断点下载 |
学习成本 | · 高 | · 中 |
开源协议 | · LGPL version 2.1 | · Apache v2.0 |
管理工具 | · Ceph-admin,Ceph-mgr,zabbix插件 | · web管理工具 命令行工具 mc |
总结:
** 从目前来看,如果想自建对象存储服务的话,有能力,规模比较大的话,采用 Ceph 感觉更好一点。如果只是想要一个对象存储,要求没有那么多的话,可以采用 MinIO 。
如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!
赞3
添加新评论0 条评论