阅读 539

如何选型分布式文件系统

选型分布式文件系统

目前筛选出两个同样是 GoLang 实现的文件系统,今天仔细调研一下

minio seaweedFS
它最适合存储非结构化数据,如照片,视频,日志文件,备份和容器/ VM映像。对象的大小可以从几KB到最大5TB。 SeaweedFS是一个简单且高度可扩展的分布式文件系统,两个目标: 1、存储数十亿的文件! 2、查看档案快!

minio、seaweedFS 生态粗略对比

matvQS.md.png
matvQS.md.png

minio 单机模式 快速上手

mat4MD.png
mat4MD.png

注:此集群为单机多租户,非 「swarm」或「k8s」意义上的集群

matIqH.png
matIqH.png

登录需要的 公钥、私钥在 docker-compose 查看登录秘钥

  • 系统限制占用率
matWRK.png
matWRK.png

minio 一些特性总结一览

  • minio 集群要求:所有节点硬盘总和:最小4块盘 最多16块盘(受限纠删码)、n/2可读 n/2+1可写,eg:4个节点8快盘,宕掉一半(n/2) -依旧可读,5块(n/2+1)-才能写,<4块读不了。
  • 可建立无限个桶,每个桶无限对象,每个对象最大5T,每次上传最多批量 10k 个对象,每次请求最多 1k 个对象
  • minio事件通知原生支持:es**「不过仅支持 > 5.0」**、AMQP、MQTT、Redis、NATS、kafka、Webhooks
  • 因为 「纠删码」的原因 最大只支持 16块硬盘,限制了我们的存贮量,所以 minio 提供了一个 「超大桶」支持 PB 级别,原理大概是扩展多个纠删码,提供了『单机』扩展和『分布式』扩展方案

Minio 接入现有应用的分析

  • 可以考虑将 COMPANYID 作为 「桶」... 图片、文档、html 作为 「对象」

  • 简单跑了一下,但是至少是 JDK8+ ,7没法编译(最新的jar是8+)

  • 可直接配合 Nginxopenresty 负载

这里要注意 ! 如果 openResty 直接代理 minio 的 9000 端口,那么需要保证这个桶是公开的,否则需要写 LUA 脚本做验证 「虽然目前也没有存储什么敏感数据,但是这点迟早要考虑」

我使用 java client + 私钥 测试的,读对象只需要「桶」「对象名」两个参数即可。

matfxO.png
matfxO.png

成功上传

matxsg.md.png
matxsg.md.png

web 端查看结果

mat5se.png
mat5se.png

minio 客户端 :mc 可以非常可靠的快速的大规模迁移数据

下章整理发布 《分布式文件系统迁移的经验》

SeaweedFS

相比之下没有网页上传的功能,测试同学就无法为研发分担部分压力。

matTZd.png
matTZd.png

SeaweedFs 的 wiki 分几块:

restFull API、文件管理、配置、异步复制、操作(备份、k8s部署)、安全

总结

和 SeaweedFs 共同对比,没有发现什么刚需的功能点必须要选择 SeaweedFs 的,从「社区」「开发实力」 感觉还是 MINIO 从易用性来说应该比 SeaweedFs 更适合我们,不论是服务还是工具也更全面SeaweedFs 虽然是国人写的项目,但对国人也没有很友好,Issues 处理及时率较低,无论是企业使用,还是个人使用,我都偏向于推荐 Minio。

本文链接:github.com/pkwenda/Blo…