Überblick. Verteilte Systeme - Übung. VS-Übung. RPC-Semantiken Fehler bei Fernaufrufen Fehlertolerante Fernaufrufe. Tobias Distler, Michael Gernoth

Ähnliche Dokumente
Fehlerquellen. Überblick. Einordnung. Fehlerquellen

Remote Method Invocation

E.1 Object Request Brokers

Systemprogrammierung. Projekt: Java RMI. Wintersemester 2006 / 2007

Einstieg in die Informatik mit Java

Innere Klassen. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java

Parallele Prozesse. Prozeß wartet

B Java RMI B.2 B.4. 1 Java. 1.2 Methoden. 1.1 Objekte (2) 1.1 Objekte. Objektorientierte Sprache. Klassenbeschreibung. Methode ist eine Art Funktion

Mobile und Verteilte Datenbanken

Java-Programmierung. Remote Method Invocation - RMI

Programmieren II. Timer. Vorlesung 11. Handout S. 1. Martin Schultheiß. Hochschule Darmstadt Sommersemester Timer. Sockets.

Anleitung. Ein einfaches RMI-Beispiel. (ab Java 5.0) c Y. Pfeifer. (Juni 2014)

Mobile und Verteilte Datenbanken

Praktikum Verteilte Anwendungen

Java Remote Method Invocation (RMI)

Themen. Web Service - Clients. Kommunikation zw. Web Services

Remote Method Invocation

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 14/15. Kapitel 11. Fehler und Ausnahmen 1

7.1.1 Grundzüge der Fernaufruf-Implementierung

Java RMI Remote Method Invocation

Zwischenbericht Diplomarbeit Entwicklung einer Laufzeitumgebung für Komponenten mit Ressourcenanforderungen

7. Schnittstellen Grundlagen zu Schnittstellen. 7. Schnittstellen

Musterlösung Übungsblatt 2 Netzprogrammierung WS 05/06

1 Abstrakte Klassen, finale Klassen und Interfaces

9. Remote Method Invocation Grundlagen der Programmierung II (Java)

Probeklausur: Programmierung WS04/05

3 Programmiermodelle für parallele und verteilte Systeme

Kapitel 6. Vererbung

F.1 Überblick. 1 RPC-System in Aufgabe 3. Kommunikationsschicht: tauscht Daten zwischen zwei Rechnern aus

Repetitorium Informatik (Java)

Kapitel 6. Vererbung

Grundlagen der Programmierung Prof. H. Mössenböck. 16. Ausnahmen (Exception Handling)

Prinzipien Objektorientierter Programmierung

Kapitel 6. Vererbung

Grundlagen verteilter Systeme

2. Hintergrundverarbeitung in Android: Services und Notifications

Kapitel 9. Programmierkurs. Attribute von Klassen, Methoden und Variablen. 9.1 Attribute von Klassen, Methoden und Variablen

2.2 Prozesse in Java

Java Fehlerbehandlung

Dr. Monika Meiler. Inhalt

Aufgabe 1: Interprozesskommunikation In der Vorlesung wurden zentrale Aspekte von grundlegenden Kommunikationsmustern vorgestellt.

15 Fehlerobjekte: Werfen, Fangen, Behandeln

Tag 4 Repetitorium Informatik (Java)

Übungen zu Softwaretechnik

3 Objektorientierte Konzepte in Java

Grundzüge der Programmierung. Wiederverwendung VERERBUNG

Praktikum aus Softwareentwicklung 2, Stunde 8

Programmieren 2 Java Überblick

Parallele und funktionale Programmierung Wintersemester 2015/ Übung Abgabe bis , 10:00 Uhr

Client/Server-Programmierung

Client/Server-Programmierung

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...

3 Objektorientierte Konzepte in Java

OOP und Angewandte Mathematik. Eine Einführung in die Anwendung objektorientierter Konzepte in der angewandten Mathematik

-Testen verteilter Anwendungen

Szenario 3: Service mit erweiterter Schnittstelle

Warum EJB Technologie (1)?

1 Fehler-Objekte: Werfen, Fangen, Behandeln

Einstieg in die Informatik mit Java

7.4 Verteilungsabstraktion in heterogener Umgebung

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java

Verteilte Systeme - 5. Übung

Komponententechnologien Winter 2016/17. Komponenten. 2. Die Anfänge. Peter Sturm, Universität Trier 1

Probeklausur: Programmierung WS04/05

Stack stack = new Stack(); stack.push ("Würstchen"); string s = (string) stack.pop(); Console.WriteLine (s);

Klausur zur Vorlesung Einführung in Verteilte Systeme WS 05/06 Prof. Dr. Odej Kao 30. März 2006

9. Fehler und Ausnahmen Grundlagen der Programmierung 1 (Java)

CORBA. Systemprogrammierung WS

Info B VL 8: Abstrakte Klassen & Interfaces

Schedulingund Thread-Ausführer

1 Polymorphie (Vielgestaltigkeit)

Der lokale und verteilte Fall

Universität Augsburg, Institut für Informatik Sommersemester 2003 Prof. Dr. Bernhard Bauer 18. Oktober 2003 Stefan Fischer, Dr.

Java Vererbung. Inhalt

Beispiel für überladene Methode

J Fernmethodenaufrufe Remote Method Invocation (RMI)

Überblick über die Roblet -Technik

Vererbung & Schnittstellen in C#

7. Objektorientierte Softwareentwicklung/3. Informatik II für Verkehrsingenieure

Klausurvorbereitung VS1 (Prof. Brecht) (B0rg Edition)

Programmieren II. Remote Method Invocation (RMI) Heusch -- Ratz. Institut für Angewandte Informatik

Remote Methode Invocation (RMI) ETIS SS05

Konzepte von Betriebssystem-Komponenten Middleware RMI

Einstieg in die Informatik mit Java

Javakurs für Anfänger

Arten von Klassen-Beziehungen

Tutoraufgabe 1 (Zweierkomplement): Lösung: Programmierung WS16/17 Lösung - Übung 2

11. Komponenten Grundlagen der Programmierung 1 (Java)

Typumwandlungen bei Referenztypen

Entwurfsmuster und Frameworks Singleton

Universität Karlsruhe (TH)

8.1.5 Java RMI Remote Method Invocation

Universität Augsburg, Institut für Informatik Sommersemester 2005 Prof. Dr. Werner Kießling 15. Oktober 2005 Dr. Alfons Huhn, Timotheus Preisinger

Programmierkurs C++ Abstrakte Klassen und Methoden

2.13 Vererbung. Rainer Feldmann Universität Paderborn Technische Informatik für Ingenieure (TIFI) WS 09/ Article

Arten von Klassen-Beziehungen

Verteilte Systeme CS5001

Javakurs für Anfänger

Musterlösung Klausur SS 2004

Transkript:

Überblick Verteilte Systeme - Übung Friedrich-Alexander-Universität Erlangen-Nürnberg Lehrstuhl Informatik 4 (Verteilte Systeme und Betriebssysteme) www4.informatik.uni-erlangen.de Sommersemester 2009 Entwicklung eines eigenen Fernaufrufsystems Bereitstellung von Fehlertoleranz Orientierung an Java-RMI Simulation von Kommunikationsfehlern Client Server Client Server Stub Skeleton Stub Skeleton Host A Kommunikationsschicht Host B Host A Kommunikationsschicht Host B

Fehlerquellen Was kann da schon schief gehen? Anwendung (siehe Tafelübung zu Aufgabe 4) Beispiele Falsche Eingaben Programmierfehler in der Anwendung Keine im Fernaufruf begründeten Fehler Transparente Signalisierung Aus Sicht des Fernaufrufsystems:,,reguläres Verhalten Keine Fehlerbehandlung im Fernaufrufsystem Fehlerquellen Einordnung Was kann da schon schief gehen? Rechner (Client und/oder Server) Prozess-, Programm-, Rechnerabsturz Verzögerungen (z.b. aufgrund von Überlast) Kommunikation Nachrichten (Anfrage und/oder Antwort) -reihenfolgeänderung -korrumpierung -vervielfachung -verlust Verbindungs -verlangsamung -abbruch Im Fernaufruf begründete Fehler bzw. Ausnahmesituationen Rechner Lokaler Methodenaufruf Aufrufer und Aufgerufener in gleichem Maße betroffen Im Fehlerfall sind beide weg bzw. langsam Fernaufruf Aufrufer und Aufgerufener können unabhängig ausfallen Im Fehlerfall ist evtl. nur einer betroffen Kommunikation Lokaler Methodenaufruf Keine Netzwerkkommunikation Fehlerart nicht relevant Fernaufruf Temporäre oder sogar dauerhafte Fehler möglich Nicht alle Fehler lassen sich im Fernaufrufsystem tolerieren Konsequenz Das komplexere Fehlermodell macht es unmöglich Fernaufrufe vollständig transparent zu realisieren!

Fehlerbehandlung auf Fernaufrufsystemebene Fehlertolerierung Transparente Mechanismen (später mehr) Replikation Beliebig komplex Geringer Aufwand Tolerierung von wenigen (oder nur bestimmten) Fehlern Hoher Aufwand Tolerierung von vielen Fehlern Trotzdem: Nicht alle Fehler lassen sich tolerieren Fehlersignalisierung Benachrichtigung an den Benutzer des Fernaufrufsystems Notwendig wenn Fehler nicht toleriert werden konnten Benutzer des Fernaufrufsystems muss darauf vorbereitet sein Verletzung der Transparenzeigenschaften Signalisierung von Fernaufruffehlern in Java-RMI Exception-Klasse java.rmi.remoteexception Allgemein Oberklasse für alle Fernaufruf-Ausnahmesituationen Muss von jeder Methode einer Remote-Schnittstelle geworfen werden Verletzung der Zugriffstransparenz Beispiel public interface RemoteInterface extends Remote { public void foo () throws RemoteException ; Unterklassen ConnectException: Verbindungsaufbau fehlgeschlagen NoSuchObjectException: Remote-Objekt nicht (mehr) verfügbar ServerError: Auspacken der Anfrage, Ausführung der Methode oder Einpacken der Antwort fehlgeschlagen UnknownHostException: Remote-Host nicht bekannt Fehlererkennung bei Fernaufrufen Probleme Keine definitive Fehlererkennung (Liegt überhaupt ein Fehler vor?) Keine exakte Fehlerlokalisierung (Wo liegt der Fehler?) Beispiel Szenario: Client erhält keine Antwort auf seine Anfrage Mögliche Gründe Anfrage ging verloren Antwort ging verloren Server ausgefallen Server überlastet Netzwerk überlastet Konsequenz: Mindestens einer der beiden Fernaufruf-Teilnehmer kann nicht erkennen, ob (und wenn ja wo) ein Fehler vorliegt Eine präzise Fehlererkennung ist in verteilten Systemen (im Allgemeinen) nicht möglich!

Was beinhaltet Fehlertoleranz für Fernaufrufe? Kombinierter Ansatz Probleme Unpräzise Fehlererkennung kann zu inkonsistenten Sichtweisen führen, z.b. bei einer verlorenen Antwortnachricht: Client geht von einem Fehler aus, da er keine Antwort erhalten hat Server befindet sich im Normalzustand, da er die Antwort gesendet hat Wiederherstellung einer konsistenten Sichtweise erfordert weitere Kommunikation zwischen Client und Server Diese Nachrichten können ebenfalls Fehlern unterliegen Erneutes Senden und Ausführen einer Anfrage kann zu unerwünschten Zuständen führen Allgemeine Hilfsmittel Duplikaterkennung Idempotente Operationen Rollbacks ( Transaktionen) Fehlertolerantes Kommunikationsprotokoll Beispiel: TCP (statt UDP) Tolerierung von Nachrichten -reihenfolgeänderung -korrumpierung -vervielfachung -verlust Aufrufsemantiken Wiederherstellung konsistenter Sichtweisen von Client und Server Tolerierung von Verzögerungen (Rechner und/oder Netzwerk) Hinweise Alle durch das Kommunikationsprotokoll tolerierte Fehler sind ersatzweise durch eine entsprechende Aufrufsemantik tolerierbar Die optimale Kombination von Kommunikationsprotokoll und Aufrufsemantik hängt vom Einzelfall ab Idempotenz Bemerkung Im Folgenden wird die Tolerierung von Kommunikationsfehlern betrachtet, Rechnerausfälle werden ausgeklammert Die Tolerierung von Rechneraufällen erfordert Mechanismen zum Wiederanlaufen (z.b. Zustandswiederherstellung) Aus der Vorlesung bekannt Maybe At-Least-Once At-Most-Once Last-Of-Many Unterschiede Mehrmaliges Senden von Anfragen Aktualität der Antworten Anzahl der Ausführungen Idempotente Operationen? Antwortspeicherung Wie lange wird eine Antwort aufgehoben? Idempotente Funktionen (Mathematik) Definition f (x) = f (f (x)) Beispiele f (x) = c (konstante Funktion) f (x) = x 1 (Multiplikation mit 1) f (x) = x (Division durch 1) 1 Idempotente Operationen (Informatik) Eigenschaften Mehrfache Ausführung erzeugt stets den selben Rückgabewert Mehrfache Ausführung hinterlässt die Anwendung auf dem Server in stets dem selben Zustand Bankautomat-Beispiel Verwendung absoluter Beträge Achtung: nicht-triviale Implementierung, da zusätzliche Synchronisation und/oder Ausnahmebehandlung nötig

Antwortspeicherung At-{Least,Most-Once (Wiederkehrendes) Problem Server stellt eigene Ressourcen (Antwort-Cache) für (fehlertolerante) Fernaufrufe von Clients bereit Mit jedem neuen Fernaufruf werden zusätzliche Ressourcen belegt Wann können diese Ressourcen freigegeben, d.h. gespeicherte Antworten verworfen werden? Lösungsansätze (Kombinationen möglich bzw. nötig) Explizit Benachrichtigung durch Client oder Nachfrage vom Server Problem: Nicht alle Clients können oder wollen sich daran halten Implizit Bei neuem Fernaufruf eines Client wird die alte Antwort gelöscht Problem: Letzter Fernaufruf eines Client Timeout Antwortlöschung nach Ablauf eines fernaufrufspezifischen Timeout Als Rückfallposition immer nötig At-Least-Once (z.b. SUN-RPC) Funktionsweise Client wiederholt Anfrage, falls Antwort ausbleibt Client akzeptiert die erste Antwort, die ihn erreicht Eigenschaften Anfragen werden evtl. mehrfach ausgeführt Client verwendet evtl. veraltete Antwort At-Most-Once (z.b. Java-RMI) Funktionsweise Client wiederholt Anfrage, falls Antwort ausbleibt Server speichert Antworten Server sendet bei Anfragewiederholungen gespeicherte Antworten Eigenschaften Anfragen werden höchstens einmal ausgeführt Speichern von Antworten erforderlich Last-Of-Many Ein paar Worte zu Exactly-Once im lokalen Fall... Funktionsweise Client wiederholt Anfrage, falls Antwort ausbleibt Client akzeptiert nur Antwort auf seine aktuellste Anfrage Implementierung Fernaufruf muss eindeutig identifizierbar sein Client Remote-Objekt Remote-Methode Aufrufzähler Jede Fernaufrufnachricht muss eindeutig identifizierbar sein Anfragezähler Zuordnung: Antwort zu Anfrage Eigenschaften Keine Antwortspeicherung nötig Anfragen werden evtl. mehrfach ausgeführt Ideale Semantik: Beschreibt den lokalen, fehlerfreien Fall Aufrufer tätigt genau einen Aufruf Genau eine Methodenausführung Aufgerufener liefert genau eine Antwort Entscheidende Fragestellung bei Rechnerausfall Wurde die Methode vor dem Rechnerausfall noch ausgeführt? Idee: Ausführungs-Log (nur 1. & 2. At-Most-Once, nur 2. & 3. At-Least-Once) 1. Vor Ausführung: Anfrage in Log schreiben 2. Methodenausführung 3. Nach Ausführung: Ausführungsbestätigung in Log schreiben Reicht nicht aus, da Rechnerausfall zwischen 1. und 2., während 2. oder zwischen 2. und 3. stattgefunden haben könnte Die Realisierung von Exactly-Once ist (bereits) im lokalen (Fehler-)Fall nicht trivial!

Ein paar Worte zu Exactly-Once im lokalen Fall... Abhilfe: Transaktionale Systeme Funktionsweise Jede Operation ist eine Transaktion Transaktion muss explizit oder implizit gestartet (start) werden Transaktion muss explizit abgeschlossen (commit) werden Falls Transaktion abbricht: rollback Semantik Annäherung an Exactly-Once Last-One-Semantik Achtung: Für seiteneffektfreie Operationen manchmal auch als Exactly-Once bezeichnet Je nach Betrachtungsweise erlauben Transaktionen die Implementierung von Exactly-Once (oder auch nicht) Ein paar Worte zu Exactly-Once im verteilten Fall... Zusätzliches Problem Annahme: Exactly-Once/Last-One am Server implementiert Trotzdem: Unschärfe am Client Solange der Client-Stub keine Bestätigung vom Server hat, dass die Operation erfolgreich ausgeführt wurde, kann er seinem Aufrufer kein OK geben Diese Bestätigung kommt vielleicht nie... ( Netzwerkpartition) Konsequenz Permanente Kommunikationsfehler Weder Exactly-Once noch Last-One lassen sich in verteilten Systemen realisieren Temporäre Kommunikationsfehler Kommunikationsfehler lassen sich durch entsprechende tolerieren, Exactly-Once/Last-One analog zum lokalen Fall realisierbar Ob die Implementierung von Exactly-Once möglich ist, hängt sowohl im lokalen als auch im verteilten Fall von der (leider nicht einheitlichen) Definition ab! Übersicht Teilaufgaben Implementierung von Last-of-Many Implementierung von At-Most-Once Sabotage des Kommunikationssystems

Implementierung der Mögliche Timeout-Behandlung in Java java.util.timer Last-of-Many Fernaufruf-IDs Sequenznummern Timeouts At-Most-Once Antwort-Cache Erweiterte Synchronisierung Hinweis Die zum Einsatz kommende RPC-Semantik Maybe Last-of-Many At-Most-Once soll konfigurierbar sein! Klasse java.util.timer Allgemein Einfacher Scheduler Unterstützung ein- sowie mehrmaliger Task-Ausführung Task-Objekte: Instanzen von TimerTask-Unterklassen Methoden Einmalig auszuführenden Task ( Timeout-Handler) aufsetzen void schedule(timertask task, long delay) Timer beenden void cancel() Mögliche Timeout-Behandlung in Java java.util.timertask Mögliche Timeout-Behandlung in Java Beispiel Klasse java.util.timertask Allgemein Basisklasse für von Timer eingeplante Tasks Auszuführenden Task-Code in Unterklassen implementieren Methoden Task ausführen ( Timeout behandeln) abstract void run() Task abbrechen ( Timeout deaktivieren) boolean cancel() public class TimerExample { public static void main ( String [] args ) { Timer timer = new Timer (); TimerTask handler = new TimeoutHandler (); // Timeout auf 5 Sekunden setzen timer. schedule ( handler, 5000); // Zu ueberwachenden Code ausfuehren [...] // Timeout deaktivieren handler. cancel (); class TimeoutHandler extends TimerTask { public void run () { System. err. println (" ALARM!");

Sabotage des Kommunikationssystems Simulation von Kommunikationsfehlern Verlust von Nachrichten Verzögerung einzelner Nachrichten Vervielfachung von Nachrichten Tests Variation der Fehlerintensität Kombination verschiedener Fehlerarten Mögliche Implementierung Fehlerhafte VSConnection VSBuggyConnection Überschreiben von sendmessage(vsmessage msg) oder receivemessage()