Recommended
PDF
KEY
PDF
PDF
PPTX
PDF
MySQL Casual Talks in Fukuoka vol.2
PDF
PDF
PDF
PDF
PowerShellを使用したWindows Serverの管理
PDF
15分でCakePHPを始める方法(Nseg 2013-11-09 )
PDF
serverspecでサーバ環境のテストを書いてみよう
PPTX
MessagePack RPC によるドキドキ非同期通信 @関ジャバ 2012年度8月
PDF
FuelPHPで3種のprofilerを使ってみた
PDF
Serverspecを使ってサーバ5000台のBaculaクライアントをテスト
PDF
PDF
Serverspecを自分好みにアレンジ スクリーンショットで証跡保存を撲滅-
PPTX
PPT
PDF
PPTX
PDF
PDF
serverspecみんなで集めて(゚Д゚)ウマー?
PDF
PDF
Zabbix meeting 20101218_02-2 (Takanori Suzuki)
PDF
PDF
Norikraで作るPHPの例外検知システム YAPC::Asia Tokyo 2015 LT
KEY
カジュアルにバックアップ - MySQL Casual Talks 福岡
PDF
ソーシャルゲームにおけるMongoDB適用事例 - Animal Land
PPT
YAPC Asia 2010 30days Albumの裏側 後日談
More Related Content
PDF
KEY
PDF
PDF
PPTX
PDF
MySQL Casual Talks in Fukuoka vol.2
PDF
PDF
What's hot
PDF
PDF
PowerShellを使用したWindows Serverの管理
PDF
15分でCakePHPを始める方法(Nseg 2013-11-09 )
PDF
serverspecでサーバ環境のテストを書いてみよう
PPTX
MessagePack RPC によるドキドキ非同期通信 @関ジャバ 2012年度8月
PDF
FuelPHPで3種のprofilerを使ってみた
PDF
Serverspecを使ってサーバ5000台のBaculaクライアントをテスト
PDF
PDF
Serverspecを自分好みにアレンジ スクリーンショットで証跡保存を撲滅-
PPTX
PPT
PDF
PPTX
PDF
PDF
serverspecみんなで集めて(゚Д゚)ウマー?
PDF
PDF
Zabbix meeting 20101218_02-2 (Takanori Suzuki)
PDF
PDF
Norikraで作るPHPの例外検知システム YAPC::Asia Tokyo 2015 LT
KEY
カジュアルにバックアップ - MySQL Casual Talks 福岡
Similar to Shibuya Pm Tt08 Advanced Mogilefs
PDF
ソーシャルゲームにおけるMongoDB適用事例 - Animal Land
PPT
YAPC Asia 2010 30days Albumの裏側 後日談
PPT
PPTX
PDF
Mojoliciousでつくる! Webアプリ入門
KEY
ソーシャルゲームログ解析基盤のMongoDB活用事例
PDF
MogileFS をバックエンドとしたPrivate S3の作り方 【後半】API 編
KEY
Mojoliciousをウェブ制作現場で使ってみてる
PPT
PPT
関西オープンソース 2008 30days Albumの裏側
PDF
Osc2008 Opensuse Moonlinx
PPTX
PDF
fluent-plugin-resque_stat
Shibuya Pm Tt08 Advanced Mogilefs 1. 2. Agenda 3 分で分かる MogileFS Plugin の仕組み MogileFS::Store MogileFS の global_hook Server コマンドの作成 開発時の tips など まとめ 3. 4. 3分で分かるMogileFS (1) MogileFS とは? Perl で出来た DFS(Distribute File System) MogileFS の構成 tracker (mogilefsd) storage node (mogstored) database (mysql) 5. 3分で分かるMogileFS (2) trackers ( mogilefsd : 7001) storage node ( mogstored : 7500) database (mysql) mogilefs client reverse proxy(Perlbal) request MogileFS::Backend::do_command() Query X-Reproxy-URL 6. 7. 8. plugin の仕組み (1) plugin とは? trackers(mogilefsd) を拡張するモジュールの事。 MogileFS::Plugin::MetaData (fid ごとのメタデータ保存 ) MogileFS::Plugin::FilePaths (file の key を実ファイルパスのように ) この 2 つのモジュールが教科書 9. plugin の仕組み (2) plugin で出来る事 plugin 用の DB Schema の定義 (mogdbsetup を使って作成 ) global_hook を用いた hook point での callback 実行 Query Worker に新しいコマンドを定義 or 既存コマンド差し替え と言う訳で、この辺りのお話をします 10. plugin の仕組み (3) plugin module の構成 load メソッド : global_hook, worker_command の登録など unload メソッド : global_hook の削除 MogileFS::Store::TABLE_xxx メソッド : 新規テーブルの定義 大体こんな感じ 11. 12. MogileFS::Store と mogdbsetup (1) 新しいテーブルを作る plugin モジュールの中で package MogileFS::Store ; を宣言して、その中で sub TABLE_plugin_table_name {} を作り、テーブル定義を文字列で返す MogileFS::Store- > add_extra_tables () を実行してテーブル読み込み 13. MogileFS::Store と mogdbsetup (2) plugin_sample_test を作るサンプル package MogileFS::Plugin::Sample; ### ここに plugin の処理 package MogileFS::Store; sub TABLE_plugin_sample_test { return ‘CREATE TABLE plugin_sample_test ( id int primary key, name varchar( 255 ))’; } __PACKAGE__->add_extra_tables(‘plugin_sample_test’); 1 ; 14. MogileFS::Store と mogdbsetup (3) mogdbsetup でテーブル作成 $ mogdbsetup --plugins Sample --verbose --yes scheme_version が最新のとき mysql > UPDATE server_settings SET value = value - 1 WHERE field = ‘schema_version’; 一時的にバージョンを下げればおk! 15. 16. 17. MogileFS の global_hook (1) global_hook とは? 予め cmd 中に用意された hook ポイントで任意のコールバックを実行出来る。 MogileFS:: register_global_hook ($hookname, $callback); MogileFS:: unregister_global_hook ($hookname); MogileFS:: run_global_hook ($hookname); 18. MogileFS の global_hook (2) global_hook で出来る事 コールバックに渡される値は、その cmd への引数 (HASHREF) のみ 特定の hook に対して登録出来る callback は一つだけ orz… 複数の hook を登録するモジュールを作りました。 ( MogileFS::Plugin::MultiHook ) 19. MogileFS の global_hook (3) MultiHook の install $ sudo cpan -I MogileFS::Plugin::MultiHook setup (mogilefsd.conf) plugins = MultiHook , FilePaths これだけです>< 20. MogileFS の global_hook (4) 既知の hookpoint cmd_create_open : ファイル受信開始 cmd_create_close : ファイル受信完了 file_stored : ファイル保存完了 cmd_delete : ファイル削除時 21. MogileFS の global_hook (5) MultiHook のサンプル package MogileFS::Plugin::Sample; use MogileFS::Server; use MogileFS::Util; use MogileFS::Worker::Query; sub load { MogileFS::register_global_hook( 'fire_stored' , sub { my $args = shift ; ### 保存された storage node の URL をログに記載 MogileFS::Util::debug( "stored to " . $args ->{path}); return 1 ; }); } 22. 23. サーバーコマンドの作成 (1) 基本的な流れ MogileFS::register_worker_command($cmd_name, $cmd_code); を実行 MogileFS::Worker::Query で” cmd_plugin_${cmd_name}” と言うメソッドになる MogileFS::Backend->do_request でデバッグする 24. サーバーコマンドの作成 (2) MogileFS::Backend から直接サーバーコマンドを叩く my $mogc = MogileFS::Client-> new ( hosts => $hosts , domain => $domain ); $mogc ->{backend}->do_request( "plugin_echo_show_args" , { foo => 1 , bar => 2 }); 自分で作った cmd の動作確認は do_request で行う 25. サーバーコマンドの作成 (3) 引数をそのまま返す cmd の作成 sub load { MogileFS::register_worker_command( "plugin_echo_show_args" , sub { my MogileFS::Worker::Query $self = shift ; my $args = shift ; $self ->ok_line( $args ); }); } ok_line($res) の $res(HASHREF) は client に渡されるレスポンス 26. サーバーコマンドの作成 (3) 引数のハッシュの値は全て scalar のみ $mogc ->{backend}->do_request( "test" , { foo => { bar => 1 }, baz => [ qw/1 2/ ] }); こういうのは NG です。 baz_0 => 1, baz_1 => 2 みたいに。 27. 28. 29. 30. 開発時のtipsなど (3) $MogileFS::DEBUG true にすると client, server 共にデバッグフラグが立つ client のデバッグログはレスポンスの成否とレスポンスデータの dump 等を出力する Query Worker の ok_line($res) にデバッグデータ突っ込むのをお勧め 31. 開発時のtipsなど (4) テスト時の plugin の読み込み local @ARGV = qw/--skipconfig --plugins MultiHook/ ; eval { MogileFS::Config->load_config; }; @ARGV を一時的に捏造 --skipconfig : 設定ファイルを読み飛ばす --plugins : plugin の指定 (suffix で ) 32. 33. まとめ (1) plugin を使って出来る事 特定の hook にデバッグコード入れたり 監視に使えるコマンドを作ったり File にまつわる補足データを突っ込んだり 新しい hook 作ってみたり 34. まとめ (2) ファイル配信時の問題点 mogstored からの Content-Type ヘッダがでたらめ 出来れば Etag だとか Last-Modified とか自動的にあると嬉しい Cache 系リクエストヘッダに応じて tracker に問い合わせて、よしなに処理 今、作ってます orz… 35. まとめ (3) MogileFS の plugin 開発まとめ plugin 開発は わりと 簡単 MultiHook プラグイン推奨 ( ないと拡張性が乏しすぎ ) ロギングは適宜方法を選ぶと良い MogileFS について分からない人は Software Design 9, 10, 11 月号 を買うべし!w 36.