首先讲一下:存储发展史
企业中使用存储按照其功能,使用场景,一直在持续发展和迭代,大体上可以分为四个阶段:
- DAS:Direct Attached Storage,即直连存储,第一代存储系统,通过SCSI总线扩展至一个外部的存储,磁带整列,作为服务器扩展的一部分;
- NAS:Network Attached Storage,即网络附加存储,通过网络协议如NFS远程获取后端文件服务器共享的存储空间,将文件存储单独分离出来;
- SAN:Storage Area Network,即存储区域网络,分为IP-SAN和FC-SAN,即通过TCP/IP协议和FC(Fiber Channel)光纤协议连接到存储服务器;
- Object Storage:即对象存储,随着大数据的发展,越来越多的图片,视频,音频静态文件存储需求,动则PB以上的存储空间,需无限扩展。
存储的发展,根据不同的阶段诞生了不同的存储解决方案,每一种存储都有它当时的历史诞生的环境以及应用场景,解决的问题和优缺点。
综上、企业中不同场景使用的存储,使用表现形式无非是这三种:磁盘(块存储设备),挂载至目录像本地文件一样使用(文件共享存储),通过API向存储系统中上传PUT和下载GET文件(对象存储)。
开源方案对比
存储的方案分成两种:一种是可以自定对象名称的,另一种是系统自动生成对象名称。
- 不能自定义名称的有领英的Ambry,MogileFS。
- TFS 是淘宝开源的,但是目前已经很少有人维护它并且也不是很活跃。
- ceph 是一个比较强大的分布式存储,但是它整个系统非常复杂需要大量的人力进行维护。
- GlusterFS 为本身是一个非常成熟的对象存储的方案,2011被收购了,原班的人马又做了另外一个存储系统MINIO。
其中ceph跟minio是支持s3协议的。后面对这两种方案做了一个详细的介绍。
对象存储选型
对ceph跟minio看了一下文档,它们的对比如下:
ceph跟minio大部分的s3 API都支持。
- ceph支持s3 api的链接:https://docs.ceph.com/docs/master/radosgw/s3/#api
- minio所支持的s3 API:https://docs.min.io/docs/java-client-api-reference
minio
- minio是一个基于Apache License V2.0开源协议的对象存储服务,它兼容亚马逊S3云存储服务,非常适合于存储大容量非结构化的数据,如图片,视频,日志文件等。而一个对象文件可以任意大小,从几KB到最大的5T不等。它是一个非常轻量级的服务,可以很简单的和其它的应用结合,类似于NodeJS, Redis或者MySQL。
- minio默认不计算MD5,除非传输给客户端的时候,所以很快,支持windows,有web页进行管理。
- 推荐一个比较好的实践案例:基于 Go 开源项目 MIMIO 的对象存储方案在探探的实践:https://mp.weixin.qq.com/s/YIKB_qAqqy6ydtFT_a_Ieg
ceph
- ceph同时支持对象存储,块存储和文件系统服务。
ceph的特点如下:
- 高性能:摒弃了传统的集中式存储元数据寻址的方案采用CRUSH算法数据分布均衡并行度高;考虑了容灾域的隔离,能够实现各类负载的副本放置规则,例如跨机房、机架感知等;能够支持上千个存储节点的规模,支持TB到PB级的数据;
- 高可用性:副本数可以灵活控制;支持故障域分隔,数据强一致性;多种故障场景自动进行修复自愈;没有单点故障,自动管理;
- 高可扩展性:去中心化;扩展灵活;随着节点增加而线性增长;
- 特性丰富:支持三种存储接口:块存储、文件存储、对象存储;支持自定义接口,支持多种语言驱动.
从查过的资料来看,ceph很强大,但是也很复杂。
特殊的点
有的公有云厂商的对象存储还会提供缩略图跟视频截帧功能等额外的功能。
公有云(参考阿里云OSS文档,华为云OBS类似)的图片处理功能包含:
- 获取图片信息:获取图片色调和图片的基本信息。
- 图片格式转换:将图片转换成对应的格式。
- 图片缩放:
- 图片裁剪:
- 图片旋转:
- 图片效果:
- 图片水印:
- 自定义图片处理:
- 级联处理:批量处理图片请求。
这两功能对于ceph跟minio是不支持的,所以想支持这两个功能,可以自己实现。
结论
从目前来看,如果想自建对象存储服务的话,有能力,规模比较大的话,采用ceph感觉更好一点。如果只是想要一个对象存储,要求没有那么多的话,可以采用minio。
参考: 对象存储方案选型 - 知乎
参考: 【存储】块存储、文件存储和对象存储的区别|什么是Ceph?|MinIO和ceph - bandaoyu - 博客园