[徒然] 13 September 2008 はてなブックマーク - オンラインストレージDropboxのカラクリ Twitterでつぶやく

オンラインストレージDropboxのカラクリ

Hさん、香港とかタイとか僕もいってみたいです。
・・・・・嘘ですwタイとか暑苦しいし、中国語も日本語も通じないので別に行きたくないです。でもDropboxのアップロード速度は超異常なわけで・・・・・

Dropbox
さて今回は、結構話題のLinuxからも利用できるオンラインストレージ、Dropbox。どんなサービスなのかは、リンク先を見てください。
実際使ってみて判りましたが、物理的な意味での2GBとか、ましてや50GBとか提供してないみたいです。根拠は、中国の劣悪なADSLの環境においてもサクッと物理的限界を越えてるからw
試しに出たてのiTunes8のバイナリを上げてみる。ついでにUbuntu8.04のISOも上げてみる。なぜかすぐ終わる・・・・・、っていうかネットワークトラフィックがおかしいw

っていうか、明らかに数百MBはアップしてない。でもWEB側のファイルマネージャからはダウンロードできるみたいです。

( ゚Д゚)ハッ!!!!わかった!?電波だな!?
くそぉー、スーパーハッカーめ!!!!無線LANをハッ(違。。。



しかしまったく、時間がかからないわけじゃない、同期完了までハードディスクもゴリゴリ唸ってる。Dropboxのディレクトリにファイルを上げるとDropboxのプロセスがCPUを20%ほど占有している。

ここから想像するに、これはおそらく、ストレージのクライアントソフトがファイルを解析、CRC32などのハッシュコードを計算しているにちがいません。
なにが言いたいのかというと、このアップロード(ではないわけだがw)の異常な速度は、Dropboxは最初にファイル名とハッシュコードを送って、もし既存のストレージの中に同じコードをもつファイルが存在すればそのファイルへのリンクを作っているだけっぽいということです。

その既存のファイルが、どっかの誰かが既にアップロードしたものなのか、あらかじめ収集しておいたファイルなのか、はたまたDropboxのデータセンタ側で超高速回線を使って急いでダウンロードしてるものなのかは判りませんが。
機密情報の記述されたワードとかエクセル、ハッシュ値が同じになるファイルをまったく別な経路でアップしたとしたら、それもやはり共有されるのだろうか?いやもちろん論理的には同じハッシュ値であるということは同じファイルだから問題ないと思われるが気になりますね。

結論として「世の中、頭の良い人がいるものですね。」と・・・。
でも実際、中で何やってるか公開されていないので自前のSVNサーバとかと比べると多少不安です。

一応、これを検証する方法ですが、50MB前後の一般的に世の中でメジャーなファイル(iTunes8とかでいいでしょう)と、オリジナルな5MBのファイルを準備し、それぞれ別々にDropboxへコピーしてみれば、その速度の差が判ります。ちなみに私は2GB使いきるぐらいのファイルを上げてみました。ただ、あんまりサイズの大きいファイルだとハッシュの計算に時間がかかりすぎ、日本の光回線とかだと5MBのファイルの方が先にアップされてしまうかもしれないです。

まあ、いずれにせよかなりトリッキーなことをしているようですが、便利は便利です。なにせLinuxで利用できるのはうれしい限りです。

Dropbox - Home - Secure backup, sync and sharing made easy.
http://www.getdropbox.com/

Dropboxが一般公開。50Gバイトストレージ&iPhone版も
http://www.itmedia.co.jp/bizid/articles/0809/12/news096.html

“PCで仕事”を速くする:
第20回 Dropboxですべては解決してしまった (1/3)
http://www.itmedia.co.jp/bizid/articles/0806/06/news124.html

#追記1 やっぱりトリックだった
ログインが必要ですが、フォーラムでも同じような話が上がってて、開発者(Jon Ying)が回答してますね。
super fast upload
http://forums.getdropbox.com/topic.php?id=1610&replies=9
Jon Y.Dropbox Dude:
Yup, it's really the case. If you're uploading a file and Dropbox realizes that it already exists, it will bypass the upload and just propagate the file accordingly to your other computers/any shared folder collaborators.

もし機密ファイルのハッシュコードとファイル名を入手できたとしたら?それを利用して自分がそのファイルを保持しているように偽装できるんじゃないのだろうか?まあ、経路はSSLだしそもそもハッシュなんぞ入手はできないかもしれないけど。

#追記2 なにやってるのかを少し
当初fuseとかでマウントしてるのかと思ってたら、どうも違う。
~/.dropbox-dist以下にインストールされてるdropboxdが常駐していてDropboxとして利用しているディレクトリをポーリングして監視しているみたい。つまり、オンラインストレージというよりも自動同期ツールという方が正確で、おそらくDropboxで50GB利用するためにはローカルにも同じだけの50GB容量が必要だとおもわれる。

ちなみに、接続先情報とかキャッシュとかは~/.dropbox以下にdbファイルとして配置されてる。.dropbox-dist以下にlibsqlite3.so.0とかあるからSQLiteのファイルだと思う。
あと.dropbox-dist以下にはライブラリが何でもかんでもDLしてあって、Ubuntu版とか言いつつも本体のデーモンためのライブラリ群はシステムと完全独立している。

Linux版のページでは、下記みたいに「クライアントはオープンソースだこの野郎、どうだおらあ!」とか書いてるけど、
It's here, it's open source, and it's free software! Dropbox for Linux is finally available and ready for your everyday use.

これはファサードであるクライアント部分だけで、コマンドの組み立てとかをやったあとUnixソケットでdropboxdにつないでいるようだ。
で、実際には下記のように"closed-source daemon process"と表現しているデーモンが多くの処理担っている。
Currently Dropbox for Linux consists of two major components. dropboxd is a per-user closed-source daemon process that makes sure your $HOME/Dropbox directory is properly synchronized. nautilus-dropbox is a GPL'd Nautilus plugin that connects to dropboxd (via a pair of Unix domain sockets) and presents a GUI based on the information dropboxd provides.

まあ、やっぱりコアエンジンはオープンにしないよねw
なれないCのソース追って損してしまった。

Comments

No comments yet

Add Comment

このアイテムは閲覧専用です。コメントの投稿、投票はできません。