090214ldd mogilefs
DESCRIPTION
09/02/14 LOCAL DEVELOPER DAY ’09/Winterにて発表したプレゼン資料です。TRANSCRIPT
1
OSS分散ファイルシステムMogileFS で組む素敵システム
Kazuhisa Hara
moonlinx.jp
LOCAL DEVELOPER DAY '09/Winter
2
About me
Kazuhisa HaraId:kazuhisya
moonlinx の中の人してます
今日は横浜から参戦
3
moonlinxって何だよ…
お話を始める前に…
4
What is moonlinx ?
moonlinxとは…
デザイン×音楽=新しいクリエイティション• オンラインカルチャーマガジン & webコミュニティ
– クリエーター、ミュージシャン向けプロモーションサイト
• ウラでは実験的なことも結構やってるよ!
Community(Rails)
Web Magazine(MT)
5
Agenda
Agenda
•Strong Man Under The Revolving Stage•DANGA INTERACTIVE•What is MogileFS ?•Overview
•What is Perlbal ?•Overview
•Conclusion
6
moonlinxを裏から支えるOSS
- 分散ファイルシステム編 -
Strong Man Under The Revolving Stage
7
DANGA INTERACTIVE
Danga Interactive
8
moonlinxを裏から支えるOSS - 分散ファイルシステム編 -
•MogileFS•Perlbal•memcached
作者:Brad Fitzpatrick 氏成果物はLiveJournal , Vox(SixApart)で使われている
Perl(CPAN)界隈の超有名人!らしい
最近はGoogleに居る…?
そんな彼の(旧)会社が『DANGA INTERACTIVE』http://www.danga.com
Brad Fitzpatrick
9
Why DANGA ?
Why Danga ?
10
Story
Once upon a time…(?)
11
Management of media file
moonlinxはユーザーがイメージ・音楽・動画などの
複数のメディアファイルを
バンバン(←ここ重要)
アップロードすることが出来るサイト…
ディスク容量や管理が馬鹿にならない
12
勿論SANとか買う金など何処にもない
ファイルのバックアップとか楽した
いんだけど
NFSとかさ、マウントとかしたくな
いんだよね
ディスクの追加は超絶簡単に、かつサービス止めずにしたい
不満たらたら。
Selfishness…
13
The demand is answered
それ、MogileFSで解決できるんじゃね?
14
What is MogileFS ?danga.com謹製OSS分散ファイルシステム
特殊カーネル不要
自動レプリケーション
RAID, SAN, NFS 一切不要
ファイルシステム依存なし
簡単ディスク追加
自動フェイルオーバー
What is MogileFS ?
Amazon S3やGFSライクなシステム
15
Introduction results
導入実績は?
LiveJournal (SixApart運営,アメリカの大手ブログサイト。イメージファイル格納に利用)
Digg (ソーシャルニュースサイト。イメージファイル格納に利用)
Veho (ビデオ配信。Hadoop上で使ってるらしい。クライアントはJava)
Ebaums World (Entertainment website?? メディアファイルを格納)
Gaia Online (英語圏での最大の電子掲示板らしい。アバターイメージを格納)
JogNote (運動を楽しく続けるための和製SNS。イメージファイルの格納)
16
It might be good!
結構いいんじゃない?…で、どんなシステムなの?
17
MogileFS Components
• trackers (mogilefsd)
• storage nodes (mogstored)
• mysql database cluster(or PostgreSQL)
• clients (perl MogileFS::Client,
Ruby gem mogilefs-client…)
Architecture
18
• trackers (mogilefsd)
– クライアントからリクエストを受け取ったり、DBで状態を管理
– MogileFSの肝、管理マネージャー
– 冗長化もわりと簡単にできる
• storage nodes (mogstored)
– イメージ的にはWebDAVみたいなもの
• と、言うかApache(lighttpd)-WebDAVでも動作するらしい
– 実はPerlbal *perlbalについては後記
Architecture
MogileFS Components
19
• mysql database cluster– StorageNodeの管理
– NDB Cluster推奨、と言うことに事になっている• 使わなくても動くけど、冗長を意識したいならcluster組むべき
– PostgreSQLでもOKらしい
• clients (perl MogileFS::Client, Ruby gem mogilefs-client…)– クライアントインターフェース
– 公式にはPerlのみサポート• でもRubyやPHP、Python、Java版もある
Architecture
MogileFS Components
20
DB
MinimumOverview - Upload
Front Web server
MogileFS
Mogile Storage node
Webページアップローダー
mogilefsd(trackers)
mog DB(MySQL)
Storageのステータス管理
AUTO Replication
FileKey : hogehoge
アプリケーションのMogileインターフェイスが
このキーでStore
mindevcount : 2の場合※ 作成するコピーの数
Storage nodeの、どこかにファイルが
複製される
httpmogstored
FileFile
21
MinimumOverview - Download
Front Web server
trackers(mogilefsd)はkey よりファイルのありかを
DBから引っ張りアプリケーションに伝える
アプリケーションがkeyをtrackersに問い
合わせるhogehogeどこ?
AUTO Replication
Key : hogehoge①
➁アプリケーションは受け取ったファイルパスで実ファイルを取りに行く、その後
クライアントへ
➂
Mogile Storage nodeFile
File
DB
MogileFS
22
The demand is answered
よーするに
23
Upload
MogileFSmogilefsd(trackers)
Media File
Key : hogehoge
を に
と言うKeyを付与して投げると
Storage nodemogstored
の、どこかに
mindevcount : 2※ 作成するコピーの数 分コピーされる
「どこかに」じゃなくて、明示的に指定もできるよ!
24
Download
MogileFS
Media File
Key : hogehoge
に
と言うKeyを問い合わせると
Storage nodemogstored
の、どこかにあるかを
教えてくれる
こんな感じの値
が
mogilefsd(trackers)
http://192.168.xxx.yyy:7500/dev1/xxxyyyzzz.fid
25
Cloud Computing!
Amazon S3 のような、クラウド感溢れる(?)システムができた!
26
で、
スケーラビリティとバックアップを両立した、素敵システムが組みあがったのもつ
かの間…。
Moreover, do?
27
でも、trackersは毎回DBに問い合わせすんでしょ?
ファイルの扱いはフロントで受け持たなきゃいけない
わけ?
1画面出すのに何回SELECT文
走らせるんだよ
まだ不満。
Selfishness
28
The demand is answered
それ、Perlbalで解決出来るよ!
29
What is Perlbal ?Sexy reverse proxy load balancer and
webserver, full of tricks.
Webサーバー
ロードバランサー
リバースプロキシ
プロキシキャッシュサーバー
MogileFSと相性最高!
What is Perlbal ?
30
Perlbal
フロント (今回はRails)の前に、
Perlbal(リバースプロキシモード)を置いて
メディアファイルのやり取りをやらせると…
Railsより遥かにコストが掛からない!
しかも、
将来の拡張に柔軟対応ロードバランシングも実現できる
31
X-REPROXY-CACHE-FOR
DBリクエストは、PerlbalのX-REPROXY-CACHE-FORでファイルパスをキャッシュ
http://media.moonlinx.jp/media/system/hoge/xxxyyyzzz.fid
Perlbalでproxyしたこの値をキャッシュすると…
毎回trackers(mogilefsd)に問い合わせが不要つまりDBへのアクセスがいらない!
http://192.168.xxx.yyy:7500/dev1/xxxyyyzzz.fid
mogileFSからPerlbalが受け取る値
ReverseProxyとしてPerlbalが吐き出す値
DB負荷対策
で、しかも
32
DB
Overview - Download
Main Web Server
MogileFS
AUTO Replication
Perlbal
trackersへの問い合わせ、つまりDBアクセスなし
ファイルの処理は、Perlbalが受け持つ
Mogile Storage node
Perlbalにキャッシュがあれば、即ファイルパスを返す
File
33
It adopts it!
つまりMogileFSはファイルのStoreのみに専念できるわけだ。
これ採用!
34
Necessary to think
素敵システムなんだけど、考えなきゃいけないところ
• ファイルサイズ
– 1ファイルに付き、100MBまでしかStoreできない仕様になってる
• (クライアント側で)bigfileオプションをつければ分割して保存してくれる
– ただしクライアント依存…
– Rubyのクライアントは年末辺りに対応したっぽい。JavaもOK?PHPはまだっぽい
• 拡張子
– 拡張子は全て「.fid」で保存される
• 取り出す時にフロントで隠蔽するなり、加工が必要
• もしくはプラグイン作って、それもDBに突っ込んじゃうとか…!
• 管理とかテストとか、まだまだ色々
– 管理用のツールが少ない
• CUIのがあるけど、もっと簡単にしたい
– MogileFSのデータ消したときのPerlbalのキャッシュとか。
35
memcachedみんな大好き、爆速メモリキャッシュサーバーネイティブでmogilefsdがサポートしてるよ!
オブジェクトをメモリにキャッシュ
導入ラクチン
分散もできる
mixi, はてな, Facebook, Vox, LiveJournal, ニコ動…みんな大好き
キャッシュの話が出たところで、ついでに蛇足
memcached
36
まとめ
Conclusion
37
mogileFS(とPerlbal)を使うと…
• RAID, SAN, NFS を一切使わないで
• スケーラビリティとバックアップが一度に両立できて
• クラウド感溢れるサービスが構築できる!
• しかも、安く!!(全部OSS,SAS・FibreChannel もいらないよ!)
Conclusion
みんなハッピー
38
How to Install
参考::MogileFSインストール方法
• yumやらzypper経由
– 一番カンタンで開発環境(gccとか)のインストールもほぼ不要
• ただし、そもそもなかったり、バージョン古かったりする
• CPAN経由
– CPAN重い! ><;
• でも依存関係の解消とかちょっとラク
– miniCPANでミラーリングしとくと、大量にインスコする時楽かも
• Sourceから自力make
– 依存moduleが結構多くて大変
• Danga-SocketとかGearman-ServerとかIO-AIOとか
– CPANと併用するといい感じ
• 依存関係 → CPANで解消 / 新しいバージョンの本体 → SVNで引いてくる
39
Thanks
ご清聴ありがとう御座いました
http://moonlinx.jp
40
ついでの蛇足ばなし補足memcachedをtrackers(mogilefsd)に
組み込むと…
MogileFSのキーやファイルの場所をキャッシュ
MogileFS - memcached Support
• trackersに問い合わせが来た時点で初めて効果を発揮する– 今回はPerlbalのキャッシュでtrackersにすら到達しないような作りだから、現時点
ではあんまり効果なし
• perlbalを使わない場合は特に良いんじゃないかな
• Uploadの時にキャッシュするからPerlbalのキャッシュに乗るまでは有能– ちょっと短い…
• ただしmemcachedは分散設置できるから、今後Perlbalで追いつかなくなった時の、2次キャッシュ的な対策にはなるかも– そこまで行けば嬉しい悲鳴かな?