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

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

Kazunori Jo
February 03, 2017

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

Kazunori Jo

February 03, 2017
Tweet

More Decks by Kazunori Jo

Other Decks in Programming

Transcript

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

    View full-size slide

  2. 背景
    • 今⽇では数多くのクラウドストレージサービスがある
    • Dropbox, Google Drive, iCloud Drive, OneDrive, etc...
    • いくつかのサービスではローカルにファイルを同期をせずオン
    ライン上に置いたままローカルのファイルブラウザから閲覧で
    きるものが存在する
    • そこでファイルの種類に応じてキャッシュをすることで、適切
    にアクセスを考慮できればオンライン上にあるファイルのアク
    セスを⾼速化できるのではないかと考えた
    2

    View full-size slide

  3. 背景
    • クラウドストレージのPCにあるストレージとの統合が進む
    • iCloud Drive
    • ローカルにあるディレクトリの同期
    • リモートにあるファイルをローカルにあるかのように振る舞

    • iCloud DriveはmacOSの機能であるためmacOSでのみ提供
    3

    View full-size slide

  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

    View full-size slide

  5. 先⾏事例
    • rclone3
    • クラウドストレージでファイルの操作やローカルとの同期を⾏
    うCUIツール
    • マウントポイントにリモートのファイルをマウントするモード
    が存在
    • ファイル情報のキャッシュは⾏うがプロセスを終了すると破棄
    5
    3 http://rclone.org/

    View full-size slide

  6. ⽬的
    • アクセスパターンを考慮したプリフェッチやキャッシュ戦略を⾏う
    • 低速なネットワーク回線でも快適に利⽤できるようにする
    6

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  13. 実装
    13
    Client
    MugenFS
    BoltDB
    Google Drive
    exist?
    hit!
    FUSE
    Filesystem
    run REST API
    read

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  16. キャッシュ戦略例: 動画先読み
    • ファイル名などで判定
    • シリーズであれば 第1話, ep.1
    といった類似したファイル名
    で複数のファイルが存在
    • 次に開かれるファイルを予測
    し、あらかじめダウンロード
    16
    Client hogehoge 第1話.mp4
    hogehoge 第2話.mp4
    hogehoge 第3話.mp4
    MugenFS

    View full-size slide