MinIO - 无需调整,无需按下

“我需要的越少,我感觉越好。” ~ 查尔斯·布考斯基

我们经常忘记从过去的成功项目中学习。如果你像我一样年纪大了,你会记得一个叫 qmail 的项目。由于其极简的设计,没有人能找到其安全的漏洞 (qmail 安全保证)。系统管理员也喜欢其简单性。我认为极简主义在当今的软件设计中比以往任何时候都更重要。

与处理可变元数据和查询语言的分布式数据库相比,理论上对象存储应该简单得多。它只需要一组简单的 API 来处理不可变数据的块。亚马逊、谷歌和 Facebook 比企业存储和操作系统供应商更了解这一点。他们可能存储自拍和猫视频,但数量高达数万亿。可扩展性始于简化。

MinIO 从极简主义的角度看待存储。

有主见的设计

软件随着时间的推移会自然膨胀。像 “ls” 这样的简单工具有太多我一生可能都不会用到的功能。即使是专家用户也常常难以调整 NFS 和 RAID 选项。存储是一个地方,我将在早期采用 “自动驾驶” 软件。现代云基础设施不需要光纤通道和存储阵列认证。

使用 MinIO,服务器和客户端几乎没有选项。它只做一件事,而且只有一種方法可以做到。例如,MinIO 客户端 ‘mc’ 有像 ls、cp、sync、diff 这样的命令,它们类似于操作系统提供的工具。这些命令对所有主要操作系统上的云(兼容 S3)和本地文件系统都透明地工作。它们生成彩色控制台输出、人类可读的数字,甚至进度条。它可以移动海量数据并通过校验和透明地验证它们。然而,它足够简单,不需要附带手册页。

用 Golang 编写

MinIO 服务器和客户端是用 golang 编写的。Golang 继承了 Google 开发基础设施软件的方式。从源代码格式到构建工具,Go 作为一种语言承担了这些责任。没有人能说服,也无须混淆。

Golang 像 Python 一样简单,但像 Java 或 C++ 一样强大。它的通道和 goroutine 使编写可扩展的高性能服务器变得非常容易。Go 对 MinIO 最显著的优势是单个静态二进制输出,易于复制到任何机器并运行。不再有 RPM 和 Deb 依赖地狱或 root 权限要求。

不可变数据

MinIO 旨在存储不可变数据。照片、视频、文档、机器日志在生成后不会改变。没有理由实现丰富的 POSIX API 和 NFS/iSCSI 协议。MinIO 有意避免删除、重命名、追加或覆盖的 API。所有应用程序都需要的是通过 HTTP(s) 进行的 Get、Put 和 List API。操作是原子的。它们要么成功,要么失败。

兼容 S3

毫无疑问,亚马逊 S3 云存储是对象 API 的金标准。MinIO 服务器、客户端和库已经支持 Amazon S3 v4 API 的子集。实际上,客户端实用程序和库的设计优先考虑 “亚马逊优先”。有意避免 IAM 策略管理、删除/重命名和对象版本控制等功能。

简单许可证

我个人更喜欢 GNU GPLv3 来强烈地捍卫软件自由。我选择了 Apache 许可证 v2 用于 MinIO,同时考虑了应用程序开发者的需求。Apache 许可证足够简单,但提供了比修改后的 BSD 或 MIT 许可证更好的保护。它也在 FSF 批准的自由软件许可证列表中。

状态

MinIO 仍处于开发的早期阶段。MinIO 客户端 ‘mc’ 和库(Go、Java 和 Node.js)已准备好供公众使用。

快乐黑客!

-ab @abperiasamy

Minio 社区:https://minio.io/#community