Upgrade to Pro — share decks privately, control downloads, hide ads and more …

MugenFS: クラウドストレージ利用時におけるキャッシュ戦略

MugenFS: クラウドストレージ利用時におけるキャッシュ戦略

A9f743358e6fcb5742e35156508ee4b7?s=128

Kazunori Jo

February 03, 2017
Tweet

Transcript

  1. [WIP] MugenFS: クラウドストレージ利⽤時に おけるキャッシュ戦略 Arch B2 itochan 1

  2. 背景 • 今⽇では数多くのクラウドストレージサービスがある • Dropbox, Google Drive, iCloud Drive, OneDrive,

    etc... • いくつかのサービスではローカルにファイルを同期をせずオン ライン上に置いたままローカルのファイルブラウザから閲覧で きるものが存在する • そこでファイルの種類に応じてキャッシュをすることで、適切 にアクセスを考慮できればオンライン上にあるファイルのアク セスを⾼速化できるのではないかと考えた 2
  3. 背景 • クラウドストレージのPCにあるストレージとの統合が進む • iCloud Drive • ローカルにあるディレクトリの同期 • リモートにあるファイルをローカルにあるかのように振る舞

    う • iCloud DriveはmacOSの機能であるためmacOSでのみ提供 3
  4. 先⾏事例 • iCloud Drive1 • “デスクトップ” と “書類” ディレクトリをiCloud上に同期 •

    リモートにあるファイルをローカルにあるかのように振る舞う • macOSの機能であるためmacOSでのみ提供 • Dropbox: Smart Sync2 • 個別のファイル単位でオンラインのみ、ローカルに保存を選択 • ファイルサイズなどの情報はローカルにキャッシュ • macOSではカーネル拡張を使⽤ 4 1 https://www.apple.com/jp/icloud/icloud-drive/ 2 https://www.dropbox.com/help/9293
  5. 先⾏事例 • rclone3 • クラウドストレージでファイルの操作やローカルとの同期を⾏ うCUIツール • マウントポイントにリモートのファイルをマウントするモード が存在 •

    ファイル情報のキャッシュは⾏うがプロセスを終了すると破棄 5 3 http://rclone.org/
  6. ⽬的 • アクセスパターンを考慮したプリフェッチやキャッシュ戦略を⾏う • 低速なネットワーク回線でも快適に利⽤できるようにする 6

  7. ⼿法 7 Client 指定したマウントポイントにFUSEのファイルシステムをマウン ト (e.g. ~/drive) ~/drive FUSE Filesystem

    mount
  8. ⼿法 8 Client このとき、ファイルシステム上にはクラウドストレージに置かれ ているファイル・ディレクトリを表⽰ FUSE Filesystem ~/drive Cloud Storage

    request
  9. ⼿法 9 Client FUSEを通してREADがあればクラウドストレージ上の ディレクトリ内にあるデータをキャッシュ 動画や⽂書などファイルの種類によってキャッシュ戦略を変える FUSE Filesystem ~/drive response

    Cache Cloud Storage store read
  10. ⼿法 10 Client ⼀度アクセスしたメタデータ・ファイルはキャッシュから参照 FUSE Filesystem ~/drive Cache Cloud Storage

    exist? read hit!
  11. 成果: MugenFS • Google DriveのREST APIを⽤いて認証 • Google Driveに格納されているファイルのディレクトリの メタデータは⼀度取得されたらKVSにキャッシュする

    • ファイルの属性の取得など何度も呼ばれることがある • 毎度APIを叩いていてはAPIの制限にも達する可能性がある 11 1 https://github.com/hanwen/go-fuse 2 https://github.com/boltdb/bolt https://github.com/itochan/mugenfs
  12. 成果: MugenFS • Goを⽤いて実装 • ファイルシステムを扱うため、オーバーヘッドを最⼩限にす ることがねらい • FUSEにgo-fuse1を使⽤しているが、Cのlibfuseと⽐較しベンチ マークでは5%程度の差で済んでいる

    • キャッシュシステムにBoltDB2を採⽤ • KVS • SSDに最適化されている 12 1 https://github.com/hanwen/go-fuse 2 https://github.com/boltdb/bolt https://github.com/itochan/mugenfs
  13. 実装 13 Client MugenFS BoltDB Google Drive exist? hit! FUSE

    Filesystem run REST API read
  14. 今後の展望 • マルチプラットフォーム対応 • Goにはクロスコンパイラが搭載されている • メタデータをキャッシュする際パージするタイミングを決める • 単純な時限キャッシュであればリモートとの整合性が壊れる •

    キャッシュ戦略 14
  15. キャッシュ戦略 • クラウドストレージ上にあるファイルのキャッシュ • ⼀度アクセスしたものをキャッシュする(LRU) • 拡張⼦で判定 • READしようとしているファイルの先読み機能 •

    例: 動画の次を読み込む 15
  16. キャッシュ戦略例: 動画先読み • ファイル名などで判定 • シリーズであれば 第1話, ep.1 といった類似したファイル名 で複数のファイルが存在

    • 次に開かれるファイルを予測 し、あらかじめダウンロード 16 Client hogehoge 第1話.mp4 hogehoge 第2話.mp4 hogehoge 第3話.mp4 MugenFS …