SlideShare ist ein Scribd-Unternehmen logo
1 von 40
Downloaden Sie, um offline zu lesen
LOCAL DEVELOPER DAY '09/Winter




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


                       Kazuhisa Hara
                        moonlinx.jp




                                       1
About me




               Kazuhisa Hara
                Id:kazuhisya

           moonlinx の中の人してます

             今日は横浜から参戦




                               2
お話を始める前に…




   moonlinxって何だよ…




                    3
What is moonlinx ?


moonlinxとは…
デザイン×音楽=新しいクリエイティション
• オンラインカルチャーマガジン & webコミュニティ
   – クリエーター、ミュージシャン向けプロモーションサイト
• ウラでは実験的なことも結構やってるよ!

                                  Community
                 Web Magazine
                                   (Rails)
                     (MT)




                                              4
Agenda



  Agenda

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




                                           5
Strong Man Under The Revolving Stage




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




                                       6
Danga Interactive




     DANGA INTERACTIVE



                         7
Brad Fitzpatrick



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


• MogileFS
• Perlbal
• memcached

作者:Brad Fitzpatrick 氏
成果物はLiveJournal , Vox(SixApart)で使われている
Perl(CPAN)界隈の超有名人!らしい
最近はGoogleに居る…?

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



                                                 8
Why Danga ?




          Why DANGA ?


                        9
Once upon a time…(?)




                       Story


                               10
Management of media file




 moonlinxはユーザーがイメージ・音楽・動画などの
           複数のメディアファイルを
                 バンバン(←ここ重要)
         アップロードすることが出来るサイト…




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

                               11
Selfishness…


ファイルのバック              NFSとかさ、マウ
アップとか楽した              ントとかしたくな
  いんだけど                 いんだよね




 ディスクの追加は
                      勿論SANとか買う金
超絶簡単に、かつサー
                      など何処にもない
ビス止めずにしたい


                不満たらたら。
                               12
The demand is answered




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




                             13
What is MogileFS ?




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

                     特殊カーネル不要
                     自動レプリケーション
   Amazon S3やGFS
                     RAID, SAN, NFS 一切不要
   ライクなシステム

                     ファイルシステム依存なし
                     簡単ディスク追加
                     自動フェイルオーバー
                                           14
Introduction results




                 導入実績は?


    LiveJournal (SixApart運営,アメリカの大手ブログサイト。イメージファイル格納に利用)
    Digg (ソーシャルニュースサイト。イメージファイル格納に利用)
    Veho (ビデオ配信。Hadoop上で使ってるらしい。クライアントはJava)
    Ebaums World (Entertainment website?? メディアファイルを格納)
    Gaia Online (英語圏での最大の電子掲示板らしい。アバターイメージを格納)
    JogNote (運動を楽しく続けるための和製SNS。イメージファイルの格納)
                                                           15
It might be good!




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




                        16
Architecture



    MogileFS Components


    • trackers (mogilefsd)
    • storage nodes (mogstored)
    • mysql database cluster(or PostgreSQL)
    • clients (perl MogileFS::Client,
               Ruby gem mogilefs-client…)



                                              17
Architecture




MogileFS Components
•    trackers (mogilefsd)

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

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

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

•    storage nodes (mogstored)

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

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

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


                                                   18
Architecture




    MogileFS Components
•   mysql database cluster
     – StorageNodeの管理
     – NDB Cluster推奨、と言うことに事になっている
        • 使わなくても動くけど、冗長を意識したいならcluster組むべき
     – PostgreSQLでもOKらしい

•   clients (perl MogileFS::Client, Ruby gem mogilefs-client…)
     – クライアントインターフェース
     – 公式にはPerlのみサポート
        • でもRubyやPHP、Python、Java版もある




                                                                 19
MinimumOverview - Upload

mindevcount : 2の場合
                                         Webページ
※ 作成するコピーの数
                                        アップローダー


                     File
                                            Key : hogehoge


                                                         アプリケーションの
                                                      Mogileインターフェイスが
                            Front Web server
                                                          このキーでStore


 Storageのステータス管理
       mog DB                                         mogilefsd
                                 MogileFS
      (MySQL)                                         (trackers)
                            DB
 Storage nodeの、
                                 http
                                                                    mogstored
 どこかにファイルが
    複製される

                     AUTO Replication
                                                             File
                      Mogile Storage node
           File
                                                                                20
MinimumOverview - Download




                                            ①   Key : hogehoge


                                                        アプリケーションが
                                                       keyをtrackersに問い
                                                            合わせる
                            Front Web server
                                                         hogehogeどこ?


                                                ➁
➂   アプリケーションは                    MogileFS             trackers(mogilefsd)は
    受け取ったファイル
                                                    key よりファイルのありかを
                           DB
    パスで実ファイルを
                                                          DBから引っ張り
    取りに行く、その後
                                                     アプリケーションに伝える
     クライアントへ




                       AUTO Replication
                                                          File
         File
                       Mogile Storage node
                                                                             21
The demand is answered




                  よーするに




                          22
Upload


                                        mogilefsd
                        MogileFS       (trackers)
                   を                                に
         Media
          File


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



                               mogstored
             Storage node


                                    の、どこかに

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


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


                                 mogilefsd
                  MogileFS       (trackers)
                                                  に


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




                                      mogstored
                      Storage node

                 が                   の、どこかにあるかを
      Media
                                         教えてくれる
       File


              http://192.168.xxx.yyy:7500/dev1/xxxyyyzzz.fid
                              こんな感じの値
                                                               24
Cloud Computing!




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




                           25
Moreover, do?




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


                      26
Selfishness


でも、trackersは           ファイルの扱いは
毎回DBに問い合わ              フロントで受け持
 せすんでしょ?               たなきゃいけない
                         わけ?




1画面出すのに何
  回SELECT文
 走らせるんだよ

               まだ不満。
                              27
The demand is answered




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




                            28
What is Perlbal ?




What is Perlbal ?
   Sexy reverse proxy load balancer and
         webserver, full of tricks.

               Webサーバー
               ロードバランサー
               リバースプロキシ
               プロキシキャッシュサーバー
               MogileFSと相性最高!
                                          29
Perlbal



フロント(今回はRails)の前に、
 Perlbal(リバースプロキシモード)を置いて
     メディアファイルのやり取りをやらせると…



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

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


                              30
X-REPROXY-CACHE-FOR
                                                     DB
                                                       負
                                                           荷
  で、しかも                                                        対
                                                                   策

 DBリクエストは、Perlbalの
     X-REPROXY-CACHE-FORでファイルパスをキャッシュ

mogileFSからPerlbalが受け取る値
         http://192.168.xxx.yyy:7500/dev1/xxxyyyzzz.fid

ReverseProxyとしてPerlbalが吐き出す値
    http://media.moonlinx.jp/media/system/hoge/xxxyyyzzz.fid


 Perlbalでproxyしたこの値をキャッシュすると…
 毎回trackers(mogilefsd)に問い合わせが不要
 つまりDBへのアクセスがいらない!
                                                                       31
Overview - Download




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


                        Main Web Server

ファイルの処
理は、Perlbal                                   trackersへの問い合わせ、
 が受け持つ                                         つまりDBアクセスなし
                            MogileFS


                       DB


         File

                      AUTO Replication

                       Mogile Storage node                      32
It adopts it!




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

                これ採用!




                           33
Necessary to think
素敵システムなんだけど、考えなきゃいけないところ
•    ファイルサイズ
      – 1ファイルに付き、100MBまでしかStoreできない仕様になってる
         • (クライアント側で)bigfileオプションをつければ分割して保存してくれる
            – ただしクライアント依存…

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

•    拡張子
      – 拡張子は全て「.fid」で保存される
         • 取り出す時にフロントで隠蔽するなり、加工が必要

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

•    管理とかテストとか、まだまだ色々
      – 管理用のツールが少ない
         • CUIのがあるけど、もっと簡単にしたい

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



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


            memcached
みんな大好き、爆速メモリキャッシュサーバー
ネイティブでmogilefsdがサポートしてるよ!
            オブジェクトをメモリにキャッシュ
            導入ラクチン
            分散もできる
            mixi, はてな, Facebook, Vox,
             LiveJournal, ニコ動…みんな大好き


                                        35
Conclusion




             まとめ


                   36
Conclusion


mogileFS(とPerlbal)を使うと…
• RAID, SAN, NFS を一切使わないで
• スケーラビリティとバックアップが一度に両立できて
• クラウド感溢れるサービスが構築できる!
• しかも、安く!!(全部OSS,SAS・FibreChannel もいらないよ!)




     みんなハッピー

                                             37
How to Install

参考::MogileFSインストール方法
• yumやらzypper経由
  – 一番カンタンで開発環境(gccとか)のインストールもほぼ不要
      • ただし、そもそもなかったり、バージョン古かったりする

• CPAN経由
  – CPAN重い! ><;
      • でも依存関係の解消とかちょっとラク

  – miniCPANでミラーリングしとくと、大量にインスコする時楽かも
• Sourceから自力make
  – 依存moduleが結構多くて大変
      • Danga-SocketとかGearman-ServerとかIO-AIOとか

  – CPANと併用するといい感じ
      • 依存関係 → CPANで解消 / 新しいバージョンの本体 → SVNで引いてくる

                                                   38
Thanks




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




          http://moonlinx.jp
                               39
MogileFS - memcached Support


    ついでの蛇足ばなし補足
     memcachedをtrackers(mogilefsd)に
                           組み込むと…
    MogileFSのキーやファイルの場所をキャッシュ

•   trackersに問い合わせが来た時点で初めて効果を発揮する
     – 今回はPerlbalのキャッシュでtrackersにすら到達しないような作りだから、現時点
       ではあんまり効果なし
        • perlbalを使わない場合は特に良いんじゃないかな
•   Uploadの時にキャッシュするからPerlbalのキャッシュに乗るまでは有能
     – ちょっと短い…
•   ただしmemcachedは分散設置できるから、今後Perlbalで追いつかなくな
    った時の、2次キャッシュ的な対策にはなるかも
     – そこまで行けば嬉しい悲鳴かな?

                                                       40

Weitere ähnliche Inhalte

Was ist angesagt?

Voices for Custodial Justice Newsletter - June 2015 Issue
Voices for Custodial Justice Newsletter  -  June 2015 IssueVoices for Custodial Justice Newsletter  -  June 2015 Issue
Voices for Custodial Justice Newsletter - June 2015 Issuehrfmedia
 
2021년 1월 16일 개발자 이야기
2021년 1월 16일 개발자 이야기2021년 1월 16일 개발자 이야기
2021년 1월 16일 개발자 이야기Jay Park
 
Top Ten SE Concepts V11.1 Jp
Top Ten SE Concepts V11.1 JpTop Ten SE Concepts V11.1 Jp
Top Ten SE Concepts V11.1 JpKenji Hiranabe
 
5.保护您的互联网应用—Azure权限管理服务
5.保护您的互联网应用—Azure权限管理服务5.保护您的互联网应用—Azure权限管理服务
5.保护您的互联网应用—Azure权限管理服务GaryYoung
 
서버, 도커 컨테이너, 데이터베이스, WAS, 네트워크, 쿨링랙, 서버 취약점, IP 주소 관리, 가동률 등 IT 인프라 모니터링 솔루션 ...
서버, 도커 컨테이너, 데이터베이스, WAS, 네트워크, 쿨링랙, 서버 취약점, IP 주소 관리, 가동률 등 IT 인프라 모니터링 솔루션 ...서버, 도커 컨테이너, 데이터베이스, WAS, 네트워크, 쿨링랙, 서버 취약점, IP 주소 관리, 가동률 등 IT 인프라 모니터링 솔루션 ...
서버, 도커 컨테이너, 데이터베이스, WAS, 네트워크, 쿨링랙, 서버 취약점, IP 주소 관리, 가동률 등 IT 인프라 모니터링 솔루션 ...옥시즌
 
Adobe Flash Player Invalid Pointer Vulnerability
Adobe Flash Player Invalid Pointer VulnerabilityAdobe Flash Player Invalid Pointer Vulnerability
Adobe Flash Player Invalid Pointer VulnerabilityZ Chen
 
2021년 1월 9일 개발자 이야기
2021년 1월 9일 개발자 이야기2021년 1월 9일 개발자 이야기
2021년 1월 9일 개발자 이야기Jay Park
 
Ruby による Agile 開発
Ruby による Agile 開発Ruby による Agile 開発
Ruby による Agile 開発Kenji Hiranabe
 
2021년 1월 3일 개발자 이야기
2021년 1월 3일 개발자 이야기2021년 1월 3일 개발자 이야기
2021년 1월 3일 개발자 이야기Jay Park
 
Library2.0을 활용한 정보서비스 사례: 블로그를 중심으로
Library2.0을 활용한 정보서비스 사례: 블로그를 중심으로Library2.0을 활용한 정보서비스 사례: 블로그를 중심으로
Library2.0을 활용한 정보서비스 사례: 블로그를 중심으로POSTECH Library
 
Towards Effective Browsing of Large Scale Social Annotations
Towards Effective Browsing of Large Scale Social AnnotationsTowards Effective Browsing of Large Scale Social Annotations
Towards Effective Browsing of Large Scale Social Annotationsmomota
 
OpeLa 進捗報告 at 第23回自作OSもくもく会
OpeLa 進捗報告 at 第23回自作OSもくもく会OpeLa 進捗報告 at 第23回自作OSもくもく会
OpeLa 進捗報告 at 第23回自作OSもくもく会uchan_nos
 
Voices of Panchayat Presidents - Newsletter - Issue No.25
Voices of Panchayat Presidents - Newsletter - Issue No.25Voices of Panchayat Presidents - Newsletter - Issue No.25
Voices of Panchayat Presidents - Newsletter - Issue No.25hrfmedia
 
196 Ch
196 Ch196 Ch
196 Chanjaan
 

Was ist angesagt? (20)

Voices for Custodial Justice Newsletter - June 2015 Issue
Voices for Custodial Justice Newsletter  -  June 2015 IssueVoices for Custodial Justice Newsletter  -  June 2015 Issue
Voices for Custodial Justice Newsletter - June 2015 Issue
 
2021년 1월 16일 개발자 이야기
2021년 1월 16일 개발자 이야기2021년 1월 16일 개발자 이야기
2021년 1월 16일 개발자 이야기
 
Top Ten SE Concepts V11.1 Jp
Top Ten SE Concepts V11.1 JpTop Ten SE Concepts V11.1 Jp
Top Ten SE Concepts V11.1 Jp
 
16.07.11.
16.07.11.16.07.11.
16.07.11.
 
5.保护您的互联网应用—Azure权限管理服务
5.保护您的互联网应用—Azure权限管理服务5.保护您的互联网应用—Azure权限管理服务
5.保护您的互联网应用—Azure权限管理服务
 
서버, 도커 컨테이너, 데이터베이스, WAS, 네트워크, 쿨링랙, 서버 취약점, IP 주소 관리, 가동률 등 IT 인프라 모니터링 솔루션 ...
서버, 도커 컨테이너, 데이터베이스, WAS, 네트워크, 쿨링랙, 서버 취약점, IP 주소 관리, 가동률 등 IT 인프라 모니터링 솔루션 ...서버, 도커 컨테이너, 데이터베이스, WAS, 네트워크, 쿨링랙, 서버 취약점, IP 주소 관리, 가동률 등 IT 인프라 모니터링 솔루션 ...
서버, 도커 컨테이너, 데이터베이스, WAS, 네트워크, 쿨링랙, 서버 취약점, IP 주소 관리, 가동률 등 IT 인프라 모니터링 솔루션 ...
 
Adobe Flash Player Invalid Pointer Vulnerability
Adobe Flash Player Invalid Pointer VulnerabilityAdobe Flash Player Invalid Pointer Vulnerability
Adobe Flash Player Invalid Pointer Vulnerability
 
2021년 1월 9일 개발자 이야기
2021년 1월 9일 개발자 이야기2021년 1월 9일 개발자 이야기
2021년 1월 9일 개발자 이야기
 
S20
S20S20
S20
 
GLT#13 Naruhiko Ogasawara
GLT#13 Naruhiko OgasawaraGLT#13 Naruhiko Ogasawara
GLT#13 Naruhiko Ogasawara
 
Ruby による Agile 開発
Ruby による Agile 開発Ruby による Agile 開発
Ruby による Agile 開発
 
2021년 1월 3일 개발자 이야기
2021년 1월 3일 개발자 이야기2021년 1월 3일 개발자 이야기
2021년 1월 3일 개발자 이야기
 
01.12.11
01.12.1101.12.11
01.12.11
 
webwork2guide
webwork2guidewebwork2guide
webwork2guide
 
Library2.0을 활용한 정보서비스 사례: 블로그를 중심으로
Library2.0을 활용한 정보서비스 사례: 블로그를 중심으로Library2.0을 활용한 정보서비스 사례: 블로그를 중심으로
Library2.0을 활용한 정보서비스 사례: 블로그를 중심으로
 
Towards Effective Browsing of Large Scale Social Annotations
Towards Effective Browsing of Large Scale Social AnnotationsTowards Effective Browsing of Large Scale Social Annotations
Towards Effective Browsing of Large Scale Social Annotations
 
OpeLa 進捗報告 at 第23回自作OSもくもく会
OpeLa 進捗報告 at 第23回自作OSもくもく会OpeLa 進捗報告 at 第23回自作OSもくもく会
OpeLa 進捗報告 at 第23回自作OSもくもく会
 
Voices of Panchayat Presidents - Newsletter - Issue No.25
Voices of Panchayat Presidents - Newsletter - Issue No.25Voices of Panchayat Presidents - Newsletter - Issue No.25
Voices of Panchayat Presidents - Newsletter - Issue No.25
 
22.12.11
22.12.1122.12.11
22.12.11
 
196 Ch
196 Ch196 Ch
196 Ch
 

Andere mochten auch

How to train your L3DSR with PBR - MEMO -
How to train your L3DSR with PBR - MEMO -How to train your L3DSR with PBR - MEMO -
How to train your L3DSR with PBR - MEMO -Naoto MATSUMOTO
 
Las Nuevas TecnologìAs Luz
Las Nuevas TecnologìAs LuzLas Nuevas TecnologìAs Luz
Las Nuevas TecnologìAs LuzZara20
 
Apresmatch18
Apresmatch18Apresmatch18
Apresmatch18ramondiaz
 
Corridas deToro; No es un arte es una tortura
Corridas deToro; No es un arte es una torturaCorridas deToro; No es un arte es una tortura
Corridas deToro; No es un arte es una torturaJorge Martínez
 
徳丸本ができるまで
徳丸本ができるまで徳丸本ができるまで
徳丸本ができるまでHiroshi Tokumaru
 
MogileFSをバックエンドとしたPrivate S3の作り方
MogileFSをバックエンドとしたPrivate S3の作り方MogileFSをバックエンドとしたPrivate S3の作り方
MogileFSをバックエンドとしたPrivate S3の作り方Ryo Kuroda
 
ZFS on Linux @ZFS Day 2011.10
ZFS on Linux @ZFS Day 2011.10ZFS on Linux @ZFS Day 2011.10
ZFS on Linux @ZFS Day 2011.10Kazuhisa Hara
 
歴史あるWebサービスに携わって2年半の間に起きた事やった事
歴史あるWebサービスに携わって2年半の間に起きた事やった事歴史あるWebサービスに携わって2年半の間に起きた事やった事
歴史あるWebサービスに携わって2年半の間に起きた事やった事Masataka Kono
 
Solr+Hadoop = Big Data Search
Solr+Hadoop = Big Data SearchSolr+Hadoop = Big Data Search
Solr+Hadoop = Big Data SearchCloudera, Inc.
 

Andere mochten auch (11)

How to train your L3DSR with PBR - MEMO -
How to train your L3DSR with PBR - MEMO -How to train your L3DSR with PBR - MEMO -
How to train your L3DSR with PBR - MEMO -
 
Las Nuevas TecnologìAs Luz
Las Nuevas TecnologìAs LuzLas Nuevas TecnologìAs Luz
Las Nuevas TecnologìAs Luz
 
Apresmatch18
Apresmatch18Apresmatch18
Apresmatch18
 
Corridas deToro; No es un arte es una tortura
Corridas deToro; No es un arte es una torturaCorridas deToro; No es un arte es una tortura
Corridas deToro; No es un arte es una tortura
 
H2O and php
H2O and phpH2O and php
H2O and php
 
Osc2011 Do
Osc2011 DoOsc2011 Do
Osc2011 Do
 
徳丸本ができるまで
徳丸本ができるまで徳丸本ができるまで
徳丸本ができるまで
 
MogileFSをバックエンドとしたPrivate S3の作り方
MogileFSをバックエンドとしたPrivate S3の作り方MogileFSをバックエンドとしたPrivate S3の作り方
MogileFSをバックエンドとしたPrivate S3の作り方
 
ZFS on Linux @ZFS Day 2011.10
ZFS on Linux @ZFS Day 2011.10ZFS on Linux @ZFS Day 2011.10
ZFS on Linux @ZFS Day 2011.10
 
歴史あるWebサービスに携わって2年半の間に起きた事やった事
歴史あるWebサービスに携わって2年半の間に起きた事やった事歴史あるWebサービスに携わって2年半の間に起きた事やった事
歴史あるWebサービスに携わって2年半の間に起きた事やった事
 
Solr+Hadoop = Big Data Search
Solr+Hadoop = Big Data SearchSolr+Hadoop = Big Data Search
Solr+Hadoop = Big Data Search
 

090214ldd Mogilefs

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