Systemarchitekturen für Verteilte Anwendungen – Implementierungsvarianten – 25.10., 26.10. und 30.11.2014 Institut für Betriebssysteme und Rechnerverbund TU Braunschweig PD Dr. Christian Werner 1-2 Interprozess-Kommunikation Anwendungsprogramme „leben“ in Prozessen. Ein Prozess ist ein Objekt des Betriebssystems, durch das Anwendungen sicheren Zugriff auf die Ressourcen des Computers erhalten. Einzelne Prozesse sind dazu gegeneinander isoliert. Damit zwei Prozesse Informationen austauschen können, müssen sie Interprozesskommunikation (interprocess communication, IPC) einsetzen. IPC basiert auf dem Austausch von Nachrichten (= Bitfolgen) Eine Nachricht wird von dem einem Prozess geschickt (dem Sender). Sie wird von einem anderen Prozess empfangen (dem Empfänger). 1-3 Synchroner vs. Asynchroner IPC Synchron: Sender und Empfänger blockieren beim Senden bzw. Empfangen, d.h., wenn ein „Senden“ ausgeführt wird, kann der Prozess nur weiterarbeiten, nachdem das zugehörige „Empfangen“ im anderen Prozess ausgeführt wurde. Wenn ein „Empfangen“ ausgeführt wird, wartet der Prozess so lange, bis eine Nachricht empfangen wurde. Weniger effizient, aber leicht zu implementieren (Synchronisation beim Ressourcenzugriff wird gleich miterledigt). Asynchron: Das „Senden“ findet nichtblockierend statt, d.h., der Prozess kann nach dem Senden der Nachricht sofort weiterarbeiten. Empfangen kann blockierend oder nicht-blockierend sein. Etwas komplizierter zu implementieren (Warteschlangen), aber effizienter. 1-4 Implementierungsvarianten Verteilter Anwendungen Anwendung Middleware StandardDienste (FTP, Email, vor allem WWW) TCP/UDP über IP 1-5 Überblick Sockets UDP/IP TCP/IP Middleware CORBA Java RMI Web Services 1-6 TCP/IP Protocol Stack Web browser, e-mail, ... Applications Other user applications User space Application protocols: HTTP, SMTP, FTP, ... Application Programming Interface (API) UDP TCP IGMP ICMP Transport RIP IP RARP OSPF Network ARP LAN DL technology WAN DL technology Data Link OS kernel 1-7 Das Modell von IP Datagramme Einzelne, unabhängig voneinander weitergeleitete Pakete, die sich ihren Weg zum Ziel suchen Routing-Tabellen geben den Ausgang zu einem Ziel an R2 yx „Best effort“-Dienst Keine Garantie für Auslieferung eines Pakets Korrekte Reihenfolge R1 x yx yx DA,SA data Routing tables Router R1 DA y ... Next hop R3, R4 ... R5 R3 R4 yx R6 yx Router R3 DA y ... Next hop R6 ... yx y Router R6 DA y ... Next hop ... 1-8 IPv4-Adressen 32 bits Binäre und dezimale Darstellung 31 Binary: Dotted decimal: 23 15 7 0 11010100 01111110 11010000 10000111 212 . 126 . 208 . 135 Hierarchische Adressierung Netzwerk-Nummer + Netzmaske (Classless Interdomain Routing (CIDR), RFC 1519). Netzangabe: 134.169.0.0/255.255.0.0 oder alternativ 134.169.0.0/16 (16 = Länge der Netzmaske) Bildung von Netzhierarchien: IBR-Netz: 134.169.34.0/23 CIP-Pool im IBR-Netz: 134.169.34.192/26 1-9 Transportschicht: TCP und UDP Aufgabe der Transportschicht: Datentransport von einem Prozess auf einem Rechner zu einem (oder mehreren) anderen Prozessen auf anderen Rechnern im Internet Zwei Möglichkeiten Der grundlegende unzuverlässige Internetdienst genügt, dann verwende UDP. Er genügt nicht, dann verwende TCP. 1-10 Eigenschaften von TCP und UDP TCP setzt einen zuverlässigen Dienst auf IP auf: Paketauslieferung ist garantiert (bzw. der Sender erhält zumindest eine Fehlermeldung) Die Reihenfolge der eingehenden Pakete entspricht der Sendereihenfolge UDP garantiert dies nicht, ist aber dafür wesentlich schneller. Anwendungen für beide Protokolle? 1-11 Umsetzung von TCP TCP setzt vor allem die folgenden Protokollmechanismen ein, um die Effekte erzielen zu können Daten sind numeriert, so dass fehlende Daten schnell festgestellt werden können Mittels ACKnowledgements teilt der Empfänger den korrekten Empfang von Daten mit Mittels Timern stellt der Sender das Ausbleiben von ACKs fest 1-12 Das TCP/UDP API: Sockets Das Internet-API über der Transportschicht wird als Sockets bezeichnet. Ein Socket kann als Endpunkt einer Kommunikationsbeziehung betrachtet werden. Daten werden in Sockets abgelegt und durch Sockets empfangen. Es gibt in der Socket-Schnittstelle zwei grundlegende Typen von Sockets: Ein Socket, der wie das Ende einer Telefonverbindung funktioniert Ein Socket, der wie ein Briefkasten funktioniert Was bedeutet das? Sockets sind mehr oder weniger in jeder Programmiersprache erhältlich, u.a. in Java. 1-13 Sockets und TCP/UDP-Ports Ein Socket wird vor der Kommunikation mit einer TCP/UDP-Portnummer und einer IP-Adresse assoziiert. Dadurch kann ein bestimmter Prozess auf einem Rechner identifiziert werden. socket any port agreed port socket message client server other ports Internet address = 138.37.94.248 Internet address = 138.37.88.249 1-14 Beispiel: Telnet-Server und Clients hugo.int.fr 139.29.100.11 neptun.elc.ro 141.85.43.8 HTTP client port: 3135 TCP HTTP connection HTTP server telnet port: 80 TCP connection 141.85.43.8 : 3135, 139.29.100.11: 80 zola.int.fr 139.29.35.18 port: 5768 TCP TCP connection 139.29.35.18 : 5768, 139.29.100.11: 80 IP IP IP datagrams HTTP client HTTP connection TCP IP IP datagrams 1-15 Datagram Sockets Eine Nachricht, die durch einen UDP-Socket geschickt wird, wird nicht bestätigt bzw. bei Verlust automatisch erneut geschickt. Paketfehler können deshalb zum Verlust der Nachricht führen, ohne dass es die Anwendung bemerkt. Maximale Größe der Nachricht: 65.535 Bytes; größere Nachrichten müssen in der Anwendung segmentiert bzw. re-assembliert werden! UDP-Sockets verwenden nicht-blockierendes Senden und blockierendes Empfangen. 1-16 Java API für UDP-Sockets Zwei wichtige Klassen: DatagramPacket DatagramSocket DatagramPacket enthält die zu sendende Information. DatagramSocket besitzt vor allem die Methoden send(DatagramPacket) receive(DatagramPacket) mit der offensichtlichen Funktionalität. Mehr Informationen finden sich in der API-Beschreibung unter http://docs.oracle.com/javase/7/docs/api/ im java.net-Package. 1-17 Typische Struktur von UDP-Programmen Client Server create UDP socket create UDP socket create datagram create datagram buffer send datagram receive datagram create datagram buffer create and send datagram receive datagram Ein UDP-Client 1-18 import java.net.*; import java.io.*; public class UDPClient{ public static void main(String args[]){ try { DatagramSocket aSocket = new DatagramSocket(); byte [] m = args[0].getBytes(); InetAddress aHost = InetAddress.getByName(args[1]); int serverPort = 6789; DatagramPacket request = new DatagramPacket(m, args[0].length(), aHost, serverPort); aSocket.send(request); byte[] buffer = new byte[1000]; DatagramPacket reply = new DatagramPacket(buffer, buffer.length); aSocket.receive(reply); System.out.println("Reply: " + new String(reply.getData())); aSocket.close(); }catch (SocketException e){System.out.println("Socket: " + e.getMessage()); }catch (IOException e){System.out.println("IO: " + e.getMessage());} } } 1-19 Ein UDP-Server import java.net.*; import java.io.*; public class UDPServer{ public static void main(String args[]){ try{ DatagramSocket aSocket = new DatagramSocket(6789); byte[] buffer = new byte[1000]; while(true){ DatagramPacket request = new DatagramPacket(buffer, buffer.length); aSocket.receive(request); DatagramPacket reply = new DatagramPacket(request.getData(), request.getLength(), request.getAddress(), request.getPort()); aSocket.send(reply); } }catch (SocketException e){System.out.println("Socket: " + e.getMessage()); }catch (IOException e) {System.out.println("IO: " + e.getMessage());} } } 1-20 Stream Sockets TCP-Sockets gestatten eine Datenstrom-orientierte Kommunikation. Daten werden in einem Strom geschrieben, der vom Partner in derselben Reihenfolge empfangen wird. Paketverluste werden von TCP abgefangen, d.h., Anwendungen erhalten Daten erst, wenn Sie wirklich korrekt (in der Reihenfolge) sind. Vor dem eigentlichen Datenaustausch muss zunächst eine Verbindung zwischen Client und Server aufgebaut werden. Verbindungen werden über die Port/IP-Adressinformation identifiziert. 1-21 Das TCP-Socket-API in Java Zwei wichtige Klassen: ServerSocket Socket Ein ServerSocket ist passiv und wartet nach dem Aufruf der accept-Methode auf Verbindungsaufbauwünsche von Clients. Ein Socket wird vom Client genutzt. Mittels des Konstruktors wird implizit eine Verbindung zu einem Server aufgebaut. Bei beiden Klassen kann man sich eine Referenz auf den Ein- bzw. Augabedatenstrom geben lassen. Datenströme können dann nach dem ganz normalen Java-Schema genutzt werden. 1-22 Typische Struktur von TCP-Programmen Client Server create Stream socket create Server socket connect wait for connection write data on stream read data from stream write data on stream read data from stream 1-23 Ein TCP-Client import java.net.*; import java.io.*; public class TCPClient { public static void main (String args[]) { try{ int serverPort = 7896; Socket s = new Socket(args[1], serverPort); DataInputStream in = new DataInputStream( s.getInputStream()); DataOutputStream out = new DataOutputStream( s.getOutputStream()); out.writeUTF(args[0]); String data = in.readUTF(); System.out.println("Received: "+ data) ; s.close(); }catch (UnknownHostException e){ System.out.println("Sock:"+e.getMessage()); }catch (EOFException e){System.out.println("EOF:"+e.getMessage()); }catch (IOException e){System.out.println("IO:"+e.getMessage()); } } } 1-24 Ein TCP-Server import java.net.*; import java.io.*; public class TCPServer { public static void main (String args[]) { try{ int serverPort = 7896; ServerSocket listenSocket = new ServerSocket(serverPort); while(true) { Socket clientSocket = listenSocket.accept(); Connection c = new Connection(clientSocket); } } catch(IOException e) {System.out.println("Listen :" +e.getMessage());} } } 1-25 TCP Server (Forts.) class Connection extends Thread { DataInputStream in; DataOutputStream out; Socket clientSocket; public Connection (Socket aClientSocket) { try { clientSocket = aClientSocket; in = new DataInputStream( clientSocket.getInputStream()); out =new DataOutputStream( clientSocket.getOutputStream()); this.start(); } catch(IOException e) {System.out.println("Connection:“ +e.getMessage());} } public void run(){ try { // an echo server String data = in.readUTF(); out.writeUTF(data); clientSocket.close(); } catch(EOFException e) {System.out.println("EOF:"+e.getMessage()); } catch(IOException e) {System.out.println("IO:"+e.getMessage());} } } 1-26 Weitere Aufgaben des Programmierers Sockets stellen nur die grundlegenden Mechanismen zur Verfügung, es bleibt noch einiges zu tun: Implementierung komplexerer Systemmodelle wie Request-Reply (bei Client-Server) oder Gruppenkommunikation Vor allem aber die Notwendigkeit der homogenen Datenrepräsentation in heterogenen Umgebungen Dies sind die grundlegenden Techniken für komplexere Middleware wie RPC Java RMI CORBA 1-27 Datenrepräsentation und Marshalling Die meisten Anwendungen bzw. Middleware-Ansätze nutzen ein gemeinsames Datenformat. Notwendig wegen der Heterogenität der Umgebungen Unterschiedliche Hardwarearchitektur Verschiedene Betriebssysteme Verschiedene Programmiersprachen Unter „Marshalling“ versteht man den Prozess der Transformation einer beliebigen Datenstruktur in eine übertragbare Nachricht: „planieren“ der Datenstruktur (in eine zusammenhängende Nachricht) Übersetzung in das gemeinsame Format Abbildung von Datenstrukturen auf Nachrichten 1-28 Ein Nachricht steht zusammenhängend im Speicher und kann so übertragen werden. F I S C H E R \0 1 5 C A M P U S U 1 Eine Datenstruktur kann über den Speicher verteilt sein und so nicht übertragen werden. F • I S C H E R \0 1 5 C A M P U S 1 U 1-29 Datenrepräsentation Es gibt eine Reihe bekannter Ansätze für ein gemeinsames Netzdatenformat. Idee: Definiere eine Menge von abstrakten Datentypen und eine Kodierung (ein genaues Bit-Format) für jeden dieser Typen Stelle Werkzeuge zur Verfügung, die die abstrakten Datentypen in Datentypen der verwendeten Programmiersprache übersetzen Stelle Prozeduren zur Verfügung, die die lokalen Darstellungen der Datentypen in das kodierte Format übersetzen Zur Laufzeit: wenn ein bestimmter Datentyp übertragen werden soll, rufe die Kodierfunktion auf und übertarge das Ergebnis Auf der Empfängerseite: dekodiere den Bit-String und erzeuge eine neue lokale Repräsentation des empfangenen Typs 1-30 Abbildungsfunktionen Abstrakte Datentypen Übersetzung in Sprache X Übersetzung in Sprache Y Kommunikation? Programm in Sprache X Kodiere Nachricht Programm in Sprache Y Dekodiere Nachricht Nachricht in kodiertem Format 1-31 Bekannte Formate ASN.1 (ISO OSI) XDR (Internet RPC) CDR (CORBA) Java object serialization XML Zwei unterschiedliche Ansätze: Übertragung in binärer Form Übertragung als Text Beispiel ASN.1: 5 Tag: Typ ID 65 Länge der Daten 12 61 “This is the content” Wert: kann selbst wieder strukturiert sein 1-32 Die Realität Zuerst die schlechte Nachricht: das sieht alles ziemlich kompliziert aus, und es ist es auch. Als Socket-Programmierer muss man sich um diese Dinge selbst kümmern. Die gute Nachricht: die Aufgabe einer Middleware ist es, genau diese komplizierten Mechanismen automatisch zu erledigen. Der Anwendungsprogrammierer sieht davon nichts mehr. Mehr dazu im nächsten Kapitel. 1-33 Middleware in Form verteilter Objektsysteme Lokales Objektsystem Rechner Verteiltes Objektsystem Prozess Objekt 1-34 Das Objekt-Modell System = Sammlung miteinander interagierender Objekte, von denen jedes aus einer Menge von Daten und einer Menge von Methoden besteht Wichtige Begriffe: Objektreferenz: die „Adresse“ eines Objekt Schnittstellen: Definition der Zugangspunkte eines Objekts; definiert durch die Signatur der Methoden Aktionen: initiiert durch ein Objekt, das eine Methode eines anderen Objekts aufruft; resultiert in der Zustandsänderung von Objekten Exceptions: eine Möglichkeit, Fehler in einem Programm auf saubere Art und Weise zu behandeln Garbage Collection: Freigabe nicht mehr benutzten Speichers 1-35 Das verteilte Objektmodell Interagierende Objekte sind auf mehr als einen Prozess verteilt Begriffe: Entfernte Objektreferenz: die Adresse eines Objekts im ganzen verteilten System; muss eindeutig sein Entfernte Schnittstellen: die Schnittstelle eines entfernten Objekts, oft beschrieben in einer formalen IDL (interface definition language) Aktionen: Methodenaufrufe anderer Objekte können Prozessgrenzen überschreiten Exceptions: verteilte Ausführung des Systems erweitert das Spektrum möglicher Fehler 1-36 Entfernte und lokale Methodenaufrufe local remote invocation A B C E invocation local invocation local invocation D remote invocation Objekt Rechner Prozess F 1-37 Schnittstellen entfernter Objekte Die entfernte Schnittstelle gibt an, wie auf entfernte Objekte zugegriffen wird. Ihre Beschreibung enthält Den Namen der Schnittstelle Möglicherweise Datentypdefinitionen Die Signatur aller entfernt verfügbaren Methoden, bestehend aus - Dem Methodennamen Ihrer Ein- und Ausgabeparameter Ihrem Rückgabewert Jede Middleware besitzt eine eigene Sprache, um solche Schnittstellen zu beschreiben, die IDL. 1-38 Entferntes Objekt und Schnittstelle remoteobject remote interface { Data m1 m2 m3 implementation of methods m4 m5 m6 1-39 CORBA: Inhaltsübersicht Was ist CORBA? Einsatzgebiete von CORBA Verteilte Objektsysteme Architektur von CORBA Kommunikation zwischen Objekten CORBA IDL Entwicklung von CORBA-Anwendungen CORBA in Enterprise Applications CORBA-fähige Tools CORBA-Unterstützung in Java 1-40 Was ist CORBA? CORBA = Common Object Request Broker Architecture Zunächst einmal eine Spezifikation, keine Implementierung erstellt von der OMG (Object Management Group, http://www.omg.org), einem Konsortium von zahlreichen Firmen und Organisationen Ziel: Standard für verteilte Objektsysteme, Interoperabilität versch. Implementierungen 1-41 Einsatzgebiete Vollständige verteilte Systemimplementierungen Service-Implementierungen, die von anderen Anwendungen netzweit genutzt werden können Erstellen von standardisierten Dienstschnittstellen für Legacy-Anwendungen, z.B. R/3, DB2, Oracle etc. 1-42 CORBA-Eigenschaften CORBA erlaubt das Schreiben von Anwendungen, die aus einer Sammlung heterogener verteilter miteinander kooperierender Objekte bestehen. Heterogen bedeutet hier, die Objekte können in versch. Programmiersprachen implementiert sein unter versch. Betriebssystemen laufen von unterschiedlichen Organisationen betreut werden 1-43 Architektur von CORBA Common Horiz. And Vert. Facilities Distrib. Documents Informat. Systems Managem. Managem. Application Objects …….. Object Request Broker Naming Event Service Trader Persistence Common Object Services Security …….. 1-44 Object Request Broker Zentrale Komponente von CORBA Hauptaufgabe: ermöglicht die für die Anwendung transparente Kommunikation von Objekten über das Netz lokale und entfernte Methodenaufrufe sehen praktisch identisch aus ORB sucht das Objekt für den Aufrufer Jeder Prozess mit CORBA-Objekten muss einen ORB besitzen. ORBs kommunizieren miteinander über das standardisierte GIOP bzw. IIOP im Internet. 1-45 Realisierung des ORB AO AO AO ORB ORB GIOP/IIOP ORB ORB AO Dienst Dienst 1-46 Application Objects Dies sind die eigentlichen Anwendungsobjekte. Sie werden vom Anwendungsentwickler geschrieben. AOs nutzen die ORBs, um miteinander zu kommunizieren und um die verschiedenen CORBA-Dienste zu anzusprechen. Erstellung von AOs behandeln wir etwas später. 1-47 CORBA-Dienste und Facilities CORBA definiert eine Reihe von Standarddiensten, die von Anwendungen verwendet werden können. Dadurch ergibt sich eine erhebliche Einsparung bei der Anwendungsentwicklung. Beispiele: Persistence Service: erlaubt das Speichern und Laden von Objekten auf nichtflüchtigem Speicher Naming Service: Finden von Objekten aufgrund des Namens Transaction Service: erlaubt das Durchführen von Transaktionen („alle Aktionen oder keine“) Trader Service: „Gelbe Seiten“, Finden von AOs aufgrund von Eigenschaften Event Service: Entkopplung von Client und Server; asynchrone Kommunikation 1-48 Kommunikation zwischen Objekten Client X ruft Methode M von Y auf Objekt Y Methode M Object Request Broker (Core) 1-49 Virtuelle und tatsächliche Kommunikation Objektreferenz Client Server Skeleton Stub durch den ORB durchgeführt 1-50 CORBA IDL Die Implementierung von Objekten kann in verschiedenen Sprachen erfolgen. Die Schnittstelle muss jedoch auf standardisierte Weise erfolgen, damit jeder Nutzer eines Objekts weiß, wie er es ansprechen kann. Zu diesem Zweck wird in CORBA die Interface Definition Language (IDL) verwendet. Sie erlaubt die Beschreibung der Signaturen der Methoden eines Objekts sowie evtl. dazu benötigter Datentypen 1-51 IDL Syntax IDL-Beschreibung enthalten die folgenden Elemente Module: zusammengehörige Definitionen einer Anwendung, Schlüsselwort module Datentypen: Definition ähnlich wie in C Schnittstelle eines oder mehrerer Objekte: Schlüsselwort: interface innerhalb einer Schnittstellenbeschreibung: Methoden und Instanzvariablen, falls diese öffentlich sein sollen 1-52 Beispiel module QueueApp { struct PersonenInfo { string firstname; string lastname; int age; } interface Queue { boolean enqueue(in PersonenInfo pi); PersonenInfo dequeue(); boolean isEmpty(); } } 1-53 IDL Compiler Großer Vorteil einer standardisierten formalen Beschreibung einer Objektschnittstelle: sie ist automatisch behandelbar! Zum Beispiel lässt sich automatisch Code für eine Programmiersprache ableiten. Damit wird ein wesentlicher Schritt bei der Umsetzung des Designs in eine Implementierung automatisiert. Es gibt heute für sehr viele Programmiersprachen schon IDL-Compiler. 1-54 Ausgaben des IDL-Compilers Ein typischer IDL-Compiler erzeugt die Stubs und Skeletons die leeren Prozeduren (die Köpfe) auf der Server-Seite ein Serverprogramm, das Client-Anfragen entgegen nimmt und die entsprechenden Prozeduren aufruft ein einfaches Client-Programm zum Testen Der Programmierer muss dann nur noch die Prozedurrümpfe auf der Server-Seite ausfüllen das Client-Programm entsprechend der gewünschten Anwendung modifizieren 1-55 Gemeinsames Format IDL-Compiler IDL definition translate IDL into X IDL-Compiler translate IDL into Y communication? Program in language X translate message into CDR Program in language Y translate message into Y Message in CDR format Stub Skeleton 1-56 IDL Stubs und Skeletons Stubs und Skeletons werden aus der IDL generiert. Ein Stub ist die Verbindung zwischen Client und ORB, ein Skeleton die zwischen Server und ORB. Nach oben (Client bzw. Server) wird die Schnittstelle des Objekts übersetzt in die verwendete Programmiersprache angeboten. Zum ORB hin wird eine Nachrichtenschnittstelle angeboten. Stubs und Skeletons übersetzen demnach das eine Format in das andere. 1-57 Entwicklung von CORBA-Anwendungen Client developer Server developer IDL IDL compiler IDL compiler Sourcen Client ausführbare Programme Server 1-58 CORBA in Enterprise Applications CORBA-Objekte können die komplette Business-LogikEbene einnehmen. Presentation-Implementierungen werden dann oft als WWW-Anwendungen realisiert. Häufige Variante: Servlets als Front-End, die den Kontakt zu den CORBA-Objekten herstellen Oft für Legacy-Anwendungen Servlet Servlet Web Server Object Object Object CORBA Object Server Später dazu mehr 1-59 JAVA RMI als Alternative: Grundlagen Definiert ein Rahmenwerk für die Kommunikation von Java-Objekten unabhängig von ihrem Ort Eine reine Java-Lösung Alle entfernten Objekte müssen ein entferntes Interface besitzen Es sind Werkzeuge vorhanden für die Generierung von Stubs und Skeletons. JDK stellt eine Implementierung des Naming Service zur Verfügung, die RMIregistry. Ein RMI-Dämon erlaubt einen flexible (ondemand)-Instanziierung von Objekten. 1-60 Schnittstellen-Definition Schnittstellen werden definiert Mit Hilfe des Java interface Konstrukts Indem sie die Eigenschaften des Remote interface erben Und indem sie RemoteExceptions auslösen können. Ansonsten können alle Java-Typen verwendet werden. Neue Klassen können definiert und als Parameter von Methoden verwendet werden. import java.rmi.*; import java.util.Date; public interface DateServer extends Remote { public Date getDate() throws RemoteException; } 1-61 Vergleich: CORBA vs. RMI RMI ist eine reine Java-Variante, aber ähnlich zu CORBA + Die Programmierung ist einfacher als bei CORBA + Komplexe Objekte können übergeben werden − Nur für Java Zusammenfassung: Gute Alternative für reine Java-Lösungen Die Übertragung von aktiven Objekten wird selten genutzt (z.B. für mobile Agenten) 1-62 Web Services Idee: Verbinde die Einfachheit von Java RMI mit der Plattformunabhängigkeit von CORBA Web Services: WSDL (Dienstbeschreibung) SOAP (Nachrichtenaustausch) UDDI (Dienstverzeichnis) Das Zusammenspiel dieser Technologien wird im sog. „Web-Service-Rollenmodell“ beschrieben 1-63 Web-Service-Rollenmodell WSD Dienstregister Finden SOAP (über HTTP) Veröffentlichen WSDL WSD Dienstnutzer Interagieren Dienstanbieter 1-64 Warum XML? „Verbindet alles mit jedem!“ Web Services als universelle MiddlewareTechnologie Grundlage: XML Daher: beseitigt Probleme mit inkompatiblen Datentypen, Zeichen-codierungen, Byteorders usw. Hinweis: Performance schlechter als bei binären Protokollen! Vor allem deutlich höheres Datenaufkommen! 1-65 Intuitiver Lösungsansatz: Textkompression POST /axis/services/calculator HTTP/1.0 Content-Type: text/xml; charset=utf-8 Accept: application/soap+xml, application/dime, multipart/related, text/* User-Agent: Axis/1.1 Host: localhost Cache-Control: no-cache Pragma: no-cache SOAPAction: "" Accept-Encoding: gzip Content-Length: 348 Content-Encoding: gzip <?xml version='1.0' ?> <env:Envelope [ xmlns:env="http://www.w3.org/2003/05/soap-envelope"> ?鲠3̐ F©Ҩ¤+¡tʓ>nᄆ� ¤A yJ ȕª `ÑUº […] <env:Body> <res:reservationRequest xmlns:res="http://sunshinecars.example.org/reservation"> […] </res:reservationRequest> </env:Body> </env:Envelope> Ergebnis: marginale Verbesserung 120.000 SOAP 100.000 Datenaufkommen [Bytes] 1-66 Corba 80.000 RMI SOAP (gzip) 60.000 40.000 20.000 0 1 5 10 15 20 25 30 35 40 Anzahl ausgetauschter Nachrichten (n) 45 50 1-67 Netzprogrammierung vs. Middleware Direkte Netzprogrammierung Direkte Kontrolle aller Transportparameter größere Flexibilität bei der Entwicklung neuer Protokolle Kann in vielen Fällen bessere Performance bringen Grosses Problem: Datenrepräsentation Middleware Sehr bequemer Weg zur Entwicklung von Anwendungen Datenrepräsentation, Objektlokalisierung etc. muss nicht von der Anwendung gemacht werden Oft viel Overhead 1-68 Diskussion