Back to IF3130 Sistem Paralel dan Terdistribusi

Topic: Fondasi Distributed File System & Network File System (NFS)

Questions/Cues

  • Abstraksi File System (6 Modul)

  • Operasi File System Linux (System Calls)

  • Tantangan Utama DFS

  • Arsitektur Client-Server NFS

  • NFS Server Operations (Detail)

  • Statelessness pada NFS

  • Mekanisme Mounting (Hard vs Soft)

  • Automounter (Autofs)

  • Strategi Caching (Client vs Server)

  • Masalah Konsistensi Cache

Reference Points

  • Slides: IF3130-15-Distributed Filesystem-2022.pdf

  • Fokus: Protokol, Operasi, dan Arsitektur

1. Abstraksi & Karakteristik File System

Sebelum masuk ke sistem terdistribusi, kita perlu memahami bagaimana File System dibangun secara lokal. Implementasi umumnya menggunakan model berlapis (layered model) yang terdiri dari modul-modul berikut:

  1. Modul Direktori: Bertanggung jawab memetakan nama file (teks) ke file ID unik (seperti Inode pada Unix).

  2. Modul File: Memetakan file ID ke data file fisik tertentu.

  3. Modul Access Control: Memeriksa izin (permission) user sebelum operasi dilakukan (Read/Write/Exec).

  4. Modul File Access: Menangani operasi baca/tulis data atau atribut file.

  5. Modul Blok: Mengelola akses dan alokasi blok-blok penyimpanan di disk.

  6. Modul Device: Menangani operasi I/O disk fisik dan buffering.

Atribut File:

File system tidak hanya menyimpan data, tapi juga metadata vital: Panjang file, Timestamp (Creation, Read, Write, Attribute change), Reference count, Owner, File type, dan Access Control List (ACL).

2. Operasi File System Standar (Linux)

Sistem operasi menyediakan antarmuka (System Calls) untuk manipulasi file. Dalam DFS, operasi ini harus ditiru atau diteruskan ke jaringan.

  • open(name, mode): Membuka file, mengembalikan file descriptor.

  • create(name, mode): Membuat file baru.

  • read(fd, buffer, n) & write(fd, buffer, n): Transfer data dari/ke buffer memori.

  • lseek(fd, offset, whence): Memindahkan pointer baca/tulis (random access).

  • close(fd): Menutup file & melepas resource.

  • unlink(name): Menghapus nama file dari direktori (delete).

  • link(name1, name2): Membuat nama alias (hard link).

  • stat(name, buffer): Mengambil atribut file.

3. Distributed File System (DFS): Motivasi & Tantangan

Mengapa DFS?

  • Sharing: Memungkinkan kolaborasi data antar user tanpa duplikasi manual.

  • Mobility: User tidak terikat pada satu mesin fisik; lingkungan kerja bisa berpindah.

  • Scalability: Kemampuan menangani pertumbuhan data dan beban akses yang besar.

Tantangan Desain:

  • Performance: Akses jaringan jauh lebih lambat dari disk lokal. Bagaimana membuatnya terasa cepat?

  • Availability: Server bisa mati. Bagaimana agar klien tetap bisa bekerja?

  • Consistency: Jika dua orang mengedit file sama, siapa yang menang?

  • Transparency: User tidak boleh sadar bahwa file ada di seberang lautan (Access, Location, Mobility, Scaling Transparency).

4. Network File System (NFS) - Arsitektur

NFS (Sun Microsystems) adalah standar industri untuk DFS berbasis UNIX.

Komponen Arsitektur:

  • Virtual File System (VFS): Layer abstraksi di kernel klien. Ini memisahkan operasi file generik dari implementasi spesifik.

    • Jika file lokal diteruskan ke UNIX File System.

    • Jika file remote diteruskan ke NFS Client.

  • NFS Client: Stub yang membungkus operasi file menjadi request RPC (Remote Procedure Call) via jaringan.

  • NFS Server: Menerima request RPC, melakukan operasi fisik di disk server melalui VFS lokal server, dan mengembalikan hasil.

Protokol & Operasi RPC NFS:

Protokol NFS mendefinisikan prosedur RPC yang mirip dengan system call lokal, namun disesuaikan untuk jaringan:

  • lookup(dirfh, name): Mencari file dalam direktori, mengembalikan File Handle (fh).

  • create, remove, rename: Manipulasi file/direktori.

  • read(fh, offset, count): Membaca data. Perhatikan parameter offset (stateless).

  • write(fh, offset, count, data): Menulis data.

  • getattr, setattr: Manipulasi metadata.

  • symlink, readlink: Dukungan untuk symbolic link.

  • mkdir, rmdir, readdir: Operasi direktori. readdir menggunakan cookie untuk enumerasi stateless.

5. Stateless Server & Konsekuensinya

Salah satu filosofi desain terpenting NFS adalah Stateless Server.

  • Definisi: Server tidak menyimpan informasi tentang keadaan klien antara request satu dengan lainnya. Server tidak tahu file apa yang sedang “terbuka” oleh klien.

  • Implikasi: Setiap request RPC harus self-contained (lengkap).

    • Request read harus menyertakan offset absolut, karena server tidak menyimpan “read pointer”.

    • Request harus menyertakan kredensial autentikasi setiap saat.

  • Keuntungan (Fault Tolerance): Jika server crash dan restart, tidak ada state yang hilang. Klien cukup mengirim ulang request (retry) dan server akan memprosesnya seolah tidak terjadi apa-apa. Tidak perlu prosedur recovery yang rumit.

6. Mekanisme Mounting & Automounter

Agar file remote terlihat, ia harus di-Mount ke pohon direktori lokal.

  • Mount Service: Proses user-level di server yang mengecek /etc/exports untuk mengizinkan akses.

  • Hard Mount: Jika server mati, aplikasi klien yang mengakses file akan terblokir (hang) selamanya sampai server hidup. Ini menjamin integritas data (tidak ada error “file not found” palsu).

  • Soft Mount: Jika server mati, setelah beberapa kali retry, klien menyerah (timeout) dan mengembalikan error ke aplikasi. Berisiko data korup tapi aplikasi tidak hang.

  • Automounter (autofs): Solusi cerdas di mana direktori remote hanya di-mount saat diakses dan di-unmount otomatis setelah periode tidak aktif. Ini meningkatkan efisiensi dan ketahanan terhadap server yang down sementara.

7. Performa & Caching (Kunci Kecepatan NFS)

Tanpa caching, NFS akan sangat lambat karena setiap akses byte butuh RPC.

A. Client Caching:

  • Read-ahead: Klien meminta blok data berikutnya sebelum aplikasi memintanya, mengantisipasi pembacaan sekuensial.

  • Delayed-write: Saat aplikasi menulis, data disimpan di buffer memori klien dulu. Data baru dikirim ke server secara batch atau saat file ditutup (close).

  • Masalah Konsistensi: Klien A menulis di cache, Klien B membaca file yang sama dari server (stale data).

  • Validasi Cache: Klien mengecek validitas data cache dengan membandingkan timestamp modifikasi (Tm) file di cache (Tc) dengan di server (Ts).

    • Valid jika: .

B. Server Caching:

  • Server menggunakan RAM untuk buffer data sebelum ke disk.

  • Risiko: Jika server crash sebelum write di RAM turun ke disk, data hilang padahal klien mengira sukses.

  • Solusi: NFS v2 mewajibkan synchronous write (tulis ke disk dulu baru balas OK), yang lambat. NFS v3 memperkenalkan commit operation untuk performa lebih baik.

Summary

NFS menyediakan abstraksi Distributed File System yang transparan melalui mekanisme Virtual File System (VFS) dan komunikasi RPC. Desain utamanya berfokus pada Stateless Server untuk menyederhanakan penanganan kegagalan (crash recovery), di mana setiap operasi bersifat mandiri (idempotent). Namun, pendekatan ini menuntut mekanisme Caching yang agresif di sisi klien (untuk performa) dan manajemen konsistensi yang hati-hati (validasi timestamp) serta opsi Mounting (Hard/Soft/Auto) untuk menyeimbangkan antara reliabilitas dan responsivitas aplikasi.