[WIP] MugenFS:クラウドストレージ利⽤時におけるキャッシュ戦略Arch B2 itochan1
View Slide
背景• 今⽇では数多くのクラウドストレージサービスがある• Dropbox, Google Drive, iCloud Drive, OneDrive, etc...• いくつかのサービスではローカルにファイルを同期をせずオンライン上に置いたままローカルのファイルブラウザから閲覧できるものが存在する• そこでファイルの種類に応じてキャッシュをすることで、適切にアクセスを考慮できればオンライン上にあるファイルのアクセスを⾼速化できるのではないかと考えた2
背景• クラウドストレージのPCにあるストレージとの統合が進む• iCloud Drive• ローカルにあるディレクトリの同期• リモートにあるファイルをローカルにあるかのように振る舞う• iCloud DriveはmacOSの機能であるためmacOSでのみ提供3
先⾏事例• iCloud Drive1• “デスクトップ” と “書類” ディレクトリをiCloud上に同期• リモートにあるファイルをローカルにあるかのように振る舞う• macOSの機能であるためmacOSでのみ提供• Dropbox: Smart Sync2• 個別のファイル単位でオンラインのみ、ローカルに保存を選択• ファイルサイズなどの情報はローカルにキャッシュ• macOSではカーネル拡張を使⽤41 https://www.apple.com/jp/icloud/icloud-drive/2 https://www.dropbox.com/help/9293
先⾏事例• rclone3• クラウドストレージでファイルの操作やローカルとの同期を⾏うCUIツール• マウントポイントにリモートのファイルをマウントするモードが存在• ファイル情報のキャッシュは⾏うがプロセスを終了すると破棄53 http://rclone.org/
⽬的• アクセスパターンを考慮したプリフェッチやキャッシュ戦略を⾏う• 低速なネットワーク回線でも快適に利⽤できるようにする6
⼿法7Client指定したマウントポイントにFUSEのファイルシステムをマウント (e.g. ~/drive)~/driveFUSEFilesystemmount
⼿法8Clientこのとき、ファイルシステム上にはクラウドストレージに置かれているファイル・ディレクトリを表⽰FUSEFilesystem~/driveCloud Storagerequest
⼿法9ClientFUSEを通してREADがあればクラウドストレージ上のディレクトリ内にあるデータをキャッシュ動画や⽂書などファイルの種類によってキャッシュ戦略を変えるFUSEFilesystem~/driveresponseCacheCloud Storagestoreread
⼿法10Client⼀度アクセスしたメタデータ・ファイルはキャッシュから参照FUSEFilesystem~/driveCacheCloud Storageexist?readhit!
成果: MugenFS• Google DriveのREST APIを⽤いて認証• Google Driveに格納されているファイルのディレクトリのメタデータは⼀度取得されたらKVSにキャッシュする• ファイルの属性の取得など何度も呼ばれることがある• 毎度APIを叩いていてはAPIの制限にも達する可能性がある111 https://github.com/hanwen/go-fuse2 https://github.com/boltdb/bolthttps://github.com/itochan/mugenfs
成果: MugenFS• Goを⽤いて実装• ファイルシステムを扱うため、オーバーヘッドを最⼩限にすることがねらい• FUSEにgo-fuse1を使⽤しているが、Cのlibfuseと⽐較しベンチマークでは5%程度の差で済んでいる• キャッシュシステムにBoltDB2を採⽤• KVS• SSDに最適化されている121 https://github.com/hanwen/go-fuse2 https://github.com/boltdb/bolthttps://github.com/itochan/mugenfs
実装13ClientMugenFSBoltDBGoogle Driveexist?hit!FUSEFilesystemrun REST APIread
今後の展望• マルチプラットフォーム対応• Goにはクロスコンパイラが搭載されている• メタデータをキャッシュする際パージするタイミングを決める• 単純な時限キャッシュであればリモートとの整合性が壊れる• キャッシュ戦略14
キャッシュ戦略• クラウドストレージ上にあるファイルのキャッシュ• ⼀度アクセスしたものをキャッシュする(LRU)• 拡張⼦で判定• READしようとしているファイルの先読み機能• 例: 動画の次を読み込む15
キャッシュ戦略例: 動画先読み• ファイル名などで判定• シリーズであれば 第1話, ep.1といった類似したファイル名で複数のファイルが存在• 次に開かれるファイルを予測し、あらかじめダウンロード16Client hogehoge 第1話.mp4hogehoge 第2話.mp4hogehoge 第3話.mp4MugenFS…