tskin
作者tskin·2020-12-10 14:56
售前工程师·浪潮商用机器有限公司

分布式存储系统对比之 Ceph VS MinIO

字数 1958阅读 14843评论 0赞 3

分布式存储系统对比之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 级的数据 ;

高可用性:副本数可以灵活控制 ; 支持故障域分隔,数据强一致性 ; 多种故障场景自动进行修复自愈 ; 没有单点故障,自动管理 ;

高可扩展性:去中心化 ; 扩展灵活 ; 随着节点增加而线性增长 ;

特性丰富:支持三种存储接口:块存储、文件存储、对象存储 ; 支持自定义接口,支持多种语言驱动 .

CephMinIO
优点· 成熟 · 红帽继子,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 条评论

Ctrl+Enter 发表

作者其他文章

X社区推广