Zusammenfassung VSS Inhalt 01 Charakteristische Eigenschaften Verteilter System ........................................................................... 9 Sicherheit............................................................................................................................................. 9 Transparenz ....................................................................................................................................... 10 02 Systemmodelle ................................................................................................................................. 10 Hardware- und Software-Servicesschichten ..................................................................................... 11 Systemarchitekturen ......................................................................................................................... 11 Entwurfsanforderungen ................................................................................................................ 12 Ubiquitäre Systeme ....................................................................................................................... 13 Grundlegende Systemmodelle .......................................................................................................... 13 Interaktionsmodell ........................................................................................................................ 13 Fehlermodell.................................................................................................................................. 14 Sicherheitsmodel ........................................................................................................................... 15 04 Interprozesskommunikation ............................................................................................................ 15 Anforderungen an eine Interprozesskomunikation .......................................................................... 16 Externe Darstellung und Marshalling ................................................................................................ 16 Probleme mit Little-(Intel)/Big-Endian (SPARC) ............................................................................ 16 Ansatz ............................................................................................................................................ 16 Existierende Externe Darstellungen: ............................................................................................. 16 Java 2 XML ......................................................................................................................................... 17 Referenzierung von entfernten Objekten ......................................................................................... 18 URI/URL in Java.............................................................................................................................. 18 Synchroner vs. Asynchroner IPC........................................................................................................ 18 Java und UDP ..................................................................................................................................... 19 Struktur eines UDP Programms ..................................................................................................... 19 Beispiel .......................................................................................................................................... 19 Java und TCP ...................................................................................................................................... 20 Struktur eines TCP Programmes.................................................................................................... 21 Beispiel .......................................................................................................................................... 21 Direkte Netzprogrammierung vs. Middleware ................................................................................. 24 Gruppenkommunikation ................................................................................................................... 24 IP-Multicast ................................................................................................................................... 24 05 Verteilte Objekte Entfernte Aufrufe................................................................................................. 25 Kommunikationsmöglichkeiten......................................................................................................... 25 Transparenz (Anforderung an kommunizierende Objektsysteme)................................................... 26 Middleware ....................................................................................................................................... 26 RRA Protokoll (Ansatz für Request-Reply Kommunikationsprotokolle)............................................ 26 Nachrichtenformate des Protokolls .............................................................................................. 27 Beispiel eines RequestReply-Protokolls HTTP ............................................................................... 27 Fehlermodell des Protokolls .......................................................................................................... 28 RPC: Remote Procedure Calls (RFC: Remote Function Call) .............................................................. 28 Remote Schnittstellen ................................................................................................................... 28 Schnittstellenbeschreibung (IDL = InterfaceDefinitionLanguage) ................................................. 29 RMI: Remote Method Invocation ...................................................................................................... 30 RMI Komponenten und Aufbau..................................................................................................... 31 Objektübergabe............................................................................................................................. 32 Weitere Begrifflichkeiten .............................................................................................................. 32 Java RMI............................................................................................................................................. 32 Vorteile von RMI............................................................................................................................ 33 Ziel ................................................................................................................................................. 33 Vorbedingung ................................................................................................................................ 33 Vorgehen Grob .............................................................................................................................. 33 Beispiel: Entwicklung einer RMI-Applikation ................................................................................ 34 06 Indirekte Kommunikation – Messaging............................................................................................ 37 Definition ........................................................................................................................................... 37 Modell-Ansatz ................................................................................................................................... 37 Anwendungsfälle ............................................................................................................................... 37 Gruppen-Kommunikation.................................................................................................................. 37 Prozess-Gruppen und Objekt-Gruppen ............................................................................................. 38 Offene und geschlossene Gruppen ................................................................................................... 38 Überlappende Gruppen..................................................................................................................... 38 Synchron und Asynchrone Systeme .................................................................................................. 38 Implementation ................................................................................................................................. 38 Zuverlässigkeit und Ordnung von Multicast .................................................................................. 38 Mitgliederverwaltung .................................................................................................................... 39 JGroups Toolkit .................................................................................................................................. 40 Channels ........................................................................................................................................ 41 JGroups Toolkit Codebeispiel ............................................................................................................ 41 Producer ........................................................................................................................................ 41 Consumer ...................................................................................................................................... 42 Publich-Subscribe System 1:n ........................................................................................................... 42 Publisher ........................................................................................................................................ 43 Subscriber ...................................................................................................................................... 43 Varianten ....................................................................................................................................... 43 Message Queues 1:1 (P2P) ................................................................................................................ 44 Messaging ...................................................................................................................................... 44 Daten Distributions Architekturen .................................................................................................... 44 Virtuell vollverknüpfte Netzwerke .................................................................................................... 45 Kommunikations-Pattern P2P ........................................................................................................... 45 Kommunikations-Pattern Publish-Subscribe ..................................................................................... 45 Kommunikationsmodelle .................................................................................................................. 45 Message-Struktur .............................................................................................................................. 45 Message Selektor .............................................................................................................................. 46 Einfacher Queue Sender und Receiver – Codebeispiel ..................................................................... 46 Publish Suscribe Codebeispiel ........................................................................................................... 46 Message Delivery .............................................................................................................................. 47 Distributed Shared Memory .............................................................................................................. 47 JavaSpaces ......................................................................................................................................... 47 Definitionen ................................................................................................................................... 47 JavaSpace Codebeispiel ................................................................................................................. 48 Transaktionen ................................................................................................................................ 48 08 Verteilte Dateisysteme ..................................................................................................................... 49 Eigenschaften von Dateisystemen / File System Design / Dateisystem Architektur ........................ 49 Dateisystem-Verwendungsstufen ................................................................................................. 49 AIP-Zugriffe: ................................................................................................................................... 50 Varianten verteilter Dateizugriff ................................................................................................... 50 Anforderungen an verteilte Dateisysteme .................................................................................... 50 Sun NFS (Network File System) ......................................................................................................... 51 Andrew File System (AFS) .................................................................................................................. 51 Zusammenfassung............................................................................................................................. 52 09 Namensdienste................................................................................................................................. 52 Definitionen ....................................................................................................................................... 52 Anforderungen an Verzeichnisdienste .............................................................................................. 53 Strategien zur Namensauflösung ...................................................................................................... 53 Iterativ ........................................................................................................................................... 53 Rekursiv ......................................................................................................................................... 53 Server-kontrolliert ......................................................................................................................... 53 DNS .................................................................................................................................................... 54 Aufgaben ....................................................................................................................................... 54 Ressourcen Records ...................................................................................................................... 54 Directory-, und Discoveryservices ..................................................................................................... 54 LDAP (Lightweight Directory Access Protocol) .................................................................................. 54 Typische Attribute laut RFC2256 ................................................................................................... 54 Ablauf LDAP Kommunikation ........................................................................................................ 55 Schema .......................................................................................................................................... 55 JNDI (Java Naming & Directory Interface) ......................................................................................... 55 10.1 Peer 2 Peer Systeme ...................................................................................................................... 56 Routing Overlays ............................................................................................................................... 56 Routing Problem ................................................................................................................................ 56 API für verteilte Hashtabelle (DHT) ............................................................................................... 56 Replikation (DHT) .......................................................................................................................... 56 DOLR Api ........................................................................................................................................ 57 Replikation (DOLR) ........................................................................................................................ 57 Pastry, Tapestry ............................................................................................................................. 57 Routing (Pastry, Tapestry) ............................................................................................................. 57 Zirkuläres Routing.......................................................................................................................... 57 Pastry Routing Beispiel .................................................................................................................. 57 Lokalität in P2P Systemen ................................................................................................................. 58 Lokalität in Tapestry / Tapistry’s Routing Algorithmus ................................................................. 58 10.2 Zeit und globale Zustände ............................................................................................................. 58 Uhren, Ereignisse und Prozesszustände ............................................................................................ 58 Synchronisierung physischer Uhren .................................................................................................. 59 Logische Zeit und logische Uhren ...................................................................................................... 60 Lamport ......................................................................................................................................... 61 VektorZeit ...................................................................................................................................... 62 Globale Zustände............................................................................................................................... 62 Schnappschuss - Algorithmus ........................................................................................................ 64 Anderer Ansatz zur Darstellung des Ablaufes bei der globalen Zustandsfindung ........................ 65 Deterministisch.............................................................................................................................. 66 Nicht-Deterministisch .................................................................................................................... 66 Zusammenfassung............................................................................................................................. 68 11.1 Koordination und Übereinstimmung ............................................................................................ 68 Verteilter wechselseitiger Ausschluss ............................................................................................... 68 Lösungsansatz lokal ....................................................................................................................... 68 Lösungsansatz im Netzwerk .......................................................................................................... 68 Verteilte Synchronisation .............................................................................................................. 69 Mutual Exclusion (ME)................................................................................................................... 69 Leistungsbewertung der Ausschlussalgorithmen.......................................................................... 69 Lösungsansatz Zentraler Server..................................................................................................... 70 Lösungsansatz Ring........................................................................................................................ 70 Ricard und Agrawala’s Algorithmus .............................................................................................. 70 Beispiel R&A .................................................................................................................................. 71 Multicast Synchronisation Beispiel................................................................................................ 71 Verteilte Lösung Beispiel ............................................................................................................... 72 Maekawa’s Algorithmus ................................................................................................................ 72 Resume .......................................................................................................................................... 73 Wahlen Algorithmen ......................................................................................................................... 73 Voraussetzungen ........................................................................................................................... 74 Leistungsbewertung der Algorithmen ........................................................................................... 74 Ring Algorithmus ........................................................................................................................... 74 Bewertung ..................................................................................................................................... 75 Bully-Algorithmus .......................................................................................................................... 76 Bewertung ..................................................................................................................................... 76 Multicast ............................................................................................................................................ 77 IP-Multicast ................................................................................................................................... 77 Konsens und verwandte Probleme ................................................................................................... 78 Byzantinische Generäle ................................................................................................................. 79 PAXOS ............................................................................................................................................ 80 11.2 Petrinetze ...................................................................................................................................... 82 Nebenläufige Systeme....................................................................................................................... 82 Grafische Komponenten.................................................................................................................... 83 Statische Modellbildung .................................................................................................................... 83 Regeln ............................................................................................................................................ 83 Dynamische Modellbildung ............................................................................................................... 84 Definitionen ................................................................................................................................... 84 Beispiel Petrinetz ............................................................................................................................... 84 Notation......................................................................................................................................... 84 Darstellung einer Transition .............................................................................................................. 85 Beispiel-Simulation ............................................................................................................................ 85 Erste Transaktionen....................................................................................................................... 85 Weitere mögliche Transaktionen .................................................................................................. 85 Beispiel: Dining Philosopher .............................................................................................................. 86 Strukturelemente .............................................................................................................................. 87 Strukturkombinationen ..................................................................................................................... 87 Erreichbarkeitsgraph ......................................................................................................................... 88 Definition Erreichbarkeit ............................................................................................................... 88 Beispiel Erreichbarkeitsgraph ........................................................................................................ 88 Beschränktheit............................................................................................................................... 89 Unabhängigkeit ............................................................................................................................. 89 Konflikt .......................................................................................................................................... 89 Deadlock Situation......................................................................................................................... 89 Tote, aktivierbare und lebendige Transitionen ................................................................................. 90 Petri-Netz als Matrix.......................................................................................................................... 90 Invarianten von Netzen ..................................................................................................................... 90 Standardaufgabe Petrinetze.............................................................................................................. 90 Petrinetze Aufgabe 2 ......................................................................................................................... 91 11.3 Messagebased Concurrency.......................................................................................................... 92 Begriffe .............................................................................................................................................. 92 Interprozesskommunikation ............................................................................................................. 92 Semantik ............................................................................................................................................ 92 Unterschied Operationale und Denotationale Semantik .............................................................. 92 Beispiel für die operationale Semantik ......................................................................................... 92 Beispiel für die denotationale Semantik ....................................................................................... 92 Beispiel für die axiomatische Semantik ......................................................................................... 93 Hoarsche Regeln für die Axiomatische Semantik .......................................................................... 93 Semantik in Concurrent Programmen ........................................................................................... 94 Grundprobleme bei der Beschreibung von concurrent Systemen: .............................................. 94 Synchronisationsmechanismen ......................................................................................................... 94 Ansatz CoRoutine .......................................................................................................................... 94 Ansatz Fork... Join .......................................................................................................................... 94 Ansatz cobegin...coend.................................................................................................................. 95 Ansatz process ............................................................................................................................... 95 Shared Variablen ............................................................................................................................... 95 Semaphoren .................................................................................................................................. 95 Conditional Critical Regions CCR ................................................................................................... 96 Monitor.......................................................................................................................................... 96 Message Passing ................................................................................................................................ 96 Beispiel .......................................................................................................................................... 97 Guarded Command ....................................................................................................................... 97 Actors (Higher Level Message Passing) ............................................................................................. 97 Beispiel: Chat ................................................................................................................................. 97 11.4 Modelierung verteilter und mobiler Systeme ............................................................................... 98 Formale Modelle ............................................................................................................................... 98 Labelled Transition System (LTS) ....................................................................................................... 98 Calculus of Communicating Systems (CCS) ....................................................................................... 99 Zündholz ........................................................................................................................................ 99 Kaffeemaschine ............................................................................................................................. 99 Kaffee- und Teemaschine .............................................................................................................. 99 1 Kaffeemaschine + 2 Programmierer ......................................................................................... 100 Restriction ................................................................................................................................... 100 Relabeling (konkretisierung abstrakter Strukturen).................................................................... 100 Parametrisierte Kanäle ................................................................................................................ 100 CCS to LTS ........................................................................................................................................ 100 19 Webservices ................................................................................................................................... 101 XML-RPC .......................................................................................................................................... 101 Language Mapping ...................................................................................................................... 101 Web-Services nächste Phase ........................................................................................................... 101 WSDL ............................................................................................................................................... 101 UDDI ................................................................................................................................................ 101 Referenzen ...................................................................................................................................... 102 SOAP – Simple Object Access Protocol ........................................................................................... 102 REST Design Pattern ........................................................................................................................ 103 CODE BEISPIELE ................................................................................................................................... 104 Bild Bitweise downloaden und speichern (mit Buffer) ................................................................... 104 Webseite mithilfe der Klassen URL, BufferedReader und InputStreamReader lesen .................... 104 JAVA-API .............................................................................................................................................. 105 01 Charakteristische Eigenschaften Verteilter System Definition „Verteiltes System“ „Bei einem verteilten System arbeiten Komponenten zusammen, die sich auf vernetzten Rechnern befinden und ihre Aktionen durch den Austausch von Nachrichten koordinieren“. Konsequenzen 1. Komponenten können nebenläufig arbeiten, 2. Komponenten können unabhängig voneinander ausfallen. 3. Es gibt keine globale Uhr, 4. Es ist schwierig einen globalen Zustand zu definieren. Besondere Anforderungen An die Fehlertoleranz, Nebenläufigkeit, Sicherheit, Offenheit (anpassbar an neue Anforderungen, Erweitern), Skalierbarkeit (Ressourcen sollen nur O(x) verhalten aufweisen, Leistungsengpässe verhindern (z.B. DNS durch Verteilung), Heterogenität und Transparenz (verbergen der Komplexität) Heterogen Unterschiedliche Netzewerke/Rechner/Betriebssysteme In speziellen Fällen auch unterschiedliche Programmiersprachen/Entwickler/ Implementierungen und unterschiedliche Nutzung. Somit ist auch die interne Darstellung von Daten unterschiedlich. Zur Homogenisierung von Heterogenen Systemen wird Middleware verwendet. Middleware Middleware ist eine Softwareschicht, welche die Heterogenität beseitigt. Middleware-Ansätze sind beispielsweise Datenbank-/Transaktionsorientiert, RPC-Orientiert, Objekt- oder Messageorientiert. Als Alternative kann man Virtuelle Maschinen nehmen (Java, .NET) mit dynamisch ladbarem Programmcode. Offenheit Offenheit meint, dass sich ein System bei neuen Anforderungen gut anpassen und erweitern lässt. Mittel zur Schaffung offener System sind Schnittstellen (publiziert, standartisiert) und einheitliche Kommunikationsmechanismen (z.B. TCP/IP) Fehlerverarbeitung Das System soll Fehler erkennen (z.B. Prüfsumme) und die Fehler maskieren (verbergen, abschwächen, Meldungen wiederholen) oder tolerieren (durch Redundanz, Timeout/Leasing). Sollte dennoch ein Fehler auftreten so muss das System nach Fehlern in einen sicheren Zustand wiederherstellbar sein. /Fehlertoleranz Nebenläufigkeit Mehrere nebeneinander existierende Prozesse innerhalb eines Systems in evtl. unterschiedlichen Adressräumen. Nebenläufigkeit kann es bei Clients (Anwendungsprogramme, z.B. Videokonferenz) und Servern (Zugriff auf Ressourcen, z.B. Datei) geben. Sicherheit Beinhaltet Vertraulichkeit Daten können nur von dem gewünschten Empfänger gelesen werden Integrität Die Daten wurden während der Übertragung nicht verändert Authenzität Der Sender ist tatsächlich der der er behauptet zu sein. Verfügbarkeit Darf nicht durch eine (DenialOfService) Attacke außer Kraft gesetzt werden. Transparenz Definition: Verbergen des inneren Aufbaus in einem verteilten System vor dem Benutzer und dem Applikationsprogrammierer, so dass das System als Ganzes wahrgenommen wird, und nicht als Sammlung voneinander unabhängiger Komponenten. Gemäss ISO und ANSA gibt es folgende 8 Formen: Zugriffstransparenz Ermöglicht den Zugriff auf lokale und entfernte Ressourcen unter Verwendung identischer Operationen. Positionstransparenz (Ortstransparenz) Erlaubt den Zugriff auf die Ressourcen, ohne dass man ihre Position/ihren Ort kennen muss Nebenläufigkeitstransp. Erlaubt, dass mehrere Prozesse gleichzeitig mit denselben gemeinsam genutzten Ressourcen arbeiten, ohne sich gegenseitig zu stören Replikationstransparenz Erlaubt, dass mehrere Instanzen von Ressourcen verwendet werden, um die Zuverlässigkeit und die Leistung zu verbessern, ohne dass die Benutzer oder Applikationsprogrammierer wissen, dass Repliken verwendet werden. Fehlertransparenz Erlaubt das Verbergen von Fehlern, so dass Benutzer und Applikationsprogrammierer ihre Aufgaben erledigen können, auch wenn Hardware- oder Softwarekomponenten ausgefallen sind. Mobilitätstransparenz Erlaubt das Verschieben von Ressourcen und Clients innerhalb eines Systems, ohne dass die Arbeit von Benutzern oder Programmen dadurch beeinträchtigt wird. Leistungstransparenz Erlaubt, dass das System neu konfiguriert wird, um die Leistung zu verbessern, wenn die Last variiert. Skalierungstransparenz Erlaubt, dass sich System und Applikationen vergrössern, ohne dass die Systemstruktur oder die Applikationsalgorithmen geändert werden müssen. 02 Systemmodelle Ein Systemmodell beschreibt die allgemeinen Eigenschaften und das Design eines Systems. Es deckt die wichtigsten Komponenten des Systems sowie die Art ihrer Interaktion, wie deren individuelles und kollektives Verhalten beeinflusst werden kann, ab. Ein Architekturmodell vereinfacht und abstrahiert zunächst die Funktionen der individuellen Komponenten eines verteilten Systems, um dann die Verteilung der Komponenten auf ein Netzwerk von Computern und die Beziehung der Komponenten (Rolle in der Kommunikation mit anderen, Kommunikationsmuster) untereinander zu beschreiben Hardware- und Software-Servicesschichten Systemarchitekturen Client/Server Modell Reagierender Prozess (Server) welcher Anfragen bearbeitet (evtl. weiterleitet) und Aufträge erfüllt. Initiierender Prozess (Client) der Anfragen erstellt, Aufträge erteilt und Ergebnisse verarbeitet. Pro Server kann es X-Clients geben. Peer-to-Peer Bei Peer-to-Peer sind alle Prozesse gleichrangig und verrichten die gleichen Arbeiten, zweck von P2P ist eine erhöhte Leistung und Verfügbarkeit zu erzielen, da kein einzelner Server vorhanden ist. Häufig existiert ein Leader, der aber austauschbar ist. Mehrfache Server Mehrfache Server mischt ein wenig von beiden Systemen. Es gibt mehrere gleichrangige Server, welche Anfragen von Clients erhalten und Anfragen auch untereinander austauschen können. Ziel ist eine bessere ServerPerformance gegenüber dem Client/Servermodell und auch eine höhere Verfügbarkeit. Gleichzeitig wird aber nicht die Kontrolle an Clients abgegeben wie es bei P2P der Fall ist. Man kann damit Dienste Partitionieren (Lastverteilung) oder Replizieren (Auf mehreren Ebenen anbieten wie z.b. DNS lokal, regional etc) Proxy-Server mit Cache Ein Proxy-Server wird vor das Internet gesetzt. Fragt nun z.B. ein Client eine Seite ab (Nachrichten) läuft diese Anfrage über den Proxy und das Resultat wird da gecacht für allfälllige weitere Anfragen auf die gleiche Seiten (durch gleichen oder anderen Client) Damit kann der Traffic auf das Internet reduziert werden, die Antwortzeit verbessert und indirekt die Verfügbarkeit verbessert werden. Wobei dann die Verfügbarkeit von jener des Proxys abhängt. Applets – dynamische Die Anfrage des Clients resultiert in einem Download des Applet Code. Der Erweiterung der Applikation Client arbeitet danach mit diesem Applet, wobei dieses je nachdem zusätzliche Informationen vom Webserver abfragen kann. Mobile Agenten Ein Agent ist eine Software-Komponente, welche bestimmte Aufgaben selbständig erfüllen kann. Beispiele: Einkaufs- oder Reiseagentur-Agent. Agenten können stationär (agiert in lokalem Wirtsystem) oder mobile (wandert von Wirtsystem zu einem anderen, in der Regel entfernten Wirtsystem, Vorteil: es werden nur die augewählten Daten abgeholt) sein. ThinClients / Schlanke Clients und Netzwerkcomputer Der Thin-Client oder Netzwerk-Computer lädt sein Betriebsystem und seine Anwendungen vom Server, Vorteil: Benutzer kann an einem beliebigen Arbeitsplatz arbeiten und seine Session mitnehmen. Mehr dazu weiter unten. Entwurfsanforderungen Leistungsprobleme durch beschränkte Verarbeitungs- und Kommunikationskapazitäten: - Die Antwortzeiten wird schnell und konsistent benötigt - Durchsatz: Verarbeitungs- und Datenübertragungsgeschwindigkeit - Ausgleich von Rechenauslastung: Nebenläufige Ausführung ohne Konkurrenz um die Ressourcen Dienstgüte (Quality of Service) Zuverlässigkeit, Sicherheit, Leistung (inkl. Rechtzeitigkeitsgarantie), Anpassbarkeit Caching und Replikation Cache-Konsistenz-Protokoll notwendig Zuverlässigkeitsprobleme Fehlertoleranz Korrekt arbeiten trotz Fehler Sicherheit Erzeugen von Vertrauen durch Schutz vor Angriffen! Korrektheit aktuelle Forschung??? Ubiquitäre Systeme Charakteristiken Unsichtbarkeit Computertechnologie soll vollständig aus dem Bewusstsein der Nutzer verschwinden Lokale Skalierbarkeit Anstieg der Bandbreite, Energie eines Nutzers und Anstieg der Nutzer in einem „Dienstraum“. Lokalität ändert sich rasch und es gibt mehr lokale als entfernte Interaktionspartner Ausgleich Unterschiedliche Ausstattung unterschiedlicher Diensträume werden vom System "homogenisiert Information Appliance Rückverlagerung der Funktionalität von Rechnern in die Anwendung. Grundlegende Systemmodelle Es gibt folgende drei grundlegende Modelle verteiler Systeme: Interaktionsmodell Interaktion auf Grund des Nachrichtenaustausches Fehlermodell Eventuell reduzierte Funktionalität / Leistung auf Grund von Ausfällen (Software- / Hardware- / Kommunikations-Fehler) Sicherheitsmodell Sicherheit und Schutz der Nachrichten und des Nachrichtenaustauschs Interaktionsmodell Prozesse verarbeiten Informationen und zwischen diesen muss eine Kommunikation und Koordination/Synchranisation stattfinden. Es gibt zwei Fundamentale Gegebenheiten: 1. Kommunikationsleistung ist eingeschränkt und 2. eine Globale Zeit gibt es nicht. Kommunikationsleistung ist eingeschränkt Leistung der Kommunikationskanäle wird eingeschränkt: - Verzögerungen zwischen Senden und Empfangen - Bandbreite kann je nach Belastung variieren - Jitter (Variationen in der Übertragungszeit) kann beispielsweise bei Multimedia Applikationen zu Verzerrungen führen. Globale Zeit gibt es nicht Uhren und Timing kann man nicht exakt synchronisieren: -Ansatz 1: GPS (outdoor überall gleiche Zeit empfangen) -Ansatz 2: statistische Übertragungszeiten Beide Ansätze liefern kein zuverlässiges Ergebnis Varianten Synchron verteilte Systeme - Zeitdauer für die Ausführung einer Operation ist in Grenzen bekannt (obere/untere Grenze). - Die Übertragungsdauer von/zu Client/Server ist begrenzt. - Jeder Prozess arbeitet mit seiner lokalen Zeit. Asynchron verteilte Systeme - Prozessausführungszeit ist nicht begrenzt. - Übertragungszeiten zwischen Rechnern ist nicht begrenzt. - Uhren gelten nur lokal; einzig vorher/nachher ist definiert. Fehlermodell Ausfallen können: 1. Prozesse (wegen Hardware, Software [OS, Netz, Applikation]) oder 2. der Kommunikationskanal. Bei einer Dienstverweigerung des Prozesses oder Auslassungsfehlern (Omission Failures) kann der Prozess abstürzen oder die Kommunikation wird so gestört das sie sogar verweigert wird. Sicherheitsmodel Die Sicherheit eines verteilten Systems kann durch Sicherung der Kommunikationskanäle (mit deren Hilfe Prozesse Informationen austauschen) und durch Sicherung der Objekte (welche in den Prozessen gekapselt sind) vor unautorisiertem Zugriff geschützt werden. Definition Prinzipal: Berechtigung (Benutzer/Prozess) unter der ein Aufruf/Ereignis ausgeführt werden darf. Sicherheit besteht also aus dem Schutz von 1. Prozessen, 2. Objekte, 3. Kanäle. Prozess-Bedrohung - Der Serverprozess kann oft nicht eindeutig entscheiden, ob ein verlangter Aufruf berechtigt ist oder nicht, da er die Identität des Clients zu wenig genau kennt. - Der Clientprozess weiss bei einer Antwort nicht, ob diese wirklich vom Server oder einem "Feind" stammt. Kanal-Bedrohung - Ein Feind kann Meldungen stören, verfälschen oder austauschen (siehe unten) - Ein Feind kann auch Meldungen zwischenspeichern und zu einem späteren Zeitpunkt erneut benutzen Andere Bedrohungen z.B. Denial of Service 04 Interprozesskommunikation Damit zwei Prozesse Informationen austauschen können, müssen sie Interprozesskommunikation (interprocess-communication, IPC) verwenden. IPC basiert auf dem Austausch von Nachrichten sowie einer eventuellen Synchronisation. Anforderungen an eine Interprozesskomunikation Zuverlässigkeit Selbst beim Verlust einzelner Pakete wird die Nachricht als Ganzes verständlich übertragen. Ordung Die Paketreihenfolge bei Empfänger und Sender müssen (idealerweise) gleich sein. Im Falle von TCP wird dies garantiert (verbindungsorientierte Kommunikation mit Ack, also mit Overhead). Im Falle von UDP kann nicht davon ausgegangen werden (verbindungslose Kommunikation ohne Ack, also weniger Overhead) Externe Darstellung und Marshalling Die meisten Anwendungen bzw. Middleware-Ansätze nutzen ein gemeinsames Datenformat, genannt externe Datendarstellung. Dies ist notwendig wegen der Heterogenität der Umgebungen (unterschiedliche Hardwarearchitektur, Betriebssysteme und Programmiersprachen) Unter Marshalling versteht man den Prozess der Transformation strukturierter Datenelemente und elementarer Werte in eine (mit einer Nachricht übertragbaren) externe Datendarstellung Unter Un-Marshaling versteht man den Prozess der Erstellung elementarer Werte aus ihrer externen Datendarstellung und der Wiederaufbau der Datenstrukturen Probleme mit Little-(Intel)/Big-Endian (SPARC) Integer werden durch die unterschiedliche Byteordnung gedreht, aber Zeichenketten nicht Ansatz Idee: -Definiere eine Menge von abstrakten Datentypen und eine Kodierung (ein genaues Bit-Format) für jeden dieser Typen -Stelle Werkzeuge zur Verfügung, welche die abstrakten Datentypen in Datentypen der verwendeten Programmiersprache übersetzen -Stelle Werkzeuge zur Verfügung, welche die Datentypen der verwendeten Programmiersprache in die abstrakten Datentypen und damit in das kodierte Format übersetzen -Senden (Marshalling): wenn ein bestimmter Datentyp übertragen werden soll, rufe die Kodierfunktion auf und übertrage das Ergebnis -Empfangen (Un-Marshalling): dekodiere den Bit-String und erzeuge eine neue lokale Repräsentation des empfangenen Typs Existierende Externe Darstellungen: -Objektserialisierung (z.B. in Java und .Net möglich) oder noch allgemeiner: XML. Common Data Representation CDR Java Objektserialisierung Serializable und Externalizable Interface: -Serializable: Kontrolle liegt beim System (Serialisierung durch das System). -Externalizable: Objekt- Serialisierung wird durch die markierte Klasse kontrolliert. Java 2 XML Java->XML XMLEncoder enc=new XMLEncoder(new BufferedOutputStream(new FileOutputStream(„Testexport.xml“))); enc.writeObject([OBJEKT]); enc.close(); XML->Java XMLDecoder dec = new XMLDecoder(new BufferedInputStream(newFileInputStream(“Testexport.xml”))); [KLASSE] o = ([KLASSE])dec.readObject(); dec.close(); Referenzierung von entfernten Objekten Zur Referenzierung von „entfernten Objekten“ muss ein solche im verteilten System eindeutig identifizierbar sein. Nach dem Löschen eines solchen Objektes darf die Identifikation nicht wieder verwendet werden, da eventuell noch ungültige Referenzen auf diese zeigen. Möglichkeit: Aufbau wie URL => Internet-Adresse des remote-Computers, Port Nummer des Prozesses zu dem das remote Objekt gehört, Zeitput zudem das Objekt kreiert wurde, eine laufende Nummer und Informationen zum verwendeten Interface => Ist dann sehr eindeutig, aber auch relativ gross. URL (Uniform Resource Locator) Damit klar ist welcher Server URN (Uniform Resource Name) Welche Datei, unabhängig vom Server URI (Uniform Resource Identifier) URI=URL+URN (z.B. http://java.sun.com/testpage.html#12) URI/URL in Java URI in URL umwandeln und umgekehrt: uri = new URI("file://D:/Test/Alpha.java"); url = uri.toURL() uri = new URI(url.toString()); Synchroner vs. Asynchroner IPC Synchron Asynchron Sender und Empfänger blockieren beim Senden bzw. Empfangen d.h. wenn ein Senden ausgeführt wird, kann der Sender erst dann weiterarbeiten, nachdem das zugehörige „Empfangen“ im Empfänger ausgeführt wurde: Das Senden findet nicht- blockierend statt d.h. der Sender stellt seine Nachricht in die Ausgabe Warteschlange und arbeitet weiter; Das Empfangen kann blockierend oder nicht- blockierend sein: Blockierend: sobald der Empfänger receive() abgesetzt hat wird blockiert bis die Nachricht vollständig gelesen wurde. Nicht- blockierend: nach receive() wird der Buffer gefüllt; falls dieser voll ist, wird der Empfänger benachrichtigt. Vorteil Leicher zu implementieren Effizienter Nachteil Weniger effizient als Asynchron Komplexer als synchron (Queues) Der Trend geht in vielen Anwendungen in Richtung Asynchron. dotNet hat einige sehr gute neue Konzepte implementiert, welche die asynchrone Kommunikation nutzen. Java und UDP DatagramPacket enthält die zu sendende Information. (public DatagramPacket(byte[] buf, int length, InetAddress address, int port);) DatagramSocket besitzt vor allem die Methoden send(DatagramPacket) und receive(DatagramPacket) Struktur eines UDP Programms Beispiel public class UDPSender { private final String TARGET_HOST=“localhost“; private fnal int TARGET_PORT = 9191; public UDPSender() { try { socket = new DatagramSocket(); DatagramPacket packet; BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); String message = in.readline(); byte[] data = new byte[message.length()]; data = message.getBytes(); packet = new DatagramPacket(data, data.length, InetAddress.getByName(TARGET_HOST), TARGET_PORT); try { socket.send(packet); } catch(IOException e) { e.printStackTrace(); } socket.close(); } catch(Exception e) { System.err.println(e); } } public static void main(String[] args) { new UDPSender(); } } public class UDPReceiver { private final int TARGET_PORT=9191; private final int BUFFER_LENGTH=256; public UDPReceiver() { try { byte[] inbuf; DatagramSocket socket = new DatagramSocket(TARGET_PORT); String msg=null; do { inbuf = new byte[BUFFER_LENGTH]; DatagramPacket packet = new DatagramPacket(inbuf, inbuf.length); socket.receive(packet); msg=new String(inbuf).trim(); System.out.println(“[UDPReceiver]Message: “ + msg); } while (!msg.equals(“.”)); } catch (SocketException e) {} catch (IOException e) {} } public static void main(String[] args) { new UDPReceiver(); } } Java und TCP ServerSocket (Server) ist passiv und wartet nach dem Aufruf der accept-Methode auf Verbindungsaufbauwünsche (connect-Anforderungen) von Clients. Socket (Client) wird vom Client genutzt und mittels Konstruktor wird implizit eine Verbindung zu einem Server aufgebaut. Bei beiden Klassen kann man sich eine Referenz auf den Ein- bzw. Ausgabedatenstrom geben lassen. Datenströme können dann nach dem ganz normalen Java-Schema genutzt werden. RMI: http://de.wikipedia.org/wiki/Remote_Method_Invocation Struktur eines TCP Programmes Beispiel Socket Server (multithreaded) public class TCPServer { public static void main(String args[]) { try { int serverPort = 7896; System.out.println(“Server gestartet!”); ServerSocket listenSocket = new ServerSocket(serverPort); while (true) { Socket clientSocket = listenSocket.accept(); System.out.println(“Neue Verbindung! Erzeuge TCPConnection...”); Connection c = new Connection(clientSocket); c.start(); } } catch(IOException e) { System.out.println(“Listen: “ + e.getMessage()); } } } class TCPConnection extends Thread { DataInputStream in; DataOutputStream out; Socket clientSocket; public TCPConnection(Socket aClientSocket) { try { clientSocket = aClientSocket; in = new DataInputStream(clientSocket.getInputStream()); out = new DataOutputStream(clientSocket.getOutputStream()); this.run(); } catch(IOException e) { System.out.println(“Connection: “ + e.getMessage()); } } public void run() { try { String data = in.readUTF(); out.writeUTF(data+” “ + InetAddress.getLocalHost()); clientSocket.close(); } catch (EOFException e) { System.out.println(“EOF:” + e.getMessage(); } catch (IOException e) { System.out.println(“IO:” + e.getMessage(); } } } Socket Client (blocking) public class TCPClient { public static void main(String args[]) { try { Socket s; String host, msg; int serverPort = 7896; if (args.length<1) { host=”localhost”; msg=”Hello World”; } else { host=args[0]; msg=args[1]; } s = new Socket(host, serverPort); DataInputStream in = new DataInputStream(s.getInputStream()); DataOutputStream in = new DataOutputStream(s.getOutputStream()); out.writeUTF(msg); String data = in.readUTF(); System.out.println(“Received:” + data); s.close(); } catch (UnknownHostException e) { System.out.println(“Socket: “ + e.getMessage()); } catch (EOFException e) { System.out.println(“EOF: “ + e.getMessage()); } catch (IOException e) { System.out.println(“IO: “ + e.getMessage()); } } } Socket Client (nonblocking) public class Socket_NonBlocking { public static void main(String args[]) { try { InetAddress addr = InetAddress.getByName(“localhost”); int port = 9090; SocketAddress sockaddr = new InetSocketAddress(addr,port); Socket sock = new Socket(); int timeoutMs = 2000; sock.connect(sockaddr, timeoutMs); } catch (UnknownHostException e) { } catch (SocketTimeoutException e) { } catch (IOException e) { } } } Direkte Netzprogrammierung vs. Middleware Direkte Netzprogrammierung (Assembler der Verteilten System-Programmierung) Middleware (Höhere Sprache der Verteilten System -Programmierung) -Direkte Kontrolle aller Transportparameter -Sehr bequemer Weg zur Entwicklung von Anwendungen -grössere Flexibilität bei der Entwicklung neuer Protokolle -Kann in vielen Fällen bessere Performance bringen -Datenrepräsentation, Objektlokalisierung, Transaktionsdienst, Fehlerbehandlung, Sicherheitsdienst, etc. werden angeboten (verschiedene Anbieter). -Grosse Probleme: -Overhead, da allgemein ausgelegt. -fehlende Datenrepräsentation -Zusatzanforderungen, wie Verschlüsselung, Namensdienst, Transaktionsdienst, Fehlerbehandlung etc. müssen „eingekauft“ werden Gruppenkommunikation Gruppenkommunikation basiert oft auf Multicasting welches Routermässig erlaubt werden muss. Bei modernen Multimediaanwendungen wie Videokonferenzen oder gemeinsamem Editieren von Dokumenten wird eine effiziente Gruppenkommunikation immer wichtiger. Für eine Gruppenkommunikation zwischen n Mitgliedern könnte auch durch den Aufbau von (n-1) 1:1Verbindungen realisiert werden. Das ist sehr ineffizient die Standardlösung heisst deshalb Multicast und stellt eine 1:n-Verbindung (unterschiedlichster Möglichkeiten) zur Verfügung: Somit muss die Anwendung nur eine Verbindung pro Gruppe verwalten und die Ressourcen im Netz werden effizienter genutzt. IP-Multicast IP-Multicast verwendet eine spezielle Form von IP-Adressen, um Gruppen zu identifizieren (eine Klasse-D-Adresse). Wenn eine Nachricht an diese Adresse geschickt wird, erhalten diese alle Mitglieder, die ihre Zugehörigkeit zu der dazugehörigen Gruppe erklärt haben.Die Weiterleitung erfolgt mittels Multicast-Routern. Begrenzung erfolgt durch Angabe der Anzahl durchlaufbarer Router. Java stellt ein API für IP Multicast zur Verfügung. Es erlaubt -Beitreten (join) und Verlassen (leave) der Gruppe - Senden von Paketen - Empfang von Paketen , die an die Gruppe geschickt wurden. 05 Verteilte Objekte Entfernte Aufrufe Kommunikationsmöglichkeiten Kommunikation zwischen Objekten Prozedurale Programmierung Procedure Calls Objekt-Orientierte Programmierung Methodenaufruf (Method Invocation) Kommunikation zwischen verteilten Objekten RPC Remote Call Entfernte Prozeduraufrufe RMI Remote Methode Invocation Entfernte Methodenaufrufe Transparenz (Anforderung an kommunizierende Objektsysteme) - Der Benutzer sollte kaum Unterschiede erkennen zwischen einem lokalen und einem remote Prozeduraufruf! - Völlige Transparenz ist aber nicht erwünscht, weil die Fehlermodi (Ausfall der Senders, des Kanals, des Empfängers) zu unterschiedlichem Ausfallverhalten führen können. Und der Entwickler wird einen Fehler nur schlecht lokalisieren können, wenn er nicht erkennt, ob der Fehler lokal, im Netzwerk oderremote aufgetreten ist. Middleware -Software die oberhalb der Basisprozesse und Nachrichtenübermittlung angesiedelt ist. Die Hauptaufgaben sind: - Bereitstellen der lokalen Transparenz (Remote aufrufe sollen so einfach wie lokale realisierbar sein, der Ort des aufgerufenen Objekts braucht nicht bekannt zu sein.) - Unabhängigkeit von Kommunikationsprotokollen schaffen (Applikation die auf Middleware aufsetzen brauchen sich nicht um TCP oder UDP zu kümmern. - Abstraktion von Betriebssystem, Programmiersprache und Hardware. RRA Protokoll (Ansatz für Request-Reply Kommunikationsprotokolle) Definition eines generellen Protokolls für die Client Server Kommunikation. Dies ist kein Standard, dient aber als Basis für konkrete Definitionen wie RPC, RMI und andere. Anforderungen an RRA-Protokoll: - Requests an einen Server senden - Antworten des Servers zu empfangen - Allenfalls ein Acknowledge zu senden R für Request R für Response A für Acknowledge Client-Operation Sendet eine Anforderung an das entfernte Objekt und erhält die Antwort zurück. Vorausgesetzt ist, das der Client ein Marshalling für die Argumente in ein Byte-Array durchgeführt hat und für das zurückgegebene Byte-Array ein UnMarshalling durchführt public byte[] doOperation (RemoteObjectRef o, int methodId, byte[] arguments); Die Argumente spezifizieren: -die Referenz des entfernten Objekts, -die aufzurufende Methode bzw. deren ID und -die Argumente dieses Methodenaufrufs. Server-Operation Nimmt eine Client-Anforderung über den Server-Port an. public byte[] getRequest (); Sendet die Antwort-Nachricht an den Client mittels Internetadresse und Portnummer public void sendReply (byte[] reply, InetAddress clientHost, int clientPort); Nachrichtenformate des Protokolls messageType int (0=Request, 1=Reply) requestID int (NachrichtenID, für Anforderungen erzeugt und für Antwort die gleiche genutzt. Erlaubt Überprüfung der Anforderung-Antwort-Zuordnung) objectReference RemoteObjectReferenz methodID int oder Methode (Identität der Methode, in Java z.B. Instanz von Method) arguments byte array Beispiel eines RequestReply-Protokolls HTTP Fehlermodell des Protokolls Mögliche Fehler aller drei Operationen: -Dienstverweigerungen; -Nachrichten werden nicht in der Sendereihenfolge ausgeliefert. Einfache Fehlerbehandlung durch: *Timeouts: Aktionen für die doOperation könnten sein: -Abbruch der Operation mit Fehlermeldung an den Client, -Wiederholung der Anforderungsnachricht bis Antwort erhalten oder eine bestimmte Anzahl an Timeouts erfolgt ist. * Verwerfen doppelter Anforderungen von getRequest: - bleibt passiv, wenn der Server mit dem Auftrag noch beschäftigt ist - ruft sendReply mit der zugehörigen Antwort nochmals auf, falls die Aufgabe bereits erledigt ist,aber die Antwort evtl. nicht beim Client angekommen ist. Führen einer History der übertragenen Antworten hilft die Rechenzeit zu vermindern, da Anforderungen bei Nachrichtenverlust nicht nochmals berechnet werden müssen. Um den Speicheraufwand zu reduzieren kann der Client ein Acknowledge zu einer Antwort senden, die dann aus der History gelöscht werden kann. RPC: Remote Procedure Calls (RFC: Remote Function Call) “A remote procedure call (RPC) is an inter-process communication that allows a computer program to cause a subroutine or procedure to execute in another address space (commonly on another computer on a shared network) without the programmer explicitly coding the details for this remote interaction. That is, the programmer writes essentially the same code whether the subroutine is local to the executing program, or remote.” Design Ideen: - Verteilte prozedurale Programmierung -Interaktion zwischen (entfernten) Objekten: -Objekte werden mithilfe von Interfaces spezifiziert. -Die Implementierung der Objekte bleibt verborgen. - Der direkte Zugriff auf lokale Variablen des remote Systems ist auf Grund unterschiedlicher Adressräume (Memory) der verteilten Prozesse nicht möglich (es findet keine Speicheradressumsetzung statt). Remote Schnittstellen -Die Schnittstellen werden abstrakt spezifiziert. -Der Zugriff auf lokale Variablen kann in den Schnittstellen-Beschreibungssprachen nicht direkt spezifiziert werden: Es werden deshalb set- und get- Methoden dafür eingesetzt. Diese können auch synchronisiert werden, damit keine Probleme bei Concurrent Methodenaufrufen geschehen. -Parameter werden als Input oder Output Parameter gekennzeichnet. -Zeiger als Parameter machen kaum Sinn, weil remote und lokal unterschiedliche Adressräume vorhanden sind. Client Stub Prozeduren entsprechen Proxies und werden Stubs genannt: Sie gestatten dem Client einen Remote Procedure Call wie einen lokalen Call zu behandeln. Server Stub Prozeduren entsprechen Proxies und werden Skeletons genannt. Schnittstellenbeschreibung (IDL = InterfaceDefinitionLanguage) IDL (Interface Definition Language) waren die ersten Ansätze im RPC Umfeld und wurden standartisiert. Sie gestattet den Einsatz von unterschiedlichen Programmiersprachen, da aus der IDLBeschreibung Rahmenprogramme und Interfaces für die konkrete Programmiersprache der Implementierung generiert werden. IDL ist aber sprachneutral definiert. Auch Sun RPC / XDR, MS RPC / DCOM und OSF DCE IDL verwenden eine (leicht andere) IDL Andere Ansätze: - WSDL für WebServices (WebServiceDescriptionLanguage in XML) - XML basierte Interface Beschreibungen Aufbau IDL ist analog zu einer Programmiersprache aufgebaut: -Module und Namensräume -Interfaces -Valuetypes -Abstract Interfaces -IDL Datentypen -Definition eigener Datentypen -Konstanten -Konstante Ausdrücke Beispiel mit Beschreibung module Bank { exception UngenuegenderKontostand { float aktuellerKontostand; }; interface Konto { attribute wstring name; readonly attribute unsigned long ssn; readonly attribute float kontostand; void abheben (in float betrag) raises (UngenuegenderKontostand); void einzahlen (in float betrag); }; }; Die Methodenbeschreibung spezifiziert die Signatur, den Rückgabewert und allfällige Exceptions (raises…) Parameter haben eine bestimmte Richtung: - in: Nur Eingabe durch den Client - out: Nur Ausgabe des Objeks an den Client - inout: Eingabe und Ausgabe (und die Helperklassen ermöglichen dies in Java) Attribute entsprechen den Objektvariablen (Objekt-Attributen) RMI: Remote Method Invocation RMI wird für die Kommunikation zwischen verteilten Objekten verwendet. Das verteilte Objektsystem sollte sich möglichst gut in das bestehende Objektsystem einfügen: -Einfach einsetzbar -Keine exotischen neuen Sprachkonzepte Ziele von RMI (Remote Method Invocation) in Java: -Untersützung für unterschiedliche VMs (IBM, Sun, …) -Security! -Es soll sichtbar sein, ob eine Methode lokal oder remote einsetzbar ist. -Typensicherheit -Unterschiedliche Referenz-Semantiken: z.B. Lazy Activation Verteiltes Objektsystem Entfernte und lokale Methodenaufrufe Jeder Prozess hat einige Objekte, die entfernte Aufrufe erhalten können (entfernte Objekte genannt) und andere Objekte, die nur lokale Aufrufe enthalten können. -Objekte müssen die entfernte Objektreferenz eines Objektes in einem anderen Prozess kennen, um dessen Methoden aufrufen zu können. Wo bekommen sie diese Referenz her? => Die entfernte Schnittstelle spezifiziert, welche Methoden entfernt aufgerufen werden können. ACHTUNG: In Java ist es nicht möglich, dass ein objekt lokale UND entfernte Methoden enthält, es ist nur entweder lokal oder entfernt erlaubt. Aber der Server kan natürlich lokale Methoden haben. RMI Komponenten und Aufbau Das Kommunikationsmodul Ausführung des Request-/Reply-(Anforderungs/Antwort)-Protokoll messageType int (0=Request, 1= Reply) requestId int objectReference RemoteObjectRef methodId int or Method arguments array of bytes Entferntes Referenzmodul -Übersetzt zwischen entfernten und lokalen Objektreferenzen; -besitzt meist eine entfernte Objekt-Tabelle, in der diese Zuordnung eingetragen wird. -Beim ersten Aufruf wird die entfernte Objektreferenz von diesem Modul erzeugt. Proxy Macht die entfernten Methodenaufrufe für den Client transparent -Der Client setzt einen Aufruf lokal an den lokalen Proxy ab (Stub) -Der Proxy kommuniziert mit der Middleware -Diese übermittelt die Anfrage (inklusive Marshalling / De-Marshalling) an den remote Server Proxy (Skeleton) -Der Server Proxy leitet die Anfrage zum remote Objekt weiter und empfängt eine allfällige Antwort, die er dann an den Client Proxy weiterleitet Dispatcher -Der Server verwendet einen Dispatcher, der die Requests empfängt und an das Skeleton der ServerKlassen weiterleitet. -Der Dispatcher muss die passende Methoden-ID kennen. Skeleton (Server Proxy) -Entfernte Objekte besitzen ein Skeleton (Server Proxy). -Dieses implementiert die Methoden des entfernten Objekts auf eine eigene Art und Weise. -Das Server Proxy Objekt (Skeleton) ruft die entfernte Methode auf. Objektübergabe Festlegung der Übergabesemantik i.A. durch Typ des formalen Parameters: -Referenzen und Werte sind zunächst alles Werte! Die Übergabesemantik regelt die Art der Interpretation. -Referenzübergabe: wenn der formale Parameter ein bestimmtes Interface (in Java z.B. java.rmi.Remote) implementiert - Wertübergabe: in allen anderen Fällen Bei Wertübergabe sind Komplikationen möglich: - Wenn das übergebene Objekt direkt oder indirekt andere Objekte referenziert, müssen diese ebenfalls übergeben werden => Rekursiv - Sharing von Objekten muss auf der Clientseite rekonstruiert werden - Wenn das übergebene Objekt ein echter Untertyp des formalen Parameters ist, ist u.U. Upcast erforderlich Weitere Begrifflichkeiten - Binder: Namensdienst, der Clients Objektreferenzen vermitteln kann - Server-Thread: Um zu verhindern, dass ein entfernter Aufruf einen anderen Aufruf verzögert, weisen Server der Ausführung jedes entfernten Aufrufs einen eigenen Thread zu! - Aktivierung: Erzeugung einer Instanz und Initialisierung der Instanzvariablen. - Persistenter Objektspeicher: Verwaltet persistente Objekte, also Objekte, die zwischen Aktivierungen weiterbestehen. - Verteiltes Garbage Collection: Stellt sicher, dass in einem verteilten System garbage collection durchgeführt wird, sprich auch remote Objekte sollten automatische entsorgt werden können Problem: Referenzen, die nur in Nachrichten vorhanden sind. Methoden: mithilfe von Leasing und/oder Referenzenzählern. In Java steht dazu der DGC, distributed garbage collector, zur Verfügung. Er verwendet Reference Counting und Lease Time, um bestimmen zu können, ob ein remote Objekt noch benötigt wird. Java RMI RMI macht nur Sinn wenn eine reine Java-Umgebung besteht. Vorteile von RMI +Der Client benötigt nur den (Platzhalter) Namen des remote Objekts. +Die Kommunikation unterscheidet sich aus Client Sicht kaum von einem lokalen Prozedur / Methodenaufruf +Client und Server müssen sich lediglich über ein (gemeinsam genutztes) Interface einigen. Ziel Der Client kann irgendwo vorhandene, nützliche Methoden einsetzen Vorbedingung -Die remote Methoden müssen als solche gekennzeichnet sein -D.h.: -Es reicht nicht, ein Server-Objekt zu kreieren. -Dieses kann ohne zusätzlichen Interfaces nicht remote genutzt werden. -Das Server- Objekt kann durchaus über rein lokalw Methoden verfügen. Vorgehen Grob Objekt wird auf dem Server angelegt Dienst dienst = new Dienst(…); Server muss den Dienst irgendwie bekannt geben: er exportiert / publiziert Dienst: UnicastRemoteObject.export(dienst) Client beschafft sich eine Referenz auf das entfernte Objekt: DienstInterface r_Dienst = 1) über einen (zu ermittelnden) Context. 2) oder mithilfe von einer Registry (lookup) Client ruft remote Methode auf context.getRemoteRef(„Dienst“); (DienstInterface)registry.lookup("Dienst“); r_Dienst.methode(); Beispiel: Entwicklung einer RMI-Applikation Schritt 1: Server-Interface Definition des lokalen und des remote Protokolls (lokale und remote Methoden) Dies geschieht durch Angabe des „Marker“ Interface „Remote“. Das Interface Remote enthält keinerlei Methoden; es kennzeichnet das Interface RMIServer als ein Remotes. Jede Remote Methode muss die RemoteException werfen (können), da bei der Kommunikation diverse Fehler passieren können. Beispiel: package rmiInterfaces; import java.rmi.Remote; import java.rmi.RemoteException; public interface RMIServer extends Remote { // Methoden des Servers, die remote // ausgeführt werden können void setString(String str) throws RemoteException; //Funktion die wir anbieten möchten. } Schritt 2: Server-Implementation Implementieren des lokalen und des remote Protokolls (lokale und remote Methoden) im Server (in den Server-Klassen) Beispiel: package rmiServers; import java.net.MalformedURLException; import java.rmi.Naming; import java.rmi.RemoteException; import java.rmi.registry.LocateRegistry; import java.rmi.server.UnicastRemoteObject; import rmiInterfaces.RMIServer; public class RMIServerImpl extends UnicastRemoteObject implements RMIServer { public RMIServerImpl() throws RemoteException { // Konstruktor try { // Registry starten try { LocateRegistry.createRegistry(1099); System.out.println( "[Server]Die Registry wurde kreiert"); } catch (RemoteException e) { System.err.println( "[Server]Registry konnte nicht "+ "gestartet werden..."); e.printStackTrace(); } // Registrieren des Servers bei RMIRegistry Naming.rebind("rmi:///Server", this); System.out.println("[Server]Server gebunden"); } catch (MalformedURLException e) { // Wenn die URL falsch angegeben wurde ... System.out.println("[Server]URL ungültig:\n" + e.getMessage()); } } // Methode, die remote ausgeführt werden kann public void setString(String str) { // Ausgabe des vom Client gesendeten Strings System.out.println("[Server]"+str); } public static void main(String[] args) { try { // Instanziieren des Remote-Objektes // den Rest haben wir im den Konstruktor RMIServerImpl server = new RMIServerImpl(); } catch (RemoteException e) { // Wenn Remote-Objekt nicht erzeugt werden kann ... System.out.println( "[Server]Fehler beim Instanziieren des " + "Remote-Objektes:\n" + e.getMessage()); } } } Schritt 3: Client-/Server-Stub generieren - Übersetzen der Server Klasse(n), des Interfaces - Gegebenenfalls generieren von Stub (Client-seitige Proxy-Objekte) und Skeleton (Server-seitige Proxy-Objekte) aus der ServerImpl.class mithilfe des rmic (RMI Compiler) aus J2SDK1.x...\bin (In den neueren Java-Versionen >1.5 werden diese Klassen mithilfe von Inspection (in Java Reflection genannt) automatisch generiert (und nicht physische abgespeichert).) Schritt 4: Client erstellen Entwickeln und übersetzen des Clients (anhand des server-seitigen Interfaces NICHT Server-seitiger Klassen) Beispiel: package rmiClients; import java.net.MalformedURLException; import java.rmi.Naming; import java.rmi.NotBoundException; import java.rmi.RemoteException; import rmiInterfaces.RMIServer; public class RMIClient { public static void main(String[] args) { try {// Suchen des Servers in RMIRegistry System.out.println("[Client]RMI Registry Lookup"); RMIServer server = // Server INTERFACE (RMIServer) Naming.lookup("rmi://localhost/Server"); // Ausführen einer Methode im Server System.out.println("[Client]Aufruf der Server Methode"); server.setString("[Client]Hallo Server"); } catch (NotBoundException e) {... } catch (MalformedURLException e) { } catch (RemoteException e) {} } } Schritt 5: Registry starten Starten der RMI Registry -In der Regel wird diese als Standalone Programm gestartet. -Sie muss im selben Verzeichnis gestartet werden, in dem sich die Server Klassen befinden Die Registry hat die Funktion eines „Lookup-Servers“ - Server trägt die verf. remote Objekte (Servants) dort unter einem festgelegten Namen ein. -Der Client erhält darüber Zugriff auf das remote Objekt In unserem Beispiel gehen wir einen andern Weg und starten die Registry direkt aus dem Server mit: // Registry starten auf dem Port 1099 LocateRegistry.createRegistry(1099); 06 Indirekte Kommunikation – Messaging Definition Geschieht über einen Vermittler Es findet in der Regel keine direkte Kopplung des Consumers an den Producer der Nachricht statt Modell-Ansatz Wir können die Kommunikation räumlich und zeitlich betrachten In beiden Dimensionen können Systeme gekoppelt oder entkoppelt sein Räumlich o Gekoppelt: der Sender und der Empfänger sind eng aneinander gekoppelt o Entkoppelt: der Sender und der Empfänger brauchen sich nicht zu kennen Anwendungsfälle Zuverlässige Verteilung von Information an mehrere Kunden. Kollaborative Anwendungen Fehlertolerante Anwendungen System Überwachung z.B. Lastenausgleich (Load Balancing). Gruppen-Kommunikation Empfänger treten einer Gruppe bei: o wie benötigen eine join()/leave() Operation. Multicast: o Senden einer Nachricht an eine Gruppe; Broadcast: o Senden an «alle» (Radio-Sender); Unicast: o Senden an einen bestimmten Empfänger. Schema: o meineGruppe.join() o meineGruppe.send(meineNachricht); Vorteil: o Reduzierter Netzwerk-Verkehr Beispiel: senden eines Videos an Kunden in einem andern Kontinent Prozess-Gruppen und Objekt-Gruppen Prozess-Gruppen sind low level Gruppen, bei denen die Kommunikation zwischen Prozessen einer Gruppe stattfinden. o Der Level ist fast vergleichbar mit einer einfachen Socket-Kommunikation. o Die meisten Gruppen-Kommunikationssysteme sind auf dieser Stufe. Objekt-Gruppen versuchen Marshalling und Unmarshalling und ähnliche Aufgaben zu übernehmen. o Diese Art der Kommunikation wurde in einzelnen experimentellen Systemen, beispielsweise CORBA Erweiterungen, ausprobiert, vor allem im Rahmen von Forschungsprojekten. o Eine grössere Verbreitung hat nicht stattgefunden. Offene und geschlossene Gruppen Überlappende Gruppen In überlappenden Gruppen kann ein Mitglied mehreren Gruppen angehören Synchron und Asynchrone Systeme Die Gruppen-Kommunikation ist in beiden Kommunikations-Modellen (synchron und asynchron) möglich. Implementation Zuverlässigkeit und Ordnung von Multicast Zuverlässigkeit bei 1-zu-1 Kommunikation: o 1.Integrität: Die versendete und die empfangene Nachricht sind identisch. o 2.Validität: Jede ausgehende Nachricht wird eventuell abgeliefert. o Zuverlässigkeit bei Multicasting Systemen: 1.Integrität 2.Validität 3.Agreement Falls eine Meldung an ein Mitglied der Gruppe ausgeliefert wird, wird sie an alle Mitglieder ausgeliefert. Gruppen-Kommunikation bietet in der Regel «geordnetes» Multicasting: o FIFO Ordnung First-In-First-Out Auslieferung Die Nachrichten werden an alle in der gleichen Reihenfolge ausgeliefert. o Kausale Ordnung Kausale Abhängigkeiten werden bei der Auslieferung berücksichtigt («happended-before» Relation). o Totale Ordnung Falls die Nachricht a vor der Nachricht b ausgeliefert wird, dann wird a an alle vor b ausgeliefert Mitgliederverwaltung Service API: o Gruppen-Mitgliedschaft: beitreten und verlassen: group.join(), group.leave() o Fehlerfindung: Ein Monitor-Prozess überwacht die Erreichbarkeit und Lebendigkeit der Prozesse in der Gruppe und isoliert allfällig ausgefallene Prozesse, im Idealfall (oft ist diese Funktion nicht vorhanden). o Notifikation: Dieser Prozess informiert die Gruppenmitglieder über allfällige Änderungen (neues Mitglied, nicht mehr aktives Mitglied, …). o Adressen-Expansion: Dieser Prozess sorgt dafür, dass Nachrichten an die Gruppe an alle Gruppenmitglieder versendet werden. Dazu muss bekannt sein, wer Mitglied der Gruppe ist. o Die Gruppenadresse wird "expandiert". JGroups Toolkit JGroups ist ein Gruppen-Kommunikations-Tool o Welches zuverlässig ist o In Java geschrieben ist und einfach ist (fast wie Sockets). o Auf IP Multicast aufbaut, aber viele zusatzliche Möglichkeiten und Protokolle einsetzt (dabei muss Multicast nicht vorhanden sein). Hauptziele: o Zuverlässigkeit Keine Nachrichtenverluste Zerlegen grosser Nachrichten in kleine und wieder zusammensetzen beim Empfänger. Ordnung der Nachrichten nach FIFO (für alle Empfänger) Atomizität (Nachrichten werden entweder von allen von von keinem in der Gruppe empfangen). o Aktive Verfolgung der Gruppen-Mitgliedschaft Verfolgung der Mitgliedschaften und Notiz bei neuen Mitgliedern. Management Information über den Channel: o Mit getView() erhält man die aktuelle Memberliste. o Mit getState() erhält man den vergangenen Zustand des Channels und als neues Member könnte man damit erfahren, was bisher geschah. Building Blocks o Message Dispatcher Implementiert blocking/non-blocking Kommunkikation und korrelieren von Nachrichten Nachrichten können synchron oder asynchron gesendet werden und falls nödtig mit Request-Response Korrelation. o RpcDispatcher Ist abgeleitet von MessageDispatcher Seine Aufgabe ist es Methoden aufzurufen und die korrespondierende Antwort zu erkennen Der RpcDispatcher korreliert also Request-Response Methodenaufrufe: der Message Dispatcher korreliert Nachrichten Channels Der Protokoll-Stack wird gestartet sobald eine Applikation sich mit dem Channel verbindet und zerstört, sobald der Channel geschlossen wird. Die Architektur lehnt sich an die Gruppen-Kommunikations-Systeme Horus und Ensemble an: man kann von Layer zu Layer wechseln. o Jeder Protokoll-Layer bietet zwei Methoden an: public Object up(Event evt); public Object down(Event evt); Die Protokoll-Layer: o UDP : ist in der Regel der eigentliche Transport-Layer. o FRAG : ist für das Packaging verantwortlich; o MERGE: ist für das Zusammenfassen mehrerer Sub- Netzwerke zuständig. o GMS: ist für die "Group MemberShip" verantwortlich; o CAUSAL: ist für die Paketordnung zuständig. JGroups Toolkit Codebeispiel Producer Consumer Publich-Subscribe System 1:n Publisher: o Publizieren strukturierte Ereignisse an einen Ereignis-Service. Subscriber: o Interessieren sich für bestimmte Ereignisse und abonnieren diese. Beispiel: o Ereignis = Netzwerk-Dienst (Badge-System) nicht verfügbar o Ereignis Notifikation: das System warnt Subscriber und informiert diese, sobald das Problem behoben ist. Typische Kennzeichen / Eigenschaften o Heterogen: Die Infrastruktur kann ohne grössere Probleme sehr heterogen sein. o Asynchron: Ereignisinformationen werden sofort generiert, oft später gelesen. Beobachter-Objekte übernehmen wichtige Aufgaben: o Weitergabe (Ereignisdienst wird entlastet. o Benachrichtigungsfilter o Ereignismuster: Der Subscriber kann mithilfe eines Ereignismusters festlegen, welche Nachrichtenklassen übermittelt werden. o Benachrichtigungs- Mailboxen Publisher Sobald ein Ereignis e eintritt, wird dieses publiziert: publish(e); Falls der Publisher zukünftige Ereignisse bereits voranmelden kann, wird eine Methode advertize(f) und unadvertize(f) benötigt. Subscriber Interessierte melden sich (eventuell mit einem zusätzlichen Filter) beim Publisher an: subscribe(f) (f steht für Filter). Falls der Empfänger nicht mehr an den Nachrichten interessiert ist, kann er sich abmelden: unsubscribe(f): Idealerweise verfügt das System über einen Callback Mechanismus: notify(e); Varianten Channel-basiert; Topic-basiert Content-basiert; Typen-basiert Message Queues 1:1 (P2P) Producer: o Sendet eine Nachricht an die Warteschlange: send(); Receiver: o Empfängt die Nachricht, indem er sie aus der Warteschlange liest o Drei Lösungsansätze: Blockierendes Lesen: Der Receiver wird solange blockiert, bis die Nachricht in der Warteschlange ist. o Nicht-blockierendes Lesen: polling Überprüfen der Warteschlange, ob eine Nachricht eingetroffen ist. Lesen der Nachricht oder einer Meldung, dass nichts da ist. o notify(): Messaging einem Messaging Service dieser Service umfasst: den Message Server (auch Message Router oder Message Broker genannt), administrierte Objekte (typischerweise Topics und Warteschlangen, aber auch Channels) und ein Message Protokoll Kommunikation geschieht asynchron! Clients Messages Daten Distributions Architekturen Da jeder Prozess eine Verbindung mit jedem andern Prozess hat, kann jeder Prozess Informationen von einem andern Prozess lesen oder schreiben. Eine Applikation in einem solchen Umfeld muss also geöffnete Dateien für jeden andern Prozess besitzen. Dies generiert einen entsprechenden Overhead, das System wird anfällig und ist komplex. Virtuell vollverknüpfte Netzwerke Java Message Systeme implementieren virtuelle, vollverknüpfte Netzwerke. JMS nimmt der Applikation die Aufgabe ab, die Verbindungen der Prozesse untereinander zu regeln. Dies geschieht mit Hilfe eines eigenen speziellen Prozesses, dem Router, der die Verbindungen aufrecht erhält und managed. Ein Anwendungsprogramm hat somit nur noch eine einzige Verbindung – mit dem Java Message Router. Damit reduziert sich die Komplexität und erhöht sich die Performance. Kommunikations-Pattern P2P Kommunikations-Pattern Publish-Subscribe Kommunikationsmodelle Message-Struktur Header (zwingend) Properties (Erweiterungen des Headers) (optional) Body (zwingend) Message Selektor Ein JMS Message Selector erlaubt es einem Client mit Hilfe des Message Headers zu spezifizieren, an welchen Messages er interessiert ist. o Nur Nachrichten, deren Header und Properties dem Selektor entsprechen, werden abgeliefert. o Dabei muss der Begriff "nicht abgeliefert" geklärt werden: es werden nur jene Nachrichten akzeptiert, bei denen die Header und Property Felder mit jenen des Selektors identisch sind. Message Selector Syntax o Der Message Selektor ist eine Zeichenkette String, deren Syntax auf einem Subset von SQL92 Conditional Expression Syntax basiert Einfacher Queue Sender und Receiver – Codebeispiel Publish Suscribe Codebeispiel Message Delivery NON_PERSISTENT Mode : Vorteil dieses Modus ist der geringe Overhead. Die Nachrichten werden nicht gelogged oder gespeichert. Falls ein JMS Provider ausfällt, kann eine solche Meldung verloren gehen. PERSISTENT Modus : instruiert den JMS Provider, dass dieser sich darum kümmern muss, dass die Nachrichten nicht verloren gehen. Der JMS Provider muss solche Nachrichten auch garantiert maximal einmal abliefern. Eine Nachricht kann also verloren gehen, darf dann aber garantiert nur einmal abgeliefert werden. Ein JMS Provider muss eine PERSISTENT Message einmal-und-nur-einmal abliefern. Dadurch wird die Performance verschlechtert. Distributed Shared Memory Parallelisierungs-Anwendungen Multiprozessor-Anwendungen JavaSpaces Verteilter, gemeinsam genutzter „dynamischer Speicher“ hilft ein Netzwerk von (J)VMs zu föderieren erlaubt eine einfache dynamische Persistenz / Speicherung basiert auf dem verteilten Transaktionsprotokoll benutzt verteilte Lease und Ereignis-Protokolle Eigenschaften von Spaces o mehrere entfernte Prozesse können mit einem Space kommunizieren o Spaces sind persistent o Spaces sind assoziativ o Transaktionen sind safe o Spaces erlauben den Austausch ausführbarer Inhalte Elementare Operationen von Spaces o write() o read() o take() o notify() o Das Modell Definitionen Spaces o sind Speicherbereiche für Objekte (rein passive Daten) Entries o sind Objekte, die mit einem Space in Kontakt treten können Templates o sind spezielle Entry Objekte, die zur assoziativen Suche in Spaces eingesetzt werden können. Voraussetzungen o Java Virtual Machine o Jini Technologie (Starter Kit) o Java Spaces Technologie (Java Spaces Technology Kit) JavaSpaces ist ein Jini Service (net.jini.space) Spaces erlauben nur folgende Operationen o read, readIfExists o take, takeIfExists o notify, snapshot, write JavaSpace Codebeispiel Transaktionen JavaSpaces verwendet den Jini Transaktionsmanager: o two phase commit (2PC) Protokoll o implementiert das ACID Prinzip atomar consistent isolation durability o Space koordiniert nebenläufige Zugriffe Synchronisation wird von Space erledigt. JavaSpaces o speichert (passiv) Java Objekte o die Suche geschieht assoziativ inhaltsbasierte Suche o soll Netzwerkprogrammierung vereinfachen 08 Verteilte Dateisysteme Eigenschaften von Dateisystemen / File System Design / Dateisystem Architektur Hauptziel: Gemeinsame Nutzung von Ressourcen (also auch Daten, Informationen => Dateiserver) Dateisystem-Verwendungsstufen Level 1: Ein User, ein Prozess greift auf lokale Daten zu Beispiel: MS/IBM-DOS ((Disk Operating System) Themen: Namensgebung / API / Mapping der Dateiabstraktion / Integrität der Daten Level 2 Ein User, mehrere Prozess greift auf lokale Daten zu Beispiel: MS/IBM-DOS („half an operating system“) Themen: Namensgebung / API / Mapping der Dateiabstraktion / Integrität der Daten / Concurrency (Nebenläufigkeiten) Level 3 Mehrere User, mehrere Prozess greift auf lokale Daten zu Beispiel: Time-Sharing OS, Unix („tu nix mit Unix“) Themen: Namensgebung / API / Mapping der Dateiabstraktion / Integrität der Daten / Concurrency (Nebenläufigkeiten) / Security Level 4 Mehrere User, mehrere Prozess greift auf verteilte (auf mehreren Rechnern) Daten zu Beispiel: Cedar (Xerox), DEC RMS, Sun NFS, CMU Andrew und Coda File System Themen: Namensgebung / API / Mapping der Dateiabstraktion / Integrität der Daten / Concurrency (Nebenläufigkeiten) / Security / File Location und Verfügbarkeit (zudem Effizienz, Sicherheit und Robustheit) AIP-Zugriffe: Zugreiffbar: Eigentümer / Dateityp / Zugriffskontrolliste Nicht Zugreiffbar (In der Regel): Verweisezähler / Attribut-Zeitstempel / Zeitstempel (CRUD) / Dateilänge Bsp. Linux o Open/close/read/write/lseek/unlink/link/stat Varianten verteilter Dateizugriff V1: Transparenter Dateizugriff o Synonym: Das entfernte Zugriffsmodel o Client weiss nicht, wo sich die Daten befinden V2: Intransparenter Dateizugriff o Synonym: Das Upload/Download-Zugriffsmodel o Der Client kopiert manuell vom Server und schiebt es nach der Verwendung wieder manuell an den Ursprungsort zurück (veraltet!) Anforderungen an verteilte Dateisysteme Transparenz o System kennt den Unterschied zwischen lokalem und entferntem System nicht. o Client sieht einen einheitlichen Namensraum o Programm nach verschieben der Datei ohne Neuprogrammierung lauffähig o Zugriff / Ort / Mobilität / Leistung / Skalierung Concurrency / Nebenläufigkeit o Keine Störung durch multiplen Zugriff o Lastenverteilung durch Dateireplikation Offenheit o Unterstützung diverser HW/SW/OS/Programmiersprachen Fehlertoleranz o idempotent: Kontostand(600) -> OK / Einzahlen (100) -> NOK Wenn etwas ausgeführt wird, muss es auch immer im selben resultieren. Konsistenz Sicherheit o Zugriffskontrolle (Verschlüsselung, Benutzer- ID) Effizienz Sun NFS (Network File System) Architektur o o o NFS-Server-Modul (Im Kernel) o Verwaltet Zugriffe o Anfragen via TCP oder UDP (Auch verschlüsselt möglich) Virtuelles Dateisystem o Einbindung verschiedener Dateisysteme o Bsp: DateiHandle bei Unix Client- Integration / Modul o NFS-Schnittstelle (API) o Authentifizierung / Caching Caching (Performancesteigerung) o o o Client Caching o Memory Cache + Disk Cache o Wenn Daten gelesen werden -> Validierung o Wenn Modifizierung der Daten -> zurück an den Server senden Dateidelegation (V4) o o o o o Server-Caching o Read-Ahead -> Lesezugriffe im Voraus ausgeführt o Buffer-Cache -> Daten bleiben im Cache bis Puffer benötigt wird o Delayed-Write -> Änderungen werden erst geschrieben, wenn Puffer anderweitig benötigt wird / Zur Sicherheit werden alle 20 sek Daten auf Disk geschrieben o Write-Threough -> Schreibbefehle werden vom Cache und Memory und auf Disk o Commit Write -> ab V.3 -> werden erst bei „Commit“-Befehl geschrieben. (Wie DB) o Andrew File System (AFS) Grundüberlegung: Entgegen einer DB gibt es hier andere „Variablen“. Datei meist klein/ Mehr schrieben als lesen (1:6) / Meist nur von einer Person verwendet / usw. Software-Komponenten o Vice: o Serverprozess auf jedem AFS-Server o Venus: o Entspricht dem Clientmodul des abstrakten Modell (Läuft auf jedem Client / Verwaltet Cache) Callbacks o o o Damit der Server(Vice) den Client(Venus) über Änderungen informieren kann, wenn ein anderer Client eine Änderung vorgenommen hat. (callback promise Token) Zustände der Tokens o Valid: Datei ist aktuell o Canelled: Ein Client (Venus)-Prozess hat eine Aktualisierung angefordert Einsatz des Tokens o Beim Lesezugtiff prüft der Client den Token. Falls gecancelled= neue Version anfordern / sonst -> mit der lokalen Kopie arbeiten o Beim einem Neustart: Der Server prüft dann anhand der Tokens die Aktualität der Daten. Sicherheit in AFS o o o Sicherheitskritische Software läuft lediglich auf den Servern, die als vertrauenswürdig betrachtet werden. Zugriffsrechte werden an einzelne Benutzer oder an Gruppen von Benutzern vergeben. o Ein Benutzer in mehreren Gruppen summiert die Rechte o Rechte: read, write, lookup, insert, administer, lock, delete AFS wird standardmässig mit Kerberos gespeichert. Zusammenfassung o Wichtige Entworfspakete o Effiziente Nutzung des Client-Cachings o Leistung vergleichbat mit lokalen Dateisystemen o Konsistenzwahrung o Wiederherstellung bei Abstürzen und Ausfällen o Hoher Durchsatz o Skalierbarkeit 09 Namensdienste „Namensdienst“ = Dienst, welcher von Clients benutzt wird, um Attribute (Adressen von Ressourcen, Objekten, Benutzern, …) zu verwalten. Definitionen Bindung Context Namespace Verzeichnisdienst Assoziation eines Namens zu einem Objekt Ein Set von Namens <-> Objekt Bindungen Besteht aus den erlaubten Namen des Namensystems (Bsp: c:\ ist der Namensraum im Dateisystem, welcher alle Dateien des Laufwerks c: umfasst) Erweiterung des Namensdienstes: Stellt Filterfunktionen und Zuordnungen zur Verfügung Alternative Namen Uniform Resource Identifier Uniform Resource Locator Uniform Resource Name Aliase URI URL URN Anforderungen an Verzeichnisdienste - Verwalten einer grossen Anzahl von Namen Lange Lebensdauer des Dienstes Hohe Verfügbarkeit Isolierung von Fehlern Tolerierung von Misstrauen Strategien zur Namensauflösung Iterativ Der Client liefert dem Server immer die ganzen Informationen zum Namen. Falls dieser den Namen nicht auflösen kann, wird der Client zum nächsten Server weitergeleitet und die Anfrage beginnt von neuem. Rekursiv Der Client liefert dem Server den ganzen Namen. Falls dieser den Namen nicht auflösen kann, wird der Server den nächsten Server kontaktieren und dieser den nächsten Server, bis der Name aufgelöst werden kann (bis zu einem Max.Hop-Wert). Server-kontrolliert Der Server entscheidet selbst, ob er weitere Anfragen Rekursiv oder Iterativ bearbeitet. DNS Aufgaben - Übersetzung Name <-> IP - Caching der Ergebnisse vorangegangener Abfragen (TTL beachten!) - Mailhost einer Domäne bestimmen - Bekannte Dienste auflisten - Optionale Attribute verwalten Ressourcen Records Datensatztyp A NS CNAME SOA WKS PTR HINFO MX TXT Beschreibung Computeradresse Autoritativer Name-Server Aliasname Markiert den Anfang der Daten einer Zone Bekannte Dienste Domainnamenzeiger (umgekehrtes Nachschlagen) Host-Informationen Mail Text Inhalt IP Domainname des Servers Domainname für Alias Parameter für die Verwaltung der Zone Liste mit Dienstnamen und Protokollen Domainname Host-Architektur und OS List mit <Prio,Host>-Paaren Beliebiger Text Directory-, und Discoveryservices Directory Service: Liefert ein Set von Namen, welche der vorgegebenen Beschreibung entsprechen. Discovery Service: Directory + Netzwerkkonfig. Wird automatisch aktualisiert; Clients können sich spontan vernetzen; Services werden automatisch aktualisiert. LDAP (Lightweight Directory Access Protocol) - Ein Protokoll für Standard und erweiterbare Verzeichnisse. LDAP ist im ISO/OSI Modell in der vierten Schicht angesiedelt. Jeder Eintrag ist über einen eindeutigen „Distinguished Name (DN)“ identifiziert Ein Entry beschreibt ein Objekt in einem LDAP-Directory Eine Objektklasse enthält zwingende und nicht zwingende Attribute Beispiel eines LDAP Strings: LDAP://cn=Matter,sn=Mani,ou=Rechtsdienst,o=Stadt Bern,c=ch Typische Attribute laut RFC2256 Attribut Bedeutung C Country O Organisation Ou Organisation Unit Cn Common Name Uid User ID Sn Surname L Location Dc Domain COmponent Vollständige Liste für Active Directory: http://www.selfadsi.de Ablauf LDAP Kommunikation 1. Client öffnet Session mit einem Server a. Spezifikation des Servers b. Authentifizierung beim Server 2. Absetzen der Operationen 3. Unbinding Wird die Information beim Lesen nicht in lokalen LDAP-Servern gefunden, so wird auf weitere Server (referenzierte) ausgewichen. Schema Standardisierte Objekte, welche die Zusammenarbeit mit Servern gewährleisten. - Stellt eine Sammlung von Strukturdefinitionen dar o Welche Attribute verwendet werden o Welche Objekte verwendet werden o Filter / Matching Regeln o Welche Berechtigungen nötig sind für die Operationen JNDI (Java Naming & Directory Interface) - Vereinheitlicht den Zugriff auf Verzeichnisdienste. Teil der Java Standard Edition Einheitliche API Beliebiger gerichteter Baum Jeder interne Knoten repräsentiert einen Context (javax.naming.Context) Der Context stellt die Methoden zur Verfügung: - Bind Rebind Lookup createSubcontext - listBindings 10.1 Peer 2 Peer Systeme - - Grosse Anzahl aktiver Teilnehmer Daten und Ressourcen sind aufgeteilt Keine dedizierten Server Skalierbarkeit: P2P ist nicht limitiert durch einen ServiceProvider Vergleich Client – Server: o In der Regel hierarchisch (Ein Server, Mehrere Clients) o Zentrale Zugriffskontrolle o Zentrales Management Dynamisch Balanciert Routing Overlays - Ein verteilter Algorithmus für einen P2P-Middleware Layer, der die Anfragen eines Clients an die unterschiedlichen Hosts weiterleitet Jeder Knoten kann auf jedes entfernte über mehrere Zwischenknoten zugreifen Identifizierung über GUIDs (Globally Unique Identifier) Routing Problem Ansatz: Jeder Knoten enthält Informationen über die Informationsobjekte, welche redundant sein können. API für verteilte Hashtabelle (DHT) - Put(GUID, data) o Die Daten werden repliziert abgespeichert, auf allen Nodes welche für die GUID verantwortlich sind - Remove(GUID) o Löscht alle Referenzen - Value = get(GUID) o Liefert die Daten von irgend einem Knoten der für die GUID zuständig ist Replikation (DHT) - Daten der GUID x werden auf Knoten repliziert, welche nummerisch nahe bei der GUID x sind. DOLR Api - Publish(GUID) o GUID kann aus dem Objekt berechnet werden - Unpublish(GUID) o Objekt mit GUID ist nicht mehr verfügbar - sendToObj(mag, GUID, [n]) o Nachricht an Objekt senden; [n]: die Nachricht wird an n Replikate des Objektes versendet Replikation (DOLR) - Separate Funktion zur Bestimmung der Lokation ausserhalb des Routing Layers Pastry, Tapestry - Pastry kennzeichnet jeden Knoten mit einer zufälligen ID (aus zirkulärem ID-Raum) Routing (Pastry, Tapestry) - Jeder Knoten kennt L direkte Nachbarn (nummerisch nahe). Diese werden im Leaf-Set festgehalten - Jeder Knoten informiert die Applikationen über neue oder nicht mehr erreichbare Knoten aus seinem Leaf-Set - Theoretisches Verhalten von 𝑂(log(𝑁)) um in einem Pastry Netz mit N Knoten eine Nachricht abzuliefern - Jeder Knoten kann bestimmte Funktionen übernehmen Zirkuläres Routing - Punkte repräsentieren aktive Knoten. Knoten 0 und der letzte Knoten (2128 − 1) sind benachbart - Eingezeichnet ist das Routing von 65A1FC zu D46A1C (l = 4) - Algorithmus skaliert schlecht und wird in der Praxis nicht verwendet Pastry Routing Beispiel - Routing von 65A1FC nach D46A1C - Mithilfe einer optimalen Routingtabelle kann die Nachricht nach log16(𝑁) Hops abgeliefert werden - Ablauf: 65A1FC => D13DA3; D13DA3 => D4213F; D4213F => D462BA; D462BA => D46A1C Lokalität in P2P Systemen - Ermittlung mittels Netzwerk-Latenzzeiten Vorteile: o Das Netzwerk darunter ist nicht 100% zuverlässig; Nahe Knoten sind besser erreichbar als weiter entfernte o Nachrichten haben kürzere Wege o Weniger Bandbreite benötigt o Nachrichten schneller am Ziel Lokalität in Tapestry / Tapistry’s Routing Algorithmus - Existiert von einem Objekt eine oder mehrere Kopien, so wird die nächstgelegene Kopie retourniert - Datenobjekte besitzten eine eindeutige Object ID - Jeder Knoten kann Objekte bereitstellen; Kopien der Objekte können auf mehreren Knoten vorhanden sein - Root Node: für jedes Objekt eindeutig bestimmter (berechneter) Knoten welcher das Original enthält und die Objektverweise auf Kopien verwaltet - Sucht ein Knoten ein Objekt, schickt er einen Request an den Root Node - Passiert der Request einen Objektverweis wird der Request dorthin weitergeleitet - Je näher ein Knoten einer Kopie ist, desto eher kreuzen sie sich (hohe Wahrscheindlichkeit) 10.2 Zeit und globale Zustände Zeit bzw. eine Uhr ist wichtig, da es eine natürliche Reihenfolge definiert Uhren, Ereignisse und Prozesszustände Begriffe Jeder Prozess p(0i-n) läuft auf einem eigenen Prozessor Operationen der Prozesse werden Ereignisse genannt 𝐻(𝑡) =Hardwarezeit des Prozessors / 𝐶𝑖 (𝑡) = Uhrzeit intern in Registern/ 𝛼 =ist eine Skalierung / 𝛽 =ist ein Offset 𝐶(𝑡) = 𝛼 ∗ 𝐻𝑖 (𝑡) + 𝛽 UTC Koordinierte Universalzeit (UTC) berücksichtigt die schaltsekunden Signale zur Einstellung stammen von Sateliten (GEOS/GPS/Rundfunksendern Genauigkeit o Rundfunk: +/- 1 msec +/- 10 msec durch atmosphärische Störungen o Sateliten: GEOS: +/- 1 msec GPS: +/- 1 msec Synchronisierung physischer Uhren Externe Synchronisation o Zeit-Synchronisation via externer Ressource, wie Zeitserver o Falls gilt |𝑆(𝑡) − 𝐶(𝑡)| < 𝐷 für alle i und eine Referenzzeit 𝑆(𝑡), dann sind die Uhren der Prozesse 𝐶𝑖 genau innerhalb des Grenzwerts D Interne Synchronisation o Uhren in einem verteilten System untereinander ohne Bezug auf eine Referenzzeit synchronisiert. o In diesem Fall messen wir lediglich die Differenzen |𝐶𝑖 (𝑡) − 𝐶𝑗 (𝑡)| < 𝐷 die Uhren stimmen innerhalb des Grenzwerts D überein. o Interne Synchronisation impliziert nicht externe! Cristian‘s Methode zur Synchronisation von Uhren o Da RoundtripZeit relativ klein und bei hin und Rückweg ca. gleich gross ist, wird einfach die Zeit + die halbe RoundTripZeit genommen. o Zeitschätzung o 𝑇𝑟𝑜𝑢𝑛𝑑𝑇𝑟𝑖𝑝 2 Realistisch geschieht die Übertragung in der Zeit zwischen „min“ und „max“ Aus Serversicht S kann frühestens zum Zeitpunkt 𝑡𝑃𝑟𝑜𝑧𝑒𝑠𝑠 + 𝑚𝑖𝑛 (𝑡𝑃𝑟𝑜𝑧𝑒𝑠𝑠 = 𝑆𝑒𝑛𝑑𝑒𝑧𝑒𝑖𝑡𝑝𝑢𝑛𝑘𝑡 [𝑣𝑜𝑛 𝑃𝑟𝑜𝑧𝑒𝑠𝑠 𝑃] 𝑣𝑜𝑛 𝑚𝑟 𝑎𝑛 𝑑𝑒𝑛 𝑆𝑒𝑟𝑣𝑒𝑟 𝑆) seine Zeit in eine Antwortnachricht legen und 𝑚𝑡 senden. S muss spätestens zum Zeitpunkt 𝑡𝑟𝑒𝑐𝑒𝑖𝑣𝑒 − 𝑚𝑖𝑛 (𝑡𝑟𝑒𝑐𝑒𝑖𝑣𝑒 = 𝐸𝑚𝑝𝑓𝑎𝑛𝑔𝑠𝑧𝑒𝑖𝑡𝑝𝑢𝑛𝑘𝑡 [𝑏𝑒𝑖𝑚 𝑃𝑟𝑜𝑧𝑒𝑠𝑠 𝑃] 𝑣𝑜𝑛 𝑚𝑡 ) seine Zeit in eine Antwortnachricht legen und 𝑚𝑡 senden. Die Zeit auf S beim Empfangen von 𝑚𝑡 in P liegt also im Intervall 𝛥𝑇 = [𝑡𝑆𝑒𝑟𝑣𝑒 𝑟 + 𝑚𝑖𝑛, 𝑡𝑆𝑒𝑟𝑣𝑒𝑟 + (𝑇𝑟𝑜𝑢𝑛𝑑𝑇𝑟𝑖𝑝 – 𝑚𝑖𝑛)] P setzt seine Zeit auf 𝑇 = 𝑡𝑆𝑒𝑟𝑣𝑒𝑟 + Genauigkeit: 𝑇𝑟𝑜𝑢𝑛𝑑𝑇𝑟𝑖𝑝 +/- ( 2 – 𝑚𝑖𝑛) (die Hälfte des Intervalls Δ 𝑇: 𝑇𝑟𝑜𝑢𝑛𝑑𝑇𝑟𝑖𝑝 – 2 𝑚𝑖𝑛). o Diskussion: Interne Uhr (10^-8) muss um ein Vielfaches genauer sein, als die Laufzeit durchs Netzwerk (1-10 msec) Die Laufzeit im Netz muss kurz gegenüber der geforderten Genauigkeit sein. (z.B. Laufzeit bei 1-10 msec, Genauigkeit von 1 sec)$ Berkeley Algorithmus (interne Synchronisation) o Berkeley (UNIX) Algorithmus (1989): Ein Rechner ist der Koordinator: Zeit-Server (= Koordinator) fragt periodisch alle Rechner nach ihrer Uhrzeit Aus den geschätzten + der lokalen Zeiten wird das arithmetische Mittel gebildet. Die jeweiligen Abweichungen vom Mittel werden als neuer aktueller Uhrenwert den Rechnern zurückgesendet Network Time Protocol NTP o Hohe Zuverlässigkeit (durch Fehlertoleranz): Redundante Server o Hohe Verfügbarkeit: Sind auf hohe Zugriffszahlen ausgelegt o Schutz gegen Verfälschungen: z.B. Authentifizierungstechniken o Primary Server (PS) besitzen UTC-Empfänger o Secondary Server werden von PS synchronisiert o Die Blätter bestehen aus Workstations o Genauigkeit nimmt von oben nach unten ab o SyncModi (alle verwenden UDP-Transportprotokoll) MultiCast-Mode Für schnelle lokale Netze / nur geringe Genauigkeit / keine Infos über Laufzeiten / Server schickt periodisch aktuelle Zeit per Multicast Procedure-call-mode Ähnlich wie christian’s Alforithmus / Wir eingesetzt, falls Multicast zu ungenau, oder nicht möglich / erzielt mittlere Genauigkeit / Server beantwortet Zeitanfragen mit aktuellem Zeitstempel Symmetric-mode zur Synchronisation zwischen Zeit-Servern (erzielt hohe Genauigkeit) / auf anderer Ebene, falls hohe Genauigkeit gefordert / Wechselseitiger Austausch von Zeitstempeln. / Messen der Netzwerkverzögerung und Uhrengenauigkeit o Abgesehen von Multicast werden Nachrichten in Paaren ausgetauscht. Logische Zeit und logische Uhren Wenn zwei Ereignisse 𝑒𝑖1 𝑢𝑛𝑑 𝑒𝑖2 𝑖𝑚 𝑃𝑟𝑜𝑧𝑒𝑠𝑠 𝑝𝑖 𝑎𝑢𝑓𝑡𝑟𝑒𝑡𝑒𝑛, 𝑠𝑡𝑒ℎ𝑒𝑛 𝑠𝑖𝑒 𝑖𝑛 𝑒𝑖𝑛𝑒𝑟 𝑅 𝑒𝑙𝑎𝑡𝑖𝑜𝑛 →𝑖 (𝑒𝑖1 →𝑖 𝑒𝑖2 ) Mit anderen Worten. Das Senden der Nachricht GESCHIET VOR (HappendBefore) dem Empfangen der Nachricht. Lamport Bei dem Lamport-Algorithmus wird also genau nach dem Schema 𝐿𝑖 = max(𝐿𝑖(𝐴𝑏𝑠𝑒𝑛𝑑𝑒𝑛) , 𝐿𝑘(𝐸𝑚𝑝𝑓𝑎𝑛𝑔𝑒𝑛) ) + 1 vorgegangen. Bsp: bei Zahl 34 max(33, (25+5=)30)+1 = 33+ 1 = 34 Aus a vor b folgt C(a) vor C(b) // ABER ACHTUNG // Aus C(a) vor C(b) folgt NICHT a vor b VektorZeit Da das oben beschriebene Problem besteht, wird mit der VektorZeit versucht dieses Problem zu lösen. Die Vektorzeit charakterisiert die Kausalbeziehung in dem Sinne, dass Ereignisse, die in einer Kausalrelation stehen, auch bezüglich der Vektorzeit geordnet sind, und dass bezüglich der Vektorzeit geordnete Ereignisse auch in einer Kausalrelation stehen. Die Vektorzeit bildet die aufgrund des lokalen Wissens „beste Schätzung“ der globalen Reihenfolgeverhältnisse. Die Vektorzeit liefert nicht mehr Informationen über zeitliche Zusammenhänge, als Lamport‘s Zeit! Globale Zustände Im Weiteren konzentrieren wir uns auf die Lamport Halbordnung. Beispiele wo der globale Zustand eine wichtige Rolle spielt: Garbage Collectors (Welche Objekte löschen) DeadLock Terminierung Schnappschuss - Algorithmus Startzustand P1 -> Konto: 1000$, Waren: 0 wobei bereits 5 Bestellt und bezahlt! P2 -> Konto 50$, Waren: 2000 P2 verkauft Ware, 10$ das Stück, P1 kauft. P1 bestellt 10 Waren bei P2 Sendet Marker zusammen mit Auftrag (10, 100$) P2 sendet die 5 Waren der vorangegangen vor der Ankunft des Markers. Gleichzeitig ist der neue Auftrag noch in der „Pipeline“ Beim Eintreffen notiert P2 den Zustand <50, 1995> - P1 empfängt nun zuerst die 5 Waren und anschliessend die Markernachricht M von P2. - P1 weiss damit, dass die Aufzeichnung abgeschlossen ist. - P2 hat zwar auf c2 nach der MarkerNachricht noch die Bestellung empfangen. Aber gemäss Algorithmus wurde diese Nachricht aufgezeichnet (sie fand nach dem Cut statt). Der Algorithmus terminiert, wenn der aussende Prozess alle Marker der anderen Prozesse erhalten hat. Voraussetzung: Alle Prozesse müssen erreichbar sein und in endlicher Zeit reagieren. Anderer Ansatz zur Darstellung des Ablaufes bei der globalen Zustandsfindung Es ist nicht möglich den Zustand aller Geräte gleichzeitig zu bestimmen! Weil: o Es gibt keine globale Uhr. o Zufällige Verzögerungen im Netzwerk. Deterministisches Verhalten Es ist jederzeit bekannt, welches Ereignis das nächste ist. Nicht-Deterministisches Verhalten Der Zeitablauf erlaubt mehrere Varianten/Folgezustände. Deterministisch Producer code while (1) { produce m; send m; wait for ack; } Gibt also immer eine strikte Abfolge. Consumer code while (1) { recv m; consume m; send ack; } Nicht-Deterministisch Alle Abläufe sind möglich, aber einer davon wird gewählt. Deterministisches Verhalten: o Ein lokales Ereignis enthält die Informationen, die für die Bestimmung des globalen Zustandes benötigt werden. o Ein Prozess kennt den Zustand eines andern Prozesses/ kann diesen bestimmen Konsistent 1. 2. 3. 4. Konsistent, aber unwarscheinlich Nicht konsistent. Q sendet den Marker an p Q erfasst seinen Zustand Sq1 P erfasst seinen Zustand als Sq2, der Kanalzustand {} ist noch leer. Q empfängt m3, m3 ist der Kanalzustand (in-Kanal), m3 fehlt in q und bei p bei dessen Zustandsaufnahme, m3 ist „in transit“ (im Kanal) S* ist aus Si erreichbar / Sf ist von S* aus erreichbar Zusammenfassung Die Bestimmung des globalen Zustandes ist in verteilten Systemen eine schwierige Aufgabe. Snapshot Algorithmen liefert nicht genug Informationen, um den globalen Zustand zu bestimmen 11.1 Koordination und Übereinstimmung Verteilter wechselseitiger Ausschluss Mehrere Prozesse nutzen Ressourcen gemeinsam -> muss koordiniert werden Kritischer Bereich: Zeitabschnitt, während dem mehrere Prozesse auf eine gemeinsame Ressource zugreifen möchten. Lösungsansatz lokal Semaphore, Monitore Lösungsansatz im Netzwerk Mithilfe von Nachrichtenaustausch Verteilte Synchronisation Mutual Exclusion (ME) Leistungsbewertung der Ausschlussalgorithmen Verbrauchte Bandbreite für die Koordination o Proportional zur Anzahl Nachrichten in den enter(), exit() Operationen (wie viele Nachrichten brauchen wir für die Koordination). Client-Verzögerung für Ein- und Austritt o durch die enter(), exit() Operationen Systemdurchsatz-Auswirkung o Verzögerungen durch Koordination : t.exit(i) – t.enter(i+1) Lösungsansatz Zentraler Server Lösungsansatz Ring Sicherheit und Lebendigkeit sind erfüllt: o Sicherheit ist leicht zu sehen: Nur ein Prozess hat das/den Token zur selben Zeit. o Kein Prozess wird ausgehungert, da die Reihenfolge durch den Ring bestimmt ist. Die Happened-before Relation ist nicht erfüllt: Maximal muss ein Prozess warten, bis alle anderen Prozesse einmal im kritischen Bereich waren. Verlorene Token erfordern Neugenerierung durch Koordinator. o Verlust eines Tokens ist schwer zu erkennen, da es sich auch um einen sehr langen Aufenthalt in einem kritischen Bereich handeln kann. Ricard und Agrawala’s Algorithmus Abstimmungsverfahren als verteilter, symmetrischer Algorithmus basierend auf Lamport‘s logischer Zeit, d.h. jeder Prozess besitzt eine logische Uhr. Prinzip: alle beteiligen Prozesse entscheiden gemeinsam über den Eintritt eines einzelnen Prozesses in den kritischen Abschnitt Alle Prozesse verständigen sich über Multicast-Nachrichten. Annahme: jeder Prozess kennt drei Zustände o released: Der Prozess befindet sich nicht im kritischen Abschnitt. o wanted: Der Prozess verlangt den Eintritt in den kritischen Abschnitt. o held: Der Prozess befindet sich im kritischen Abschnitt. Nachrichten: zwei Arten von Nachrichten: o request, beinhaltet eignen (logischen) Zeitstempel und ID o reply, gibt kritische Region für Anforderer frei. Beispiel R&A Multicast Synchronisation Beispiel Verteilte Lösung Beispiel Alle drei Basisbedingungen werden erfüllt. Aber: Der single-point-of-failure wurde ersetzt durch n points-of-failure. Wenn ein Prozess (mit Warteschlange) nicht mehr arbeitet, funktioniert das System nicht mehr. o Verbesserung: Dieses Problem könnte durch explizite Verwendung eines RequestReply-Protokolls ersetzt werden (jede Nachricht wird sofort bestätigt). Wenn keine Bestätigung kommt, ist der Prozess nicht mehr aktiv. Jeder Prozess muss immer bei der Entscheidung mitwirken, obwohl er evtl. gar kein Interesse an der kritischen Region hat. o Verbesserung: eine einfache Mehrheit genügt. Der Algorithmus ist insgesamt langsam, kompliziert, teuer und wenig robust, aber, wie A.S. Tanenbaum sagt: „Finally, like eating spinach and learning Latin in high school, some things are said to be good for you in some abstract way.” Maekawa’s Algorithmus Idee o Jedem Prozess pi wird eine Wählermenge Vi zugeordnet (Vi ist Teilmenge {pi| für i=1..N}) o pi ist Element von Vi o Vi und Vj sind nicht disjunkt o Die Mächtigkeit aller Vi ist gleich K o pi ist Element von M Vj‘s (M<=N) o Die Wähler bestimmen, ob pi in CS eintreten darf Problem o Bestimmung der Vj o Der Algorithmus ist Deadlock gefährdet. Resume Keiner der beschriebenen Algorithmen toleriert einen Nachrichtenverlust Prozessabsturz: Zentrale Lösung: Absturz eines Clients, der das Token weder besitzt noch angefordert hat, kann toleriert werden. Verteilte Lösung: Kann Absturz tolerieren, wenn Request-Reply-Protokoll verwendet wird. Token-Ring: kein Prozess darf abstürzen Wahlen Algorithmen In vielen verteilten Algorithmen benötigt man einen Prozess, der eine irgendwie geartete besondere Rolle spielt, z.B. als Koordinator, Initiator oder Monitor. Die Aufgabe eines Wahl-Algorithmus (Election-Algorithmen) ist es, einen Prozess unter vielen gleichartigen Prozessen durch eine kooperative, verteilte Wahl eindeutig zu bestimmen, der diese Rolle übernimmt. Die Wahl (Election) wird dabei meist durch die Bestimmung eines Extremwertes auf einer Ordnung der beteiligten Prozesse durchgeführt: o Jeder Prozess hat eine Nummer, die allen anderen Prozessen bekannt ist o Kein Prozess weiss, welcher andere Prozess gerade funktioniert o Alle Algorithmen wählen den Prozess mit der höchsten Nummer aus. Nach Ausfall gliedert sich ein Prozess beim Neustart wieder in die Menge der aktiven Prozesse ein Voraussetzungen Leistungsbewertung der Algorithmen Anzahl Nachrichten für die Wahl Umschlagszeit : t.abschlussDerWahl() - t.startDerWahl() Ring Algorithmus Annahme: o alle Prozesse haben eine eigene Identifikation o Prozesse sind in einem gerichteten logischen Ring angeordnet o jeder Prozess kennt seinen direkten Nachbarn, aber auch die weiteren Knoten des Rings, so dass er bei Nichterreichbarkeit seines Nachfolgers dessen Nachfolger adressieren kann. o alle Prozesse sind aktiv. o Das System ist asynchron. o Es treten keine Fehler auf. Es werden zwei Sorten Nachrichten verschickt: o election: Auslösen der Wahl o coordinator: Mitteilung, wer der neue Koordinator ist Ziel o Wahl des sogen. Koordinators (max Prozess-ID) Vorgehen o Jeder Prozess ist zuerst Nichtwähler. o Jeder Prozess kann eine Wahl veranlassen. Fall ein Prozess eine Wahl initialisieren will oder muss, sendet er eine election (Wahl-) Nachricht an seinen Nachbarn. Diese enthält seine Prozess ID. Empfänger: ist die Wahl-Prozess-ID grösser als seine dann sendet er die Nachricht weiter. falls kleiner, dann trägt er seine Prozess-ID ein und wird Wahlteilnehmer sonst (Prozess-ID auf dem Wahlzettel = eigene Prozess-ID) Prozess wird zum Koordinator Probleme o Fehler-Intoleranz und worst case: O(N) (der Ring-Vorgänger ist Koordinator: alle werden besucht) Bewertung worst case: 2(n-1) Nachrichten: o n-1 Wahl-Nachrichten o n-1 Gewählt-Nachrichten o ein logischer Ring muss aufgebaut werden Bully-Algorithmus Ziel: Bei Ausfall des bisherigen Koordinators ist der Prozess zu finden, der noch aktiv ist und den höchsten Identifikator trägt. Dieser wird dann als neuer Koordinator (Bully = Tyrann) eingesetzt und allen bekannt gemacht Der Auswahlalgorithmus wird durch einen beliebigen Prozess P ausgelöst (evtl. sogar nebenläufig!), z.B. durch denjenigen, der den Ausfall des bisherigen Koordinators bemerkt hat. Es werden drei Sorten Nachrichten verschickt: election: Auslösen der Wahl answer: Bestätigung des Erhalts einer election-Nachricht coordinator: Mitteilung, dass der Sender der neue Koordinator ist Algorithmus: o Wenn ein Prozess feststellt, dass der augenblickliche Koordinator nicht mehr reagiert, startet er den Auswahlprozess: o P schickt eine ELECTION Nachricht an alle Prozesse mit höherer Nummer. o Bekommt er keine Antwort, ist er der neue Koordinator. o Bekommt er eine Antwort, ist seine Aufgabe erledigt: o Der Antwortende übernimmt seine Arbeit! Bewertung hohe Nachrichtenkomplexität o worst case O(n2) Nachrichten. o best case (n - 2) Nachrichten alle Prozesse mit ihren Identifikatoren müssen allen bekannt sein. Multicast IP-Multicast IP Multicast – eine Implementierung der Gruppenkommunikation o Basiert auf IP o Erlaubt das Senden eines einzigen IP Packets an ein Set von Rechnern, welche zusammen eine Multicast Gruppe bilden (Class D Internet Adresse mit den ersten 4 bits 1110) o Die Mitgliedschaft ist dynamisch: o Man kann an eine Gruppe senden mit oder ohne deren Mitglied zu werden. o Mitglied werden: Socket tritt einer Gruppe bei (s.joinGroup(group) ) Damit kann der Socket Multicast-Nachrichten der Gruppe erhalten. o Multicast: senden eines UDP Datagrams mit einer Multicast Adresse. o Broadcast: Senden eines (UDP) Datagrams an alle Prozesse Multicast Routers o Lokale Messages nutzen die lokalen Multicast-Möglichkeiten. o Router optimieren die Multicast-Kommunikation. Ausfallmodell o Auslassfehler Einige, aber nicht alle Mitglieder der Gruppe erhalten die Nachricht Ein Router kann ausfallen und Nachrichten verloren gehen. o IP Pakete können in falscher Reihenfolge eintreffen. Implementierungen: es lassen sich 3 Ordnungsstufen definieren o FIFO Ordnung, d.h. alle Nachrichten eines Senders kommen bei der Gruppe in der gesendeten Reihenfolge an: Jeder Sender verwendet (prozessspezifische) Folgenummern für seine Nachrichten. o Kausale Ordnung, d.h. FIFO Ordnung und kausal abhängige Nachrichten kommen in der richtigen Reihenfolge an: Verwendung kausalspezifischer Folgenummern z.B. durch Vektorzeit. o Totale Ordnung, d.h. kausale Ordnung und alle anderen Nachrichten werden von allen Mitgliedern der Gruppe in der gleichen Reihenfolge empfangen: Verwendung gruppenspezifischer Folgenummern. Reliable Multicast Voraussetzungen wie B-Multicast. Ein Prozess kann immer noch gleichzeitig mehreren Gruppen angehören. R-Multicast bietet: o Integrität: Empfängerprozess ist korrekt und Gruppenmitglied, empfangene Nachricht wurde an Gruppe gesandt, Nachricht wird höchstens einmal zugestellt o Gültigkeit: Ein korrekter Prozess, der eine Multicast-Nachricht sendet, erhält diese in endlicher Zeit zugestellt o Übereinstimmung: Wenn ein korrekter Prozess eine Nachricht m zugestellt bekommt, dann erhalten alle korrekten Prozesse der gleichen Gruppe diese Nachricht in endlicher Zeit zugestellt Primitive / Basisoperationen o R-multicast(g, m) o R-deliver(m) Beispiel: ISIS Algorithmus Der Algorithmus verwendet im Prinzip Lamport‘s Zeitstempel: o Prozess P sendet per Multicast eine Nachricht <m,i>, wobei i ein eindeutiger Identifier ist (Prozess-ID + Zeitstempel). o Alle Prozesse fügen die Nachricht in die Hold-Back-Queue ein und antworten mit einem Vorschlag für eine von ihnen akzeptierte Sequenznummer a. o P sammelt diese Vorschläge, wählt den höchsten Wert aus (der ist dann sicher von allen anderen Prozessen noch nicht vergeben) und schickt die Nachricht <i,a> an alle Prozesse zurück. o Die Prozesse verwenden a als die neue Sequenznummer für die Nachricht mit Nummer i. o Wenn die Nachricht am Anfang der Hold-Back-Queue ist, wird sie zur Delivery-Queue transferiert. Konsens und verwandte Probleme z.B. 2 Ergebnisse für die selbe Aufgabe, es muss entschieden werden was richtig ist. Definition des Konsens-Problems o Prozesse pi befinden sich in einem nicht-dedizierten Zustand zi Jeder Prozess schlägt einen Wert vi aus D vor (i=1,…N) o Der Prozess wechselt in den dediziertern Zustand zj Jeder Prozess setzt den Wert einer Entscheidungsvariable di. di ist fix und darf nicht verändert werden. o Konsens-Bedingungen: Terminierung: jeder Prozess setzt irgendwann seine Entscheidungsvariable. o Einigung: der Entscheidungswert aller korrekten Prozesse ist gleich: di=dj falls pi und pj korrekt sind und in den dedizierten Zustand übergegangen sind. Integrität: wenn alle korrekten Prozesse denselben Wert vorgeschlagen haben, dann hat jeder pi im dedizierten Zustand diesen Wert gewählt. Konsensfindung: Geschieht beispielsweise durch majority-Voting, indem jeder Prozess seine Entscheidung jedem andern Prozess mitteilt und dann einen Mehrheitsentscheid akzeptiert. Byzantinische Generäle Problemstellung (Lamport) o Drei oder mehr (byzantinische) Generäle müssen sich darauf einigen anzugreifen oder sich zurück zu ziehen. o Einer der Generäle gibt die Befehle / den Auftrag; die andern melden den Auftrag weiter und führen aus. o Einer oder mehrere der Generäle handeln „betrügerisch“ (bzw. melden falsche Bestände): Es wird ein falscher Befehl weitergegeben. Falls der Befehl „Angriff“ lautet wird „Rückzug“ weitergemeldet oder umgekehrt. Forderungen o Terminierung: Irgendwann setzt jeder korrekte Prozess seine Entscheidungsvariable. o Einigung: Der Entscheidungswert aller korrekten Prozesse ist gleich (falls pi und pj korrekt sind, dann gilt di=dj). o Integrität: Wenn der Befehlshaber korrekt ist, einigen sich alle korrekten Prozesse auf den von ihm vorgeschlagenen Wert. Lösung nach Lamport (1982) o Jeder General teilt allen andern sein Wissen mit (Truppenstärke und evtl. weitere Informationen wie „Angriff / „Rückzug“). o o Die Guten sagen die Wahrheit. Die Bösen sagen irgend etwas. Jeder General teilt allen andern seine Ergebnisse aus der vorherigen Runde mit. Jeder General nimmt als i-tes Element seines Entscheidungsvektors die Mehrheit der gelesenen Werte. Falls keine Mehrheit bestimmt werden kann, dann wird der Wert auf „unbekannt“ gesetzt. Die byzantinischen Systeme setzen synchrone Kommunikation voraus: o Der Nachrichtenaustausch geschieht in einzelnen Runden. Fisher et al haben 1985 gezeigt, dass es in asynchronen Systemen nicht möglich ist, Konsens zu garantieren. Grund: o Sie können nicht unterscheiden, ob in einem asynchronen System eine Nachricht überhaupt nicht eintrifft oder sehr verspätet. Damit ist eine (schnelle) Entscheidungsfindung nicht mehr möglich. PAXOS Voraussetzungen Safety o Es kann nur ein Wert ausgewählt werden, welcher vorgeschlagen wurde. o Es kann nur genau ein Wert ausgewählt werden. o Ein Knoten / Systemteilnehmer weiss erst dann, dass ein bestimmter Wert gewählt wurde, wenn dies auch wirklich geschehen ist. Liveness o Ein vorgeschlagener Wert wird eventuell ausgewählt. o Falls ein Wert ausgwählt wurde, kann ein Knoten diesen Wert als den ausgewählten Wert erkennen. Agenten-Klassen: o Das Modell enthält die folgenden drei Agenten-Rollen: Proposers Acceptors Learners o Die Rollen können alle mehrfach besetzt sein. o Ein Knoten/Prozessor kann mehr als eine Client Rolle haben, also gleichzeitig Proposer und Acceptor …. sein. Algorithmus Phase 1 (prepare): o Ein Proposer selektiert eine Proposal Nummer n und sendet einen "Prepare Request" mit der Nummer n an mindestens ein Acceptor Quorum. o Falls ein Acceptor einen "Prepare Request" mit einer Nummer n erhält, mit n > als alle bisherigen Requests, dann antwortet er mit "YES" und verspricht, keinen weiteren Wert mehr < n zu akzeptieren. o Falls er bereits einem höheren n' zugestimmt hat, sendet er eine NACK "nonacknowledge" Nachricht. o Die Antwort-Nachricht enthält den höchsten akzeptierten Wert (n und den dazugehörenden Wert v). Phase 2 (accept): o Sobald der Proposer von den meisten Acceptoren ein "YES" als Antwort bekommen hat, sendet der Proposer eine "Accept Request" Nachricht an alle Acceptors zusammen mit <n,v> (höchster akzeptiertes n und zueghörender Wert v). o Der Acceptor muss diesen Wert akzeptieren, sofern er nicht einem höheren n bereits zugestimmt hat. 11.2 Petrinetze Formale Definitionsart, zur Modellierung von nebenläufigen Systemen, mit folgenden Eigenschaften: - Aufzeigen von Systemübergängen, bei denen gemeinsame Ressourcen konsumiert und neu erzeugt werden Modellierung von räumlicher Verteilung von Ressourcen, Nebenläufigkeit und (Zugriffs)Konflikte Intuitive graphische Darstellung Nebenläufige Systeme - Systeme bei denen mehrere Komponenten / Prozesse nebeneinander auftreten und arbeiten Typischerweise kommunizieren die Prozesse untereinander mit Nachrichten Nebenläufigkeit versus Parallelität: o Parallelität: o o 2 Ereignisse finden parallel statt, wenn sie gleichzeitig ausgeführt werden Nebenläufigkeit: 2 Ereignisse sind nebenläufig, wenn sie parallel ausgeführt werden können (jedoch nicht müssen) Nebenläufigkeit: der allgemeinere Begriff Grafische Komponenten - Stellen oder Plätze (Kreise): - Transaktionen / Transitionen (Rechtecke oder fette Striche): Kanten / Bögen (Pfeile); Stellen können nur mit Transactions verbunden werden (vice versa): - Tokens / Marken (kleine ausgefüllte Kreise): Statische Modellbildung Regeln - Eine Kante verbindet jeweils eine Stelle mit einer Transition (vice versa); niemals zwei Stellen - oder zwei Transitionen: Eine Kante kann ein Kantengewicht haben (wie viele Tokens werden beim Schalten entfernt / - hinzugefügt); ist keine Zahl angeben, so ist das Gewicht 1: Von einer Stelle können beliebig viele Kanten abgehen und eintreffen: - Von einer Transition können beliebig viele Kanten abgehen und eintreffen: Ein Token kann nur auf Stellen verteilt werden; die Verteilung auf die Stellen eines Netzes nennt man Markierung Eine Stelle kann beliebig viele Tokens aufnehmen (falls keine Angabe vorhanden) Dynamische Modellbildung Definitionen - Vorbereich: Der Vorbereich einer Transition umfasst alle Stellen, die auf diese Transition einmünden (Pfeil auf diese Transition) - Nachbereich: Der Nachbereich einer Transition umfasst alle Stellen, die von dieser Transition entspringen (Pfeil auf die Stelle von dieser Transition) - Konzession: Alle Stellen im Vorbereich besitzen mindestens so viel Tokens wie das Kantengewicht der Kante, welche die Stelle mit der Transition verbindet und das im Nachbereich keine der Stellen seine Kapazität überschreitet o Sind beide Bedingungen erfüllt hat die Transition Konzession zum Schalten. Beispiel Petrinetz Notation - Stellen (Kreise): Mögliche Plätze für Ressourcen - Marken (kleine ausgefüllte Kreise): Ressourcen - Transitionen (Rechtecke): Systemübergänge Darstellung einer Transition - Vorbedingungen (Marken, die konsumiert werden) Nachbedingungen (Marken, die erzeugt werden) Die Entfernung der Marken der Vorbedingungen und Erzeugung der Marken der Nachbedingung nennt man „Schalten“ / „Feuern“ der Transition. Beispiel-Simulation Erste Transaktionen Die Vorbedingungen für die rote Transition sind erfüllt. Die Nachbedingungen werden „wahr“ Weitere mögliche Transaktionen Beispiel: Dining Philosopher Erklärung, warum zum Teufel aus 3 mach 1 und aus 1 mach 3: Tranitionen sind aktiv wenn: - Auf ALLEN Plätzen im Vorbereich eine Marke liegt. Auf ALLEN Plätzen im Nachbereich eine Marke aufgenommen werden kann. Aus obigem Beispiel erfolgt: Strukturelemente Löschen von Objekten Erzeugen von Objekten Weitergabe / Verarbeitung Aufspaltung eines Objektes Verschmelzen von Objekten Archivierung von Objekten Reservoir für Objekte Zwischenablage Verzweigung / Beginn Nebenläufigkeit Gemeinsamer Speicher / Synchronisationsschnittstelle Strukturkombinationen Sequenzverarbeitung Nebenläufigkeit Synchronisation Wechselseitiger Ausschluss (Semaphore) Erreichbarkeitsgraph Der Erreichbarkeitsgraph bildet alle möglichen Markierungen (Systemzustände) ab, welche ein System annehmen kann, ausgehend von einem Startpunkt m0. Voraussetzung dafür ist: Das Netz muss beschränkt sein. Definition Erreichbarkeit „Ist vom Startpunkt (m0) eine weitere Markierung (m1) über eine unbestimmte Anzahl Transaktionen erreichbar, so ist der Punkt erreichbar.“ – Cpt. Obvious Beispiel Erreichbarkeitsgraph Petrinetz Erreichbarkeitsgraph Beschränktheit Wenn die Zahl der Tokens in einer Stelle endlich ist. Beispiel einer unendlichen Anzahl: Die Anzahl Tokens wächst stetig und ist somit unendlich Graph nicht Beschränkt! Unabhängigkeit Zwei Transitionen sind unabhängig, wenn sie sich nicht gegenseitig die Tokens im Vorbereich klauen und nicht um Platz im Nachbereich streiten müssen. Dann gelten die Regeln der concurrency. Sie sind also Unabhängig. Konflikt Eine Transition klaut einer anderen Transition im Vorbereich einen Token, beziehungsweise sie streiten sich im Nachbereich um einen Platz. Dann liegen diese zwei Transitionen im Konflikt. Deadlock Situation Tote, aktivierbare und lebendige Transitionen - Tot: T kann nicht aktiviert werden, auch nicht unter Folgetransitionen (hat keinen Pfeil zu sich) Aktivierbar: U kann und wird mit einer Folgetransition aktiviert Lebendig: Die Transition wird in jeder erreichbaren Markierung aktiviert Petri-Netz als Matrix - Die Zeilen entsprechen den Stellen Die Spalten entsprechen den Transitionen Nun wird die Matrix aufgebaut und jeweils eine Schaltung abgebildet. Beim Schalten von 𝑇1 nimmt die Anzahl Tokens in 𝑃1 um 2 ab. Somit wird an Stelle 1,1 „-2“ eingetragen, in 𝑃2 𝑢𝑛𝑑 𝑃4 kommen jeweils 1 Token dazu Stelle 1,2 = 1 und Stelle 1,4 = 1. Usw. Invarianten von Netzen Ist eh nicht prüfungsrelevant; Falls doch noch fertig zusammenfassen. Invarianten wurden ausgelassen Standardaufgabe Petrinetze Zwei Prozesse wollen gleichzeitig auf einen Zeitkritischen Bereich zugreifen; wie modellieren Sie das am besten in einem Petrinetz? Ergänzen Sie das folgende Diagramm: Lösung: Petrinetze Aufgabe 2 11.3 Messagebased Concurrency Begriffe Multiprogramming Multiprocessing Distributedprocessing Syntax Semantik 1 Prozessor, n Prozesse n Prozessoren, m Prozesse, gemeinsamer Speicher n Prozessoren, m Prozesse, über ein Netzwerk Beschreibt die grammatikalische Struktur eines Programms. Beschreibt die Bedeutung eines korrekten Programms. (bzw. was das Programm macht) Interprozesskommunikation Sobald mehrere Prozesse am gleichen Bereich arbeiten ist die Interprozesskommunikation gefragt. Diese geschieht oft mithilfe von Variablen, welche von mehreren Prozessen referenziert werden ('shared variables') oder aber mithilfe von Nachrichtenaustausch ('messaging'). Bei der Prozess-Prozess-Kommunikation benötigen wir eine Synchronisation. Die Prozessausführung geschieht mit unterschiedlichen Ausführungsgeschwindigkeiten. Die kausale Abfolge von Aktionen ("perform an action" und "detect an action") setzen Existenz einer logischen Zeit voraus. Semantik Es gibt 3 Arten von Semantik. Operationale Semantik Beschreibt WIE ein Konstrukt die Berechnungen durchführt. Denotationale Semantik Beschreibt WAS am Schluss eines Konstrukts resultiert. Dies wird mithilfe mathematischer Objekte gemacht. Axiomatische Semantik Die Bedeutung eines Konstrukts wird mithilfe von Assertions beschrieben: Vorbedingungen und Nachbedingungen Unterschied Operationale und Denotationale Semantik Die denotationale Semantik legt die Bedeutung über den Aufbau von Programmen fest, die operationale über den Ablauf von Programmen. Beispiel für die operationale Semantik Beispiel für die denotationale Semantik Beispiel 1: (Leere Anweisung =>Verändert den Zustand z nicht) Beispiel 2: (Nichtleere Anweisung) Beispiel 3: Beispiel für die axiomatische Semantik => Folgerung: Falls x≥0 ist und y die Wurzel aus x ist, dann muss y*y = x sein. Hoarsche Regeln für die Axiomatische Semantik Hoare Regeln haben das Format {P}S{Q} wobei P die Vorbedingungen sind und Q die Nachbedingungen, beide mit Assertions beschrieben. Das S dazwischen ist der zu beschreibende Ausdruck. Kompositions- oder Sequenz-Regel Bsp: Auswahlregel (if then else) Bsp: Iterationsregel (while-Regel): Bsp: Hoarscher Ableitungsbaum Semantik in Concurrent Programmen Wenn mehrere Prozesse concurrent ablaufen ist das Resultat ohne Koordination in der Regel unbestimmt. Den man weiss nicht wann welcher Prozess für wie lange die CPU erhält. Bsp: Setzt ein Prozess 10mal x=5 und ein anderer jeweils x=x+1 weiss man nicht was am Schluss resultiert. Mithilfe von Prädikaten können wir bestimmen, ob zwei Prozesse bestimmte Anweisungssequenzen atomar, unabhängig voneinander (interferenzfrei) ausführen können. Annahme, wir haben die Prozesse P1 und P2. P2 hat keinen Einfluss auf P1, falls die Ausführung von P2 (S2) keinen Einfluss auf die Prädikate von P1 hat. Aber: - Die kombinierte Vorbedingung: {x>0 ^ x<0} ist immer false. - Auch die Nachbedingung von P1 ist nicht erfüllbar, falls P2 ausgeführt wird: Egal ob P2 komplett vor P1 ausgeführt wird({x>0 ^ x<0}x=-2;{x>0}) oder aber P2 verzahnt mit P1 ausgeführt wird ({x>0 ^ x<0}x=-2;{x=16}) => Die Assertions werden also in den meisten Fällen false sein. Grundprobleme bei der Beschreibung von concurrent Systemen: 1.Wie beschreibt man, dass die Ausführung concurrent sein kann? 2.Welchen Synchronisationsmechanismus soll man einsetzen? 3.Welchen Interprozessmodus soll man einsetzen? Synchronisationsmechanismen Ansatz CoRoutine CoRoutinen entsprechen Prozessen, welche mithilfe von resume synchronisiert werden. Schwachpunkt: CoRoutinen laufen in der Regel nicht concurrent ab. Programmiersprachen mit CoRoutinen: Simula, Bliss, Modula. Ansatz Fork... Join Ähnlich wie bei den CoRoutinen verläuft der Fork, ABER: Die aufrufende und aufgerufene Routine werden concurrent ausgeführt. Die join Anweisung verzögert dann die Ausführung des Aufrufers, bis die "Partner"-Routine beendet ist. Mögliche Probleme: Einsatz von fork…join in bedingten Anweisungen Programmiersprachen mit fork, join: PL/I, Mesa, Java 7. Ansatz cobegin...coend - Die cobegin Anweisung (oder parbegin bei Dijkstra) startet die concurrent Ausführung von Anweisungen: cobegin S1|| S2 || S3 || … || Sn coend; - Damit werden die verschiedenen Si concurrent ausgeführt, wobei Si selber wieder cobegin…coend Blöcke mit lokalen Deklarationen enthalten können. Das cobegin Statement ended erst, wenn alle Si beendet sind. Programmiersprachen mit cobegin.. coend: CSP, Edison, Algol 68. Anwendung: Betriebsysteme. Vergleich mit fork…join: -cobegin..coend ist weniger flexibel -Anzahl Prozesse in cobegin..coend ist fix und bekannt; -Prozessverschachtelung in cobegin..coend ist hierarchisch. Ansatz process Wenn Routinen als Ganzes concurrent ausgeführt werden können, ist die Beschreibung mit cobegin..coend bzw. fork..join umständlich. Einfacher ist es die Routine zu kennzeichnen. process ist ein solcher Ansatz. Beispiel (Betriebsystem): program OP_SYS; … process reader; …cobegin…coend; process executer; … process printer;… end. Programmiersprachen mit process: Distributed Processes, Concurrent Pascal, Modula, Ada. Shared Variablen Mit shared Variablen werden zwei Arten der Interprozess- Kommunikation realisiert: Mutual Exclusion / gegenseitiger Ausschluss (Mutex): Eine Programmsequenz muss als Ganzes verarbeitet werden, ohne Unterbruch: die Sequenz ist ein kritischer Bereich (critical section). Condition Synchronisation: Ein von mehreren Prozessen benutztes Datenobjekt ist in einem Zustand, in dem bestimmte Methoden nicht ausgeführt werden können. (Bsp. Buffer, nur lesen wenn nicht leer, nur schreiben wenn nicht voll) Semaphoren Eine Semaphore ist eine nichtnegative Integer-Variable auf der zwei atomare Operationen P und V definiert sind. - P(s) verzögert den Prozess solange bis s > 0 und setzt dann (atomar) s= s - 1; RESERVIERT PLATZ - V(s) setzt s=s+1 (atomar). GIBT PLATZ FREI Semaphore sollten fair sein, da P(s) nicht ewig verzögern darf. Zuerst angehaltene Prozesse sollten als erstes aufgeweckt werden Conditional Critical Regions CCR Eine CCR Anweisung verzögert die Ausführung eines Prozesses solange, bis B erfüllt ist. Dann wird S ausgeführt. Die Berechnung von B und S kann durch andere Prozesse, welche r benötigen, nicht unterbrochen werden. R ist eine Ressource=> Schwach verbreitet, nicht für Monitor Monitore kombinieren Ressourcen und Methoden in einem Konstrukt. Ein Monitor besteht aus Variabeln (Speicherung Monitorzustand), Initialisierungscode (1*ausgeführt) und aus Prozeduren, welche den Zugriff auf die Monitor-Ressourcen gestatten. Dazu gehören zwei Methoden: signal und wait. - wait: condition.wait blockiert den Prozess; kontrolliert den exklusiven Zugang zum Monitor. signal: cond.signal beiwirkt entweder nichts (wenn kein Prozess vor dem Monitor wartet), oder der Prozess wird kurz angehalten, um einen wartenden Prozess reaktivieren zu können. Message Passing Nachrichten basierte Verfahren sind eine Alternative zur Synchronisation mit shared Variablen. Vorteil: der empfangende Prozess erhält Daten und gleichzeitig wird eine Reihenfolge (senderreceiver) festgelegt. Damit lässt sich die Synchronisation vereinfachen. Grundoperationen: - send expression__list to destination~designator. receive variable__list from source__designator Arten des Message-Passing: - - Asynchrones Message Passing: Das Send ist Non-Blocking wenn der Puffer zwischen Sender und Receiver genügend gross ist. Sollte der Puffer voll sein gibt es die Möglichkeit das Senden zu blockieren oder aber eine Warnung/Meldung zurückzugeben. Synchrones Message Passing: Es wird nur gesendet, wenn auch empfangen werden kann, es ist also blockierend. Damit kennt der Empfänger der Zustand des Senders vor dem Senden.Der Sender kann aber auch grob abschätzen, in welchem Zustand der Empfänger sein wird. Bei den meisten Systemen ist die Empfangsseite mit dem Receive blockierend und wartet auf neue Daten. Allenfalls ist dies ein separater Thread, oder sogar der einzige Thread, wobei dann der ganze Empfänger blockiert wäre. Beispiel Guarded Command Ermöglichen elegante Implementierung des Puffers in einem Prozess ; Anweisungsblock wird nur ausgeführt, wenn die entsprechende Bedingung wahr ist, z.B. zugehörigen receive eine Nachricht vorliegt. 'guard' ist ein Boole'scher Ausdruck. Falls er true ist, wird das Statement ausgeführt. Actors (Higher Level Message Passing) Ursprünglich (1973) am MIT als Modell im Bereich Artificial Intelligence entwickelt, heute ein Modell zur Untersuchung der theoretischen Grundlagen von nebenläufigen Systemen. Grundsätzliche Funktionsweise: Actor empfängt eine Nachricht; Actor führt lokale Methoden aus; Actor kann weitere Actors kreieren; Actor legt Response fest. Beispiel: Chat 11.4 Modelierung verteilter und mobiler Systeme Formale Modelle Konzentration auf das wesentliche, möglichst wenig Grundelemente Sollen ein theoretisches Verständnis abstrakter Probleme liefern und nich unbedingt konkrete Beispiele lösen. Grundlage für sichere Programmiersprachen (was ist zwingend nötig, was überflüssig) Kann für formale oder automatische Analyse verwendet werden -> Model Checker Labelled Transition System (LTS) Operationale Semantik Beschreibung oder Verhaltensmodellierung. Als gerichteter Graph mit beschrifteten Kanten. Knoten: Zustände Kanten: Zustandsübergänge / Transitionen (Eingabe: 𝑖𝑛, Ausgabe: ̅̅̅̅̅ 𝑜𝑢𝑡) Aber kein Endlicher Automat: LTS haben keine Endzustände Anzahl Zustände können unendlich sein Von einem Zustand können unendlich viele Transitionen wegführen Aktionen können synchronisiert sein Abbildung 1 Bsp. LTS Calculus of Communicating Systems (CCS) “Einfache” Prozessalgebra um Kommunizierende System emit möglichst wenig Grundbausteinen modellieren und verstehen können. Alle Komponenten (Menschen, Prozessoren, Kommunikationskanäle, usw.) werden als Agenten dargestellt. Diese sind BlackBoxes mit Interfaces. Agenten können: Aufgaben erfüllen (auch parallel) Miteinander kommunizieren Sprachelemente: Agenten: 𝐶𝑀 (Coffee Machine) Aktionen: o Observable: Eingabeaktion: 𝑐𝑜𝑖𝑛 ̅̅̅̅̅̅̅̅̅ Ausgabeaktion: 𝑐𝑜𝑓𝑓𝑒𝑒 o Unobservable, silent (Tau-Übergänge): 𝜏 Operatoren: o Restriction 𝑃\𝑎 o Relabeling 𝑃[𝑓] o Parallel Composition 𝑃|𝑄 o Choice 𝑃+𝑄 Zündholz 𝑀𝑎𝑡𝑐ℎ ≝ 𝑠𝑡𝑟𝑖𝑘𝑒. 0 Zündholz (Agent Match) ist definiert als System das enzündet wird (Aktion strike) und anschliessend in den Zustand 0 wechselt. Das Zündholz ist heruntergebrannt und es kann nichts mehr damit geschehen. Kaffeemaschine ̅̅̅̅̅̅̅̅̅. 𝐶𝑀 𝐶𝑀 ≝ 𝑐𝑜𝑖𝑛. 𝑐𝑜𝑓𝑓𝑒𝑒 Der Agent CM (Coffee Machine) ist definiert als System, das eine Münze (Eingabeaktion coin) entgegennimmt, Kaffee ausgibt und sich anschliessend wieder wie ein Agent CM verhält. Kaffee- und Teemaschine ̅̅̅̅̅̅̅̅̅. 𝐶𝑇𝑀 + ̅̅̅̅̅ 𝐶𝑇𝑀 ≝ 𝑐𝑜𝑖𝑛. (𝑐𝑜𝑓𝑓𝑒𝑒 𝑡𝑒𝑎. 𝐶𝑇𝑀) Ein Agent CTM, der zuerst eine Münze entgegennimmt und anschliessend entscheidet, ob er Kaffee oder Tee ausgibt (und sich dann wieder wie ein CTM Agent verhält). ̅̅̅̅̅̅̅̅̅. 𝐶𝑇𝑀2 + 𝑐𝑜𝑖𝑛. 𝑡𝑒𝑎 ̅̅̅̅̅. 𝐶𝑇𝑀′ 𝐶𝑇𝑀′ ≝ 𝑐𝑜𝑖𝑛. 𝑐𝑜𝑓𝑓𝑒𝑒 Ein Agent CTM‘, der zuerst entscheidet ob er Kaffee oder Tee ausgibt und anschliessend eine Münze entgegennimmt und das entsprechende Getränk ausgibt. 𝐶𝑇𝑀 ≠ 𝐶𝑇𝑀′ 1 Kaffeemaschine + 2 Programmierer 𝑆𝑚𝑈𝑛𝑖 ≝ 𝐶𝑀 | 𝐶𝑆 | 𝐶𝑆′ Ein System mit zwei Programmierer (CS) und einem Kaffeautomaten (die parallel Arbeiten können). Restriction 𝑆𝑚𝑈𝑛𝑖 ≝ (𝐶𝑀|𝐶𝑆)\𝑐𝑜𝑖𝑛\𝑐𝑜𝑓𝑓𝑒𝑒 Die Aktionen coin und coffee sind von aussen nicht mehr sichtbar. Die Kaffeemaschine kann also nur noch vom Agenten CS benutzt werden. Relabeling (konkretisierung abstrakter Strukturen) Abstraktes System (universeller Getränkeautomat): 𝐶𝑉 ≝ 𝑐𝑜𝑖𝑛. ̅̅̅̅̅̅ 𝑖𝑡𝑒𝑚. 𝐶𝑉 Konkretisierung: 𝐶𝑀 ≝ 𝐶𝑉[𝑐𝑜𝑓𝑓𝑒𝑒/𝑖𝑡𝑒𝑚] Parametrisierte Kanäle 𝐴𝑑𝑑𝑂𝑛𝑒 ≝ 𝑖𝑛(𝑥). ̅̅̅̅̅̅̅̅̅̅̅̅̅̅ 𝑜𝑢𝑡(𝑥 + 1). 𝐴𝑑𝑑𝑂𝑛𝑒 Automat, welcher die Zahl 1 zum Eingabewert addiert. CCS to LTS Gemäss CCS verläuft ein Prozess verschiedene zustände. Die Zustandsübergänge kommen durch Aktionen zustande. ̅̅̅̅̅̅̅̅̅. 𝐶𝑀 𝐶𝑀 ≝ 𝑐𝑜𝑖𝑛. 𝑐𝑜𝑓𝑓𝑒𝑒 Durch die Aktion coin ergibt sich ein neuer Zustand: ̅̅̅̅̅̅̅̅̅. 𝐶𝑀 𝐶𝑀1 ≝ 𝑐𝑜𝑓𝑓𝑒𝑒 Der entsprechende LTS kann also wie folgt gezeichnet werden: 19 Webservices Wie kann ich meine Kundenapplikationen warten, ohne FTP verwenden zu müssen? Ideen: RPC: viel zu kompliziert (C, C++, …) ORBA: noch komplizierter! XML-RPC Language Mapping Java Type Integer Boolean Double byte[] java.util.Map /Hashtable Object[], java.util.List/Vector java.util.Date XML Tag Name i4, int boolean double base64 struct array dateTime.iso8601 XML-RPC ist zu beschränkt bezüglich Datentypen (XML Schema?). XML-RPC ist zu ungenau spezifiziert. Web-Services nächste Phase Der Zusatz "Web" ist dabei eher sekundär: o Hauptaspekt der Service Orientierten Architektur (SOA) ist der Service, HTTP wird lediglich als Basisprotokoll verwendet. Marshalling / Unmarshalling (die interne/externe Datendarstellung) geschieht mithilfe von XML. o XML ist reiner Text (braucht also viel Platz, ist aber leicht lesbar). SOAP, das Zugriffsprotokoll auf entfernte Objekte Verwendet XML, um Request/Reply Anfragen in XML darzustellen. Alle XML Teile werden mithilfe von Schematas definiert. Der grundlegende Aufbau orientiert sich an bestehenden RPC Ansätzen. WSDL Interface Beschreibung: Web Services werden mithilfe einer speziellen Web Service Description Language (WSDL) beschrieben. Aus einer WSDL kann Java Code generiert werden. Aus einer Service Klasse in Java kann eine WSDL Beschreibung generiert werden. Registry: Web Services können in speziellen Repositories beschrieben werden und können dort von interessierten Clients gesucht und zusammen gestellt werden, Universal Description & Discovery Interface (UDDI): Services können erfasst und genau auf einem Repository Server mutiert werden. UDDI UDDI ist ein Verzeichnis von Web Services. 1. WSDL Beschreibung erstellen 2. Registrierung mittels UDDI API 3. Client: Suchen eines Dienstes mittels UDDI API 4. Bestimmen der WSDL des Dienstes 5. Generieren der Client Message 6. Versenden der Message zum Dienst Referenzen Web Services werden mithilfe einer URL identifiziert: Zum Testen eines Web Services kann man sogar einen Web Browser verwenden! Ein WS wird über seine URL aktiviert. Diese ist permanent und wird nicht speziell für den Methodenaufruf instanziert / aktiviert (der Web Service existiert auch noch nach dem Aufruf). Web Services werden in der Regel transparent angeboten: Die XML Darstellung ist für den Benutzer und den Programmierer nicht sichtbar (die Middleware versteckt die Details vor den Nutzern). SOAP – Simple Object Access Protocol SOAP gestattet Request/Reply (C/S) und asynchrone Kommunikation. XML wird sowohl für die Beschreibung der Daten / Parameter als auch zur Beschreibung der Kommunikation (SOAP) verwendet. SOAP kann auf der Basis von HTTP und SMTP (oder sogar TCP, UDP,..) verwendet werden: Typischerweise verwendet man HTTP für einfache Dienste und SMTP im Falle von komplexeren Anfragen mit Attachments. Ein SOAP API (in C, C++, Python, Java, …) gestattet den Einsatz von SOAP ohne sich um die Details (XML,SMTP, HTTP, …) zu kümmern. SOAP Nachrichten können auch über Zwischenknoten übermittelt werden und Transaktionen beschreiben. SOAP-Anfrage (ohne Header): SOAP-Antwort (ohne Header): HTTP POST Request: Bsp: Tel.Nr. abfrage mit SOAP: REST Design Pattern REST steht für Representational State Transfer. REST basiert auf einem zustandlosen / stateless Client-Server und einem cacheable Kommunikationsprotokoll, in allen bekannten Fällen also dem HTTP Protokoll. REST ist ein Architekture Style. Idee: statt komplexen Mechanismen wie CORBA, RPC oder SOAP setzt man HTTP zur Kommunikation zwischen Devices ein. Das WWW ist letztendlich der Prototyp eines HTTP basierten REST Systems. REST ist eine leichtgewichtige Alternative zu SOAP Web Services und RPC. Bsp: Telefonnummer-Abfrage mit REST: http://www.acme.com/phonebook/UserDetails/12345 REST verwendet lediglich eine URL / URI. Diese wird mithilfe des GET Befehls an den Server geschickt. REST Adressiert die Ressource direkt; es wird keine Methode aufgerufen. Analogie: SOAP verwendet einen Umschlag REST ist eine Postkarte. CODE BEISPIELE Bild Bitweise downloaden und speichern (mit Buffer) package Vss.W01.U2; import java.io.BufferedReader; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.URL; public class URLKlasse { public static void main(String[] args) throws IOException { InputStream iStream2 = (new URL("http://www.spacetelescope.org/static/archives/posters/large/hubble.jpg")).openStream(); byte[] buffer = new byte[1024]; FileOutputStream oStream2 = new FileOutputStream("C:\\Testimage.jpg"); int n=0; while ((n=iStream2.read(buffer)) != -1) { oStream2.write(buffer, 0, n); } iStream2.close(); oStream2.flush(); oStream2.close(); } } Webseite mithilfe der Klassen URL, BufferedReader und InputStreamReader lesen package Vss.W01.U2; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.URL; public class URLKlasse { public static void main(String[] args) throws IOException { InputStream iStream = (new URL("http://www.hsr.ch")).openStream(); BufferedReader reader = new BufferedReader(new InputStreamReader(iStream)); String line = null; while ( (line = reader.readLine()) != null ) { System.out.println(line); } iStream.close(); } } JAVA-API