Prettyfs

2,565 views

Published on

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,565
On SlideShare
0
From Embeds
0
Number of Embeds
8
Actions
Shares
0
Downloads
10
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Prettyfs

  1. 1. PrettyFS perl による分散ファイルストレージ ふしはらかん ( 株式会社モバイルファクトリー )
  2. 2. 自己紹介 <ul><li>伏原幹(ふしはらかん)
  3. 3. 株式会社モバイルファクトリー所属 </li><ul><li>wassrをどうぞよろしく </li></ul><li>過去に作ったもの </li><ul><li>wema (付箋wiki) perl 関係ない
  4. 4. wasaco (wassr client) perl関係ない
  5. 5. xircd (irc server) perl製 </li></ul></ul>
  6. 6. agenda <ul><li>Webサービスでのファイルの扱い
  7. 7. 分散ファイルストレージ
  8. 8. mogilefsの特徴と不満
  9. 9. prettyfsの概要 </li></ul>
  10. 10. Webサービスとファイル <ul><li>ある程度大きなファイルをどう扱うか </li><ul><li>画像(写真、イラスト)
  11. 11. 音声(podcast, 着うた着メロ)
  12. 12. 動画 </li></ul><li>ユーザーのアップロードするファイルの置場 </li><ul><li>ローカルに保存
  13. 13. DB(RDBMS)に保存 </li></ul></ul>
  14. 14. ローカル保存 <ul><li>処理は簡単(普通のfile read/write)
  15. 15. app serverが分散している場合 </li><ul><li>NFSでディスク共有 </li><ul><li>ディスク障害が心配…… </li></ul><li>rsync等でファイル同期 </li><ul><li>全app serverに配布するのは勿体無い </li></ul></ul></ul>
  16. 16. DBに保存 <ul><li>app serverが分散していても平気 </li><ul><li>MySQLのBLOBとかでつっこむ </li></ul><li>検索しやすい
  17. 17. パフォーマンスに課題 </li></ul>
  18. 18. そこで分散ファイルストレージ <ul><li>サーバの追加で容量を拡張できる
  19. 19. ファイルの種類に合わせた冗長性を確保
  20. 20. 実際のソフトウエア </li><ul><li>mogilefs
  21. 21. livedoorでのapache+mod_perlによる実装
  22. 22. (amazon S3) </li></ul></ul>
  23. 23. mogilefsとは? <ul><li>perlで実装された分散ファイルストレージ
  24. 24. Brad Fitzpatrick氏が開発
  25. 25. trackとstore(とperlbal)で構成されている </li></ul>
  26. 26. mogilefsの構成 store store store store tracker tracker client perlbal
  27. 27. tracker <ul><li>clientとやりとりする </li><ul><li>ファイルの登録
  28. 28. ファイルの取得
  29. 29. storeからファイルを参照するURLの一覧を返す(後述) </li></ul></ul>
  30. 30. store <ul><li>ファイルを保存する
  31. 31. 実体はWebDAVに対応したHTTPサーバ
  32. 32. trackerが複数のstoreにファイルを保存する </li></ul>
  33. 33. mogileのファイル管理 <ul><li>device </li><ul><li>store内のストレージ最小単位 </li></ul><li>class </li><ul><li>保存するファイルのクラス
  34. 34. class毎に幾つのdeviceにファイルを保存するか決められる </li></ul></ul>ファイル A ファイル B
  35. 35. perlbal <ul><li>Perlで実装されたロードバランサー
  36. 36. X-REPROXY-URL </li><ul><li>裏側のappが↑のURLを返すとperlbalがそのファイルを取りにいって返す
  37. 37. trackerが返すstoreのURL(s)を渡して使える
  38. 38. storeは適切なheader(content-typeとか)を返さないのでappで頑張る </li></ul></ul>
  39. 39. mogilefsの問題 <ul><li>実質perlbalが前提
  40. 40. 同じキーのデータを更新するとstoreのURLが変わる(->X-REPROXY-CACHE-FORを迂闊に使えない)
  41. 41. class,deviceの概念が無駄に複雑
  42. 42. 運用処理の動作が不安定(均等化、store毎コピーなど) </li></ul>
  43. 43. 不満があるなら <ul><li>作ればいい! </li></ul>
  44. 44. prettyfs <ul><li>手軽に使える「かわいい」分散ファイルストレージ
  45. 45. 1hostに1対以上のtracker,storeが動く前提
  46. 46. trackerがrevers proxyとしても動く </li><ul><li>perlbal不要(ただしロードバランサはあったほうが良いかも?) </li></ul></ul>
  47. 47. prettyfsの起動 <ul><li>ファイルとシステムの情報を記録するdbへの接続オプションを設定に書いて起動 </li><ul><li>db層を抽象化してあるので、RDBMSを使うこともKVSを使うこともできる
  48. 48. ファイルコピー数も指定できる </li></ul></ul>
  49. 49. ファイルの登録 <ul><li>クライアントからファイルを登録する </li><ul><li>content-typeなど、出力時に指定したいHTTP headerを同時に指定できる
  50. 50. trackerでファイルを受け付け
  51. 51. workerも抽象化してあるので、job queueにどれを使うか、storeへの配置をどうやるか、等選べる </li></ul></ul>
  52. 52. ファイルの取得 <ul><li>mogileと同じ、クライアントによるデータ、store URLの取得も可能
  53. 53. trackerがhttpd(storeに対するrevers proxy)になってる </li><ul><li>http://tracker/filekey のようなURLで直接データ取得ができる
  54. 54. ↑のURLはデータ更新しても当然不変 </li></ul></ul>
  55. 55. 運用 <ul><li>mogilefs+αな管理 </li><ul><li>起動中にtracker+storeを追加
  56. 56. 障害の発生したstoreを切り離す
  57. 57. storeからstoreへファイルを全コピー
  58. 58. 全storeの使用量が均質化するようファイル移動 </li></ul></ul>
  59. 59. 今後の展望 <ul><li>とりあえず公開したい
  60. 60. trackerをplackで動くように
  61. 61. worker, dbの種類を増やす
  62. 62. パフォーマンス向上 </li></ul>

×