Minio

Open Source Cloud Storage

Minio - 回すドアノブが無い, 押すボタンが無い

“必要な物が少ないほど, 穏やかな気分になれた.” ~ チャールズ ブコウスキー

私達は過去の成功したプロジェクトから学び取ることを忘れてしまいがちです. もしあなたが私と同じほどの年齢であればqmailというプロジェクトを覚えていることでしょう. ミニマルに設計されているために誰もそのセキュリティーの穴を突くことができませんでした(qmail security guarantee). Sysadminsもまたそのシンプリシティを好んでいました. 私は今日のソフトウェアデザインにおいてミニマリズムは今まで以上に価値のあるものだと考えています.

分散データベースと比較して, ミュータブルなメタデータとクエリ言語についてですが, オブジェクトストレージは理論上もっとシンプルであるべきです. イミュータブルなデータのblobをハンドルできるシンプルなAPIのセットが必要です. Amazon, Google そしてFacebookはエンタープライズのストレージやオペレーティングシステムよりも良くこの事を理解していました. 彼らはセルフィーや猫のビデオを保存することができます, しかも何兆もの規模で. "Scalability begins with reduction".

Minioはミニマリストの視点からストレージを見ているのです.

こだわりのデザイン

ソフトウェアは自然にゆっくりと膨れ上がっていきます. ‘ls’の様なシンプルなツールは私がほぼ人生で使うことのない様な本当にたくさんの機能を持っています. 熟練のユーザーでさえNFSとRAIDのoptionsを調整するのによくもがき苦しみます. ストレージは私が早い段階で“self-driving”なソフトウェアとして認めた分野です. モダンなクラウドインフラストラクチャはファイバチャネルとストレージアレイ証明書を必要としません.

Minioでは, サーバとクライアントの両方がほとんどoptionsを持っていません. それは一つの物で, そして一つの方法で機能を果たすという事なのです. 例えば, Minio client ‘mc’はオペレーティングシステムが提供しているls, cp, sync, diffの様なコマンドを持っています. これらのコマンドはクラウド(S3互換)とローカルのメジャーなオペレーティングシステムとの間で透過的に機能します. 色付けされたコンソールアウトプット, 読みやすい数字さらにプログレスバーを提供します. 膨大のデータを移動できチェックサムでそれらを透過的に検証できます. manページがまだ必要のないほどシンプルです.

Golangで書かれています

MinioサーバとクライアントはGolangで書かれています. GolangはGoogleのインフラストラクチャソフトウェアの開発方法を継承しています. ソースのフォーマットからビルドツールまで, Goは言語としてその責任を担っています. これについて誰の意見も聞きませんし混乱もありません.

GolangはPythonの様にシンプルで, しかしJavaやC++の様にパワフルです. そのチャネルとgoルーチンは本当に簡単にスケーラブルなハイパフォーマンスサーバを書き上げることを可能にしています. MinioにとってGoを選択することの最大の利点は単一のstaticバイナリを出力する点で, このことで簡単にどのマシンへもcopyして実行させることができます. RPMとDebの依存地獄やroot権限が必須である事にはもうたくさんです.

イミュータブルなデータ

Minioはイミュータブルなデータをストアする様に設計されています. 写真, ビデオ, ドキュメント, マシンログは一度作成されたら改変されません. リッチなPOSIX APIとNFS/iSCSIプロトコルを実装する理由はありません. Minioはdelete, rename, appendやoverwriteのためのAPI実装を意図的に避けています. すべてのアプリケーションはHTTP(s)を介したGet, PutそしてList APIを必要としています. オペレーションはatomicです. 成功か失敗かのどちらかです.

S3互換

議論の余地はありません, Amazon S3クラウドストレージはオブジェクトAPIのゴールドスタンダードです. Minioサーバ, クライアント, そしてライブラリはすでにAmazon S3 V4 APIのサブセットをサポートしています. 実際クライアントユーティリティとライブラリは“Amazon First”を再優先に設計されています. IAM policy managementやdelete/rename, オブジェクトバージョニングなどの様な機能は意図的に避けています.

シンプルなライセンス

私は個人的にはソフトウェアの自由を強く守るためにGNU GPLv3が優れていると考えています. Minioに対してはApache license v2を選択し, アプリケーション開発者の考える需要を確保しています. Apache licenseは十分にシンプルであり, しかしmodified BSDやMIT licenseよりも強く保護が機能しています. またFSF公認のフリーソフトウェアライセンスのリストにも載っています.

Status

Minioは開発の初期段階です. Minio client ‘mc’とライブラリ(Go, Java & Node.js)は一般公開の準備が整っています.

Happy Hacking!

-ab @abperiasamy

Minio Community: https://minio.io/#community