file system
いつかのなにかのメモがあったので一応載せておく。
- データの共有は分散システムにおいての基本である
- 分散ファイルシステムはマルチプロセスで長期間にわたり、安全にデータを共有できるようになっている。
- 構成
- 多くは昔ながらのクラサバ構成
- 分散ファイルサーバも存在する(中央サーバがない)
- 中央サーバでのファイル共有
- Sun Microsystem の NFS(Network File System)はとても有名
- NFS を標準の構成例として扱う
- NFSv3, NFSv4 に焦点を絞り、それらの違いについても説明する
- 基本アイディア:Remote Access Model
- どのサーバもサーバ自身のローカルファイルを標準的な方法で見せるようになっている。
- ファイルの内部的な管理方法がどうであれ、標準化されたアクセス方法でファイルを扱うことができる。
- NFSはファイルにアクセスするためのプロトコルとセット。(プロトコルも含めて標準化している)
- 根底にあるのは Remote File Service
- クライアントはリモートサーバで管理されているファイルに透過的にアクセスできる。
- クライアントは実際のファイルの場所を知りません。(リモートファイルサーバのどの場所にファイルがあるかは知らない。場所を隠蔽している。)
- クライアントは自身のローカルファイルにアクセスするのと似たような方法でリモートファイルにアクセスできる。
- サーバがインターフェースを提供する。
- どのサーバもサーバ自身のローカルファイルを標準的な方法で見せるようになっている。
- 基本アイディア: Upload/Download Model
- クライアントはリモートファイルをダウンロードした上で、ダウンロード後のファイルに変更を行い、リモートサーバへアップロードする。
- FTPはこの仕組み。
- 中央サーバでのファイル共有
- NFS
- クライアントはリモートファイルシステムに対して、クライアント自身のOSに実装されたシステムコールを使ってアクセスする。
- ただし、このシステムコールはVirtualFileSystem に対するインターフェースに変更される。
- これは異なるファイルシステムにアクセスする際のデファクトスタンダードになっている。
- VFSレイヤを通った命令は、ローカルファイルにアクセスするものもあれば、リモートファイルにアクセスするものもある。
- VFSレイヤを通った命令はLocal file system interface または NFS client を通ることになる。VFSレイヤを挟むことで、リモートファイル、ローカルファイルへのアクセス方法を共通化している。
- すべてのクライアントサーバ間の通信はRPCで行われる。
- ただし、このシステムコールはVirtualFileSystem に対するインターフェースに変更される。
- NFSサーバはクライアントの要求に答える。
- RPC stub はリクエストを整理してNFSサーバが標準的なVFSファイル操作に変換する。そしてリクエストは
- local file system がどうであれ気にしない。
- クライアントはリモートファイルシステムに対して、クライアント自身のOSに実装されたシステムコールを使ってアクセスする。
- File System Model
- NFS の FileSystemModel
- Unixベースのものとほぼ同じ。
- ハードリンクをサポート
- ファイル名が存在するが、Unixのようなアクセス方法でもアクセス可能
- ネームサービス内でファイル名を検索したのちにアクセスハンドラを得る
- NFSv3->NFSv4
- 4まではステートレスとして扱っていた。
- remove
- v4: どんなファイルでも削除する。ディレクトリ含む。
- v3以前: ディレクトリ削除には rmdirが必要
- file open/close
- v4: クライアントにファイルの開閉を許可している。
- 存在しないファイルを開くと、ブランクファイルが自動的に作成される。
- closeするとクライアントがサーバにメッセージを送り、サーバは保持していたファイルの状態を開放する。
- v3以前: クライアントは直接ファイルを開閉できない。
- v4: クライアントにファイルの開閉を許可している。
- NFS の FileSystemModel