2015/10/20現在、この記事のminioはバージョンが古く機能・性能等が変わっております。
あまりアテにせず参考程度に留めてください。
詳しくはgithub.com/minio/minioを参照ください。
最近のWeb開発だとAmazonS3が便利過ぎて手放せませんよね。
アップロードして貰う画像やファイルなんかも、ローカルに置くと管理やバックアップが大変です・・・
気になる外向け転送量もnginx+リバースプロキシを間に噛ませるとお得に使えますし。
ただ面倒なのが開発環境です。
実際に開発環境で作業やテスト等をするとS3にアップされちゃうので、
ローカル開発用としてサクッと起動出来るS3互換オブジェクトストレージを探していた所minioというアプリケーションに行き当たりました。
使ってみる
公式サイトの方を読んでみるとすぐに分かるんですが
公式より転載
LinuxOS用
$ wget https://dl.minio.io:9000/updates/2015/Jun/linux-amd64/minio
$ chmod +x minio
$ ./minio mode memory limit 12GB expire 2h
と、たったこれだけで9000番ポートでオブジェクトストレージが立ち上がります。
オブジェクトの保存方法として
- memory (メモリー保存)
- fs (ファイル保存)
- donut (分からないです、検索してもミニドーナッツ記事しか・・・)
の三種類があります。
各動作モードについて
mode memory
必須パラメータとして limit [memory量]
を指定しましょう。
オプションとしてexpire
もあるようです。
mode fs
必須パラメータとしてmode fs
の後にファイルを保存するディレクトリを指定しましょう。
動作速度について
ローカル開発だとそこまで気にならないですが、一応簡単に確認しておきました。
動作環境はMacBookPro Virtualbox上のCentoS6.6 1コア256MBと、リソースを絞り気味です。
mode fsで動作をさせています。
アップロード
1.5KBのファイルを100個同期アップロードさせた所、大体6秒程で完了しました。
2.5MBのファイルを1個アップロードさせた所、0.2秒程で完了。
小さなファイルを大量にアップする場合は非同期でアップしたい所ですが、
同期アップロードでCPU使用率が70%程になっているので諦めました。
GETアクセスによる負荷耐久テスト
対象は1.5kbのcomposer.json君
% boom -c 100 -n 10000 http://192.168.33.101:9000/static/composer.json
Summary:
Total: 13.5443 secs.
Slowest: 0.6527 secs.
Fastest: 0.0160 secs.
Average: 0.1349 secs.
Requests/sec: 738.3162
Total Data Received: 10730000 bytes.
Response Size per Request: 1073 bytes.
Status code distribution:
[200] 10000 responses
Response time histogram:
0.016 [1] |
0.080 [1029] |∎∎∎∎∎∎∎
0.143 [5836] |∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
0.207 [2304] |∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
0.271 [525] |∎∎∎
0.334 [132] |
0.398 [50] |
0.462 [50] |
0.525 [48] |
0.589 [20] |
0.653 [5] |
Latency distribution:
10% in 0.0790 secs.
25% in 0.0987 secs.
50% in 0.1235 secs.
75% in 0.1520 secs.
90% in 0.1969 secs.
95% in 0.2350 secs.
99% in 0.4476 secs.
h2oでも試してみたのですが、直接静的ファイルにアクセスする場合1400req/s。
minio単体でもh2oの半分位のパフォーマンスが得られました。
総評
インストール・起動が非常に楽で、動作も非常に軽快です。
安定性等の検証は出来ませんでしたが、少なくともローカル開発用としては申し分無いと思います。
動作させるのにリソースも殆ど必要無いので、vagrant上での開発だとS3の代替として役立つのではないでしょうか。
クライアントライブラリもJava,NodeJS,Golang,Pythonと出ています。
残念ながら僕の使っているPHPではまだクライアントがありませんでした。
AWS-SDK-PHPからの使い方も分からない為、今後ライブラリの登場を待ちましょう。
追記
golangのminioライブラリの使い方がわかりやすくに書かれているサイトがありましたので紹介。
オブジェクトストレージ Minio を使ってみる | Jedipunkz's Blog