3 Fallbeispiel: Coda Nachfolger des Andrew File Systems (AFS) Carnegie Mellon University, 1990 (CMU) Zielsetzung hohe Verfügbarkeit bei mehreren 10.000 Client-Rechnern Fehlertoleranz abgesetzter Betrieb Client zeitweise ohne Kontakt zu einem Server z.b. mobiler Laptop 13 3.1 Architektur Kleine Gruppe von Servern, viele Clients Client: Virtue Server: Vice nach Tanenbaum, van Steen 14
3.1 Architektur (2) Client: Unix/Linux-Rechner mit VFS-Schnittstelle Client-seitige mplementierung als Prozess (Venus) Client Venus Vice Dämon Server VFS- Schnittst. BS UFS Coda Net BS Net UFS 15 3.2 Kommunikation RPC-basierte Kommunikation (RPC2) At-most-once-Semantik MultiRPC transparenter Aufruf mehrerer Server Verknüpfung mit Multithreading Anwendungsprogramm wird von RPC-Ausführung (insbes. bei MultiRPC) entkoppelt Venus und Vice bearbeiten mehrere Anfragen nebenläufig 16
3.3 Namensraum Globaler Dateinamensraum für gesamtes System im Gegensatz zu NFS typisch unter /afs Volumes (Partitionen) Gruppe von Dateien und Verzeichnissen eingehängt an bestimmter Stelle im Namensraum globaler Namensraum: /afs Wurzel Volume zentrale Zuordnung der Namen auf Server (Mounting) 17 3.4 Namensraum (2) nterne Dateibezeichner RVD (Replicated Volume D) + Dateinummer (File Handle) Abbildung über zentrale Datenbanken auf Server RVD File Handle Volume Replication DB VD Volume Location DB P-Adresse mit P-Adresse, VD (Volume D) und File Handle kann Datei zugegriffen werden mehrere VDs pro RVD für replizierte Volumes 18
3.5 Normalbetrieb Ein Server, keine Ausfälle Session-Semantik Änderungen sichtbar am Ende einer Session Session: open, read/write, ähnlich Transaktion Zugriffssemantik: exklusiver Schreibzugriff, nebenläufiger Lesezugriff (Leser-Schreiber-Koordinierung) Client hat lokalen Datei-Cache vor Zugriff (bei open) wird Datei in Cache geladen Server gibt Callback-Promise aus d.h. Server verspricht nvalidierungsnachricht zu versenden Server verschickt Callback-Break falls lokale Kopie invalidiert werden muss 19 3.5 Normalbetrieb (2) Beispiel: nebenläufiger Lese- und Schreibzugriff f Callback Break f f.open(rd) Client A Server f.open(wr) f f.open(wr) OK Client B kein Dateiversandt, falls lokale Kopie noch aktuell Session arbeitet auf bekannter Kopie zu Ende neue Sessions müssen evtl. neue Kopie anfordern 20
3.5 Normalbetrieb (3) Transaktionaler Betrieb alle Operationen sind Transaktionen open, read/write, rename chmod... striktes Zweiphasen-Lock-Protokoll alle gültigen Durchmischungen der Abläufe sind serialisierbar Sperren feingranularer Locks zu Beginn der Transaktion 21 3.5 Normalbetrieb (4) Feingranulare Locks pro Transaktion: Beispiel: Schreiben einer Datei Sperren Zugriffsrechte Modifikationszeit Dateilänge Dateiinhalt Lesesperre Schreibsperre Schreibsperre Schreibsperre 22
3.6 Serverausfall und Partitionierung Ein Server Versionsnummer für Datei (bei Server und Client) Überprüfung, ob Änderungen konsistent sind Server.Versionsnr + 1 = Client.Versionsnr + Zahl der lokalen Updates im Konfliktfall: manuelle Auflösung, Bestimmung der gültigen Version Mehrere replizierte Server Versionsnummernvektor (ähnlich Vektorzeit) Server kennt alle von anderen Servern durchgeführten Aktualisierungen Server und Client kennen Versionsvektor Überprüfung der Vektoren bei Aktualisierungen im Konfliktfall (Partitionierung und nebenläufige Aktualisierungen): manuelle Auflösung 23 3.6 Serverausfall und Partitionierung (2) Betrieb ohne Zugang zu einem Server z.b. Laptop zuhause oder unterwegs Coda erlaubt Zugriff zu Dateien aus lokalem Cache Konsistenzhaltung wie bei Partitionierung oder Serverausfall Füllen des Caches mit sinnvollen Dateien Protokollierung der zugegriffenen Dateien und Verzeichnisse automatisches Auffüllen des Caches mit interessanten Dateien ausgefeilte Heuristik besser als alle Dateien der letzten 24h Synchronisation nach Netzzugang identisch zur Zusammenführung nach Serverabsturz oder Partitionierung Konflikte möglich 24
3.7 Sicherheit Verschlüsselte Übertragung zwischen Vice und Virtue möglich symmetrische Verschlüsselung zentraler Authentisierungsdienst (ähnlich KDC) KDC = Key Distribution Center Einsatz einer Variante des Needham-Schröder-Protokolls 25