之前一直使用MongoDB的GirdFS存储文件,在并发处理能力和扩容能力上没有遇到问题。但是使用总是不够变量,各种功能都需要自己开发。存储上是wt文件,无法直接识别。
所以,希望找一款替代产品。目前开源的文件存储系统比较多,比较了多个,我们的要求是要支持S3存储,最终选定了minio。
从对比中,目前文件存储在ceph和minio中进行比较选型
ceph优缺点
优点
成熟
红帽继子,ceph创始人已经加入红帽
国内有所谓的ceph中国社区,私人机构,不活跃,文档有滞后,而且没有更新的迹象。
从git上提交者来看,中国有几家公司的程序员在提交代码,星辰天合,easystack, 腾讯、阿里基于ceph在做云存储,但是在开源社区中不活跃,阿里一位叫liupan的有参与
功能强大
支持数千节点
支持动态增加节点,自动平衡数据分布。(TODO,需要多长时间,add node时是否可以不间断运行)
可配置性强,可针对不同场景进行调优
缺点
学习成本高,安装运维复杂。(或者说这个不是ceph的缺点,是我水平不行)
minio优缺点
优点
学习成本低,安装运维简单,开箱即用
目前minio论坛推广给力,有问必答
有java客户端、js客户端
缺点
社区不够成熟,业界参考资料较少
不支持动态增加节点,minio创始人的设计理念就是动态增加节点太复杂,后续会采用其它方案来支持扩容。
其缺点是目前不支持动态在线扩容。我们业务的使用量不会很大,所以这个问题先不考虑。
下面是第一次使用的过程:
1,下载
去官网下载安装包。不大,40M左右。
2,运行
# 后台运行
nohup ./minio server /home/haieradmin/minio/data > /home/haieradmin/minio/minio.log 2>&1 &
# 自定义MINIO_ACCESS_KEY和MINIO_SECRET_KEY
export MINIO_ACCESS_KEY=minio
export MINIO_SECRET_KEY=miniostorage
#自定义端口号
./minio server --address 101.121.115.159:9001 /home/haieradmin/minio/data
启动成功之后,就可以登录控制台了
点击右下角的小加号,先创建一个bucket,再上传一个文件
完美啊,真是太简单了
去服务器上看,实际上也是新建了一个目录,新建了一个文件。
这点比使用mongo的girdFS好太多了。
看看api的使用
一个简单例子:
新建一个springboot项目,引入依赖
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>3.0.6</version>
</dependency>
注意,一定要是3.0.6的版本。官网给的3.0.10版本,和示例代码匹配不上。
代码还是很简单,创建一个client。创建bucket,然后上传文件即可。
去控制台查看下,文件已经传上来了
整体感受下来,体验非常好。更深入的问题需要继续研究。比如容灾能力,集群化部署。