Webサービスを提供していてファイルを保存するというケースは良くあります。が、サーバ一つに保存すると移行や何らかの障害が発生した時にデータの安全性を保持するのが難しくなるでしょう。 そこで単純にファイルを保存するのではなく、スケーラブルなストレージシステムが欲しくなります。個人的にはMogileFSも好きですし、Amazon S3を使う手もあると思いますが今回はWeed-FSというキーベースのファイルストレージを紹介します。

多彩なOSに対応

Weed-FSのバイナリは、

  • Windows
  • Plan9
  • OpenBSD
  • NetBSD
  • Darwin
  • Linux

向けに配布されています。幅広いOSで使えるようです。今回はWindows版を試しています。

Weed-FSのサブコマンドです。

マスターを立てる

最初にマスターを立てます。

> weed.exe master

マスター立ち上げ

マスターは9333ポートで立ち上がります。

ボリュームサーバを立ち上げ

次にボリュームサーバを立ち上げます。幾つでも立ち上げられます。

ポート番号は自由に設定できます。実ファイルの保存先も指定します。

ファイルを保存&取得してみる

これで準備は完了です。ファイルの保存はPOSTでファイルを放り込むだけです。

$ curl -F file=@/home/chris/myphoto.jpg http://127.0.0.1:8080/3,01637037d6

ファイルを保存するとサイズがJSONで返ってきます。

そして取り出す時はGETで実行するだけです。

$ curl http://localhost:8080/3,01637037d6.jpg

以下のような名称でも取得できます。

  • http://localhost:8080/3/01637037d6/my_preferred_name.jpg
  • http://localhost:8080/3/01637037d6.jpg
  • http://localhost:8080/3,01637037d6.jpg
  • http://localhost:8080/3/01637037d6
  • http://localhost:8080/3,01637037d6

つまり保存時に指定したキーでファイルが返ってくるという形です。とてもシンプルですね。削除はDELETEメソッドで実行すればOKです。

curl -X DELETE http://127.0.0.1:8080/3,01637037d6

レプリケーションも可能

スケーラブルなファイルストレージとあってレプリケーションにも対応しています。

$ curl http://localhost:9333/dir/assign?replication=001

このように外部から命令するだけです。

HTTPでデータをやり取りするだけなのでシンプルに使いこなせそうです。複数のサーバ上にファイルを保存しておけば、万一のサーバ障害にもファイルの安全性は保てるはずです。

Weed-FSはApache License 2.0のオープンソース・ソフトウェアです。

weed-fs - Fast Scalable distributed key-file storage system - Google Project Hosting