090214ldd mogilefs

40
1 OSS分散ファイルシステム MogileFS で組む素敵システム Kazuhisa Hara moonlinx.jp LOCAL DEVELOPER DAY '09/Winter

Upload: kazuhisa-hara

Post on 06-Dec-2014

7.490 views

Category:

Technology


2 download

DESCRIPTION

09/02/14 LOCAL DEVELOPER DAY ’09/Winterにて発表したプレゼン資料です。

TRANSCRIPT

Page 1: 090214ldd Mogilefs

1

OSS分散ファイルシステムMogileFS で組む素敵システム

Kazuhisa Hara

moonlinx.jp

LOCAL DEVELOPER DAY '09/Winter

Page 2: 090214ldd Mogilefs

2

About me

Kazuhisa HaraId:kazuhisya

moonlinx の中の人してます

今日は横浜から参戦

Page 3: 090214ldd Mogilefs

3

moonlinxって何だよ…

お話を始める前に…

Page 4: 090214ldd Mogilefs

4

What is moonlinx ?

moonlinxとは…

デザイン×音楽=新しいクリエイティション• オンラインカルチャーマガジン & webコミュニティ

– クリエーター、ミュージシャン向けプロモーションサイト

• ウラでは実験的なことも結構やってるよ!

Community(Rails)

Web Magazine(MT)

Page 5: 090214ldd Mogilefs

5

Agenda

Agenda

•Strong Man Under The Revolving Stage•DANGA INTERACTIVE•What is MogileFS ?•Overview

•What is Perlbal ?•Overview

•Conclusion

Page 6: 090214ldd Mogilefs

6

moonlinxを裏から支えるOSS

- 分散ファイルシステム編 -

Strong Man Under The Revolving Stage

Page 7: 090214ldd Mogilefs

7

DANGA INTERACTIVE

Danga Interactive

Page 8: 090214ldd Mogilefs

8

moonlinxを裏から支えるOSS - 分散ファイルシステム編 -

•MogileFS•Perlbal•memcached

作者:Brad Fitzpatrick 氏成果物はLiveJournal , Vox(SixApart)で使われている

Perl(CPAN)界隈の超有名人!らしい

最近はGoogleに居る…?

そんな彼の(旧)会社が『DANGA INTERACTIVE』http://www.danga.com

Brad Fitzpatrick

Page 9: 090214ldd Mogilefs

9

Why DANGA ?

Why Danga ?

Page 10: 090214ldd Mogilefs

10

Story

Once upon a time…(?)

Page 11: 090214ldd Mogilefs

11

Management of media file

moonlinxはユーザーがイメージ・音楽・動画などの

複数のメディアファイルを

バンバン(←ここ重要)

アップロードすることが出来るサイト…

ディスク容量や管理が馬鹿にならない

Page 12: 090214ldd Mogilefs

12

勿論SANとか買う金など何処にもない

ファイルのバックアップとか楽した

いんだけど

NFSとかさ、マウントとかしたくな

いんだよね

ディスクの追加は超絶簡単に、かつサービス止めずにしたい

不満たらたら。

Selfishness…

Page 13: 090214ldd Mogilefs

13

The demand is answered

それ、MogileFSで解決できるんじゃね?

Page 14: 090214ldd Mogilefs

14

What is MogileFS ?danga.com謹製OSS分散ファイルシステム

特殊カーネル不要

自動レプリケーション

RAID, SAN, NFS 一切不要

ファイルシステム依存なし

簡単ディスク追加

自動フェイルオーバー

What is MogileFS ?

Amazon S3やGFSライクなシステム

Page 15: 090214ldd Mogilefs

15

Introduction results

導入実績は?

LiveJournal (SixApart運営,アメリカの大手ブログサイト。イメージファイル格納に利用)

Digg (ソーシャルニュースサイト。イメージファイル格納に利用)

Veho (ビデオ配信。Hadoop上で使ってるらしい。クライアントはJava)

Ebaums World (Entertainment website?? メディアファイルを格納)

Gaia Online (英語圏での最大の電子掲示板らしい。アバターイメージを格納)

JogNote (運動を楽しく続けるための和製SNS。イメージファイルの格納)

Page 16: 090214ldd Mogilefs

16

It might be good!

結構いいんじゃない?…で、どんなシステムなの?

Page 17: 090214ldd Mogilefs

17

MogileFS Components

• trackers (mogilefsd)

• storage nodes (mogstored)

• mysql database cluster(or PostgreSQL)

• clients (perl MogileFS::Client,

Ruby gem mogilefs-client…)

Architecture

Page 18: 090214ldd Mogilefs

18

• trackers (mogilefsd)

– クライアントからリクエストを受け取ったり、DBで状態を管理

– MogileFSの肝、管理マネージャー

– 冗長化もわりと簡単にできる

• storage nodes (mogstored)

– イメージ的にはWebDAVみたいなもの

• と、言うかApache(lighttpd)-WebDAVでも動作するらしい

– 実はPerlbal *perlbalについては後記

Architecture

MogileFS Components

Page 19: 090214ldd Mogilefs

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

Page 20: 090214ldd Mogilefs

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

Page 21: 090214ldd Mogilefs

21

MinimumOverview - Download

Front Web server

trackers(mogilefsd)はkey よりファイルのありかを

DBから引っ張りアプリケーションに伝える

アプリケーションがkeyをtrackersに問い

合わせるhogehogeどこ?

AUTO Replication

Key : hogehoge①

➁アプリケーションは受け取ったファイルパスで実ファイルを取りに行く、その後

クライアントへ

Mogile Storage nodeFile

File

DB

MogileFS

Page 22: 090214ldd Mogilefs

22

The demand is answered

よーするに

Page 23: 090214ldd Mogilefs

23

Upload

MogileFSmogilefsd(trackers)

Media File

Key : hogehoge

を に

と言うKeyを付与して投げると

Storage nodemogstored

の、どこかに

mindevcount : 2※ 作成するコピーの数 分コピーされる

「どこかに」じゃなくて、明示的に指定もできるよ!

Page 24: 090214ldd Mogilefs

24

Download

MogileFS

Media File

Key : hogehoge

と言うKeyを問い合わせると

Storage nodemogstored

の、どこかにあるかを

教えてくれる

こんな感じの値

mogilefsd(trackers)

http://192.168.xxx.yyy:7500/dev1/xxxyyyzzz.fid

Page 25: 090214ldd Mogilefs

25

Cloud Computing!

Amazon S3 のような、クラウド感溢れる(?)システムができた!

Page 26: 090214ldd Mogilefs

26

で、

スケーラビリティとバックアップを両立した、素敵システムが組みあがったのもつ

かの間…。

Moreover, do?

Page 27: 090214ldd Mogilefs

27

でも、trackersは毎回DBに問い合わせすんでしょ?

ファイルの扱いはフロントで受け持たなきゃいけない

わけ?

1画面出すのに何回SELECT文

走らせるんだよ

まだ不満。

Selfishness

Page 28: 090214ldd Mogilefs

28

The demand is answered

それ、Perlbalで解決出来るよ!

Page 29: 090214ldd Mogilefs

29

What is Perlbal ?Sexy reverse proxy load balancer and

webserver, full of tricks.

Webサーバー

ロードバランサー

リバースプロキシ

プロキシキャッシュサーバー

MogileFSと相性最高!

What is Perlbal ?

Page 30: 090214ldd Mogilefs

30

Perlbal

フロント (今回はRails)の前に、

Perlbal(リバースプロキシモード)を置いて

メディアファイルのやり取りをやらせると…

Railsより遥かにコストが掛からない!

しかも、

将来の拡張に柔軟対応ロードバランシングも実現できる

Page 31: 090214ldd Mogilefs

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負荷対策

で、しかも

Page 32: 090214ldd Mogilefs

32

DB

Overview - Download

Main Web Server

MogileFS

AUTO Replication

Perlbal

trackersへの問い合わせ、つまりDBアクセスなし

ファイルの処理は、Perlbalが受け持つ

Mogile Storage node

Perlbalにキャッシュがあれば、即ファイルパスを返す

File

Page 33: 090214ldd Mogilefs

33

It adopts it!

つまりMogileFSはファイルのStoreのみに専念できるわけだ。

これ採用!

Page 34: 090214ldd Mogilefs

34

Necessary to think

素敵システムなんだけど、考えなきゃいけないところ

• ファイルサイズ

– 1ファイルに付き、100MBまでしかStoreできない仕様になってる

• (クライアント側で)bigfileオプションをつければ分割して保存してくれる

– ただしクライアント依存…

– Rubyのクライアントは年末辺りに対応したっぽい。JavaもOK?PHPはまだっぽい

• 拡張子

– 拡張子は全て「.fid」で保存される

• 取り出す時にフロントで隠蔽するなり、加工が必要

• もしくはプラグイン作って、それもDBに突っ込んじゃうとか…!

• 管理とかテストとか、まだまだ色々

– 管理用のツールが少ない

• CUIのがあるけど、もっと簡単にしたい

– MogileFSのデータ消したときのPerlbalのキャッシュとか。

Page 35: 090214ldd Mogilefs

35

memcachedみんな大好き、爆速メモリキャッシュサーバーネイティブでmogilefsdがサポートしてるよ!

オブジェクトをメモリにキャッシュ

導入ラクチン

分散もできる

mixi, はてな, Facebook, Vox, LiveJournal, ニコ動…みんな大好き

キャッシュの話が出たところで、ついでに蛇足

memcached

Page 36: 090214ldd Mogilefs

36

まとめ

Conclusion

Page 37: 090214ldd Mogilefs

37

mogileFS(とPerlbal)を使うと…

• RAID, SAN, NFS を一切使わないで

• スケーラビリティとバックアップが一度に両立できて

• クラウド感溢れるサービスが構築できる!

• しかも、安く!!(全部OSS,SAS・FibreChannel もいらないよ!)

Conclusion

みんなハッピー

Page 38: 090214ldd Mogilefs

38

How to Install

参考::MogileFSインストール方法

• yumやらzypper経由

– 一番カンタンで開発環境(gccとか)のインストールもほぼ不要

• ただし、そもそもなかったり、バージョン古かったりする

• CPAN経由

– CPAN重い! ><;

• でも依存関係の解消とかちょっとラク

– miniCPANでミラーリングしとくと、大量にインスコする時楽かも

• Sourceから自力make

– 依存moduleが結構多くて大変

• Danga-SocketとかGearman-ServerとかIO-AIOとか

– CPANと併用するといい感じ

• 依存関係 → CPANで解消 / 新しいバージョンの本体 → SVNで引いてくる

Page 39: 090214ldd Mogilefs

39

Thanks

ご清聴ありがとう御座いました

http://moonlinx.jp

Page 40: 090214ldd Mogilefs

40

ついでの蛇足ばなし補足memcachedをtrackers(mogilefsd)に

組み込むと…

MogileFSのキーやファイルの場所をキャッシュ

MogileFS - memcached Support

• trackersに問い合わせが来た時点で初めて効果を発揮する– 今回はPerlbalのキャッシュでtrackersにすら到達しないような作りだから、現時点

ではあんまり効果なし

• perlbalを使わない場合は特に良いんじゃないかな

• Uploadの時にキャッシュするからPerlbalのキャッシュに乗るまでは有能– ちょっと短い…

• ただしmemcachedは分散設置できるから、今後Perlbalで追いつかなくなった時の、2次キャッシュ的な対策にはなるかも– そこまで行けば嬉しい悲鳴かな?