k. corba - Verteilte Systeme

Werbung
K. CORBA
K.1.1 Standardisierung
CORBA = Common Object Request Broker Architecture
plattformunabhängige Middleware-Architektur für verteilte Objekte,
aufgesetzt auf ein vorhandenes Betriebssystem,
auch für heterogene verteilte Systeme.
OMG = Object Management Group
Standardisierungsorganisation mit etwa 1000 Mitgliedern,
Publikation verschiedener Standard-Dokumente,
Definition von CORBA –Kompatibilität.
Teilbereiche der Standardisierung
CORBA – Softwarearchitektur für Komponenten,
UML – Unified Modelling Language (textuell & graphisch),
XMI – XML Metadata Interchange zwischen UML und MOF Werkzeugen,
MOF – Meta Object Facility ...
Entwurf von Systemen mit hoher Komplexität ...
Verteilte Betriebssysteme, 2009/10, P. Schulthess,VS, Universität Ulm
6-1
K.1.2 Zielsetzung
Verteilte objektbasierte Programmierung:
verteilte Objekte mit definierter Schnittstelle
Obj
Obj
Obj
Heterogenität in Verteilten Systemen:
verschiedene Betriebssystem-Architekturen
verschiedene Hardware-Architekturen
verschiedene Programmiersprachen
Anbindung an Altsysteme (Legacy):
insbesondere C, Pascal und Visual Basic,
CORBA-Anwendungen sollen mit Altsystemen interagieren.
Middleware
OS OS
OS
OS
Freiheitsgrade bei der Middleware-Implementierung:
CORBA schreibt keine Implementierung vor, sondern die Funktionalität,
CORBA fordert Interoperabilität verschiedener Implementierungen,
Partielle Implementierung zulässig.
Verteilte Betriebssysteme, 2009/10, P. Schulthess,VS, Universität Ulm
6-2
K.2 OMA - Object Management Architecture
ORB als “Softwarebus” bzw. „Komponentenbus“:
Vertikale
Vertikale
VerticalFacilities
Facilities
Facilities
Anwendungsobjekte
Horizontal
Facilities
ORB
CORBA Services
Verteilte Betriebssysteme, 2009/10, P. Schulthess,VS, Universität Ulm
6-3
K.2.1 Anwendungsobjekte
Verteilte CORBA-Objekte
Objekt immer auf einem bestimmten Rechner (holistischer Ansatz),
Kommunikation zwischen den Objekten über ORB,
bilden gemeinsam eine Anwendung.
Implementierungsperspektive:
interne Implementierung über Stellvertreterobjekte,
Legacy-Anwendungen können Objektaufrufe durchführen,
Der Aufrufer muss nicht unbedingt ein CORBA-Objekt sein:
Verteilte Betriebssysteme, 2009/10, P. Schulthess,VS, Universität Ulm
6-4
K.2.2 CORBA-Services
Bieten gewissermassen ein System API zum „Middleware-OS“.
Mit Objektschnittstelle und Methoden zum Aufruf,
Erscheinen als ORB-Erweiterungen.
Services bieten weitergehende Dienstleistungen an
allgemein brauchbare und standardisierte Dienstleistungen,
„Was man eben in einem Betriebssystem so erwartet“.
Konkret zum Beispiel:
Namensdienst (zum Auffinden von Objekten),
Zeitdienst (zum Synchronisieren der Zeit),
Sicherheitsdienst (zur Zugriffskontrolle).
Query, Relationships, Collections,
Change Management, Life cycle,
Externalisation, Persistence,
Concurrency, Transactions,
Events, Object properties,
Trader, Licensing …
Verteilte Betriebssysteme, 2009/10, P. Schulthess,VS, Universität Ulm
6-5
K.2.3 CORBA-Facilities
Facilities sind anwendungsorientierte Dienstleistungen:
im Gegensatz zu CORBA-Services (systemorientierte Dienstleistungen),
könnten auch vom Anwendungsprogrammierer erstellt werden.
Horizontale CORBA-Facilities:
über Anwendungsgebiete hinweg nutzbare Dienstleistungen,
z.B. Dokumentenbearbeitung, Druckdienst, Mobile Agenten, ...
Vertikale CORBA-Facilities:
Betrachtung einer Anwendungsdomäne (Domain Facilities)
z.B. Dienste für Gesundheitswesen (Patientenverwaltung CORBAmed),
Finanzdienstleistungsgewerbe,
Produktmanagement,
Telekommunikation,...
Verteilte Betriebssysteme, 2009/10, P. Schulthess,VS, Universität Ulm
6-6
K.2.4 ORB - Object Request Broker
Rückgrat einer CORBA-Middleware.
Vermittelt Methodenaufrufe von einem zum anderen Objekt
Interne Komponenten im ORB:
Language Mapping,
Dynamic Interfaces,
Inter Orb Protocols,
Objekt-Adapter …
Objekte
(im Servant)
Interface
Repository
DII
IDL Stubs
GIOP / IIOP
Verteilte Betriebssysteme, 2009/10, P. Schulthess,VS, Universität Ulm
Skeleton
ORB Intf.
DSI
Object Adapter
ORB Core
Implementation
Repository
Klient
6-7
K.2.5 Kommunikationsprotokolle
GIOP – General Inter-ORB Protocol (standardisiert in CORBA):
Basisprotokoll für RPC-basierte Objektaufrufe,
Austauschformat zwischen ORBs verschiedener Hersteller,
Common Data Representation (CDR) definiert Marshalling & Unmarshalling von IDL-Typen
IIOP – Internet Inter-ORB Protocol:
GIOP über TCP/IP,
GIOP-Implementierungen über andere Protokolle möglich,
Unterstützung durch den ORB für CORBA-Kompatibilität vorgeschrieben.
Innerhalb einer ORB-Instanz können Objekte mit herstellerspezifischem
Protokoll kommunizieren.
GIOP Request Typen:
LocateRequest & LocateReply zum Auffinden eines Objektes,
Request & Reply für einen Methodenaufruf,
MessageError, Fragment,
CloseConnection,
CancelRequest.
Verteilte Betriebssysteme, 2009/10, P. Schulthess,VS, Universität Ulm
6-8
K.2.6 OA bzw. Objekt-Adapter
Sprachspezifische Objektschnittstelle an ORB-Kernfunktionen anpassen.
Bestandteil des ORB.
Server
Servant:
Grob gesehen ein Wrapper für ein oder mehrere Objekte,
Für unsere Zwecke Unterschied Servant/Objekt ignorieren,
Weiterleitung von Anfragen transparent möglich.
Aufgaben eines Objektadapters
Generierung der IOR-Objektreferenzen
Aktivierung und Deaktivierung von Servants
Allgemeine Kommunikationsplattform bereitstellen,
Authentisierung des Aufrufers (im Security-Service)
OA-Instanz kennt die an ihm angemeldeten Objekte/Servants.
Servant
OA
Skeleton
Aufruf
ORB Core
Skeleton:
Entgegennahme eingehender Methodenaufruf-Anfragen
Weiterleitung von Methodenaufrufen an den entsprechenden Servant
Verteilte Betriebssysteme, 2009/10, P. Schulthess,VS, Universität Ulm
6-9
Portable-Object-Adaptor (POA):
definierte Funktionalität für die häufigsten Aufgaben,
Obligatorischer Adapter für alle ORBs.
Root-POA existiert in jedem ORB:
voreingestellte Konfiguration,
Anfrage am ORB mit: orb.get_initial_reference( “RootPOA” ),
kann zur Aktivierung von Objekten und weiteren OAs verwendet werden.
Weitere POAs mit unterschiedlichen Konfigurationen erzeugbar:
Erzeugung am RootPOA bzw. an untergeordnetem POA (Vater-POA),
Objektreferenz enthält POA-Name: POA kann ausgewählt werden,
POA-Instanzen teilen sich den Kommunikationskanal,
neuer POA bekommt eigenen Namen (String).
Verteilte Betriebssysteme, 2009/10, P. Schulthess,VS, Universität Ulm
6-10
K.2.7 Policy-Objekte
Enthalten Konfigurationsparameter, Vorgaben & evtl. auch Methoden.
Umständlich aber konsequent objektorientiert.
Policy-Objekte können am POA-Interface erzeugt werden:
Angabe einer bestimmten Policy für eine Policy-Kategorie,
bei Erzeugung eines POA werden vorab erzeugte Policy-Objekte als Konfiguration übergeben
Beispiel: Policy für Implicit-Activation-Policy
Erzeugung am POA mit Aufruf von create_implicit_activation_policy( ... )
mögliche Policies (übergeben als Parameter)
IMPLICIT_ACTIVATION für implizite Aktivierung
NO_IMPLICIT_ACTIVATION für explizite Aktivierung
Verteilte Betriebssysteme, 2009/10, P. Schulthess,VS, Universität Ulm
6-11
K.3 Dynamic-Invocation-Interface (DII)
Der Typ eines Objekts ist zur Compilierungszeit evtl. nicht bekannt.
Interface-Repository:
wird über den ORB abgefragt.
hier müssen Schnittstellendefinitionen hinterlegt werden,
Abfrage der Objektschnittstelle beim Interface Repository,
Methoden, Parameter und deren Typen können erfragt werden,
get_interface() liefert Beschreibung der Schnittstelle eines Objekts,
Dynamische Konstruktion des Aufrufobjekts
generische Schnittstelle create_request() bei jedem CORBA-Objekt,
Aufruf wird durch dynamisches Request-Objekt repräsentiert,
Benennung der Methode als String,
vgl. textueller Aufruf in Plurix.
CORBA::Object
Create_request
MyInterface
CorbaRequest::
Invoke()
Übergabe der Parameter gekapselt im Request-Objekt:
eigentlicher Aufruf wird durch invoke() am Request-Objekt ausgeführt
Verteilte Betriebssysteme, 2009/10, P. Schulthess,VS, Universität Ulm
6-12
K.3.1 CORBA Kompatibilität
OMA legt nur Funktionalität und Schnittstellen fest:
die Implementierung ist Sache eines CORBA-Herstellers (Vendor).
CORBA-Kompatibilität kann zertifiziert werden,
wird jedoch meist (noch) nicht gemacht.
Implementierung muss nur Grundfunktionen zwingend realisieren:
Interoperabilität bei der Kommunikation mit ORBs anderer Hersteller,
ORB-Core: ORB-Funktionen, Objektkommunikation,
Sprachunterstützung für mindestens eine Sprache,
keine Services oder Facilities vorgeschrieben,
nicht die vollständige Spezifikation,
mindestens IIOP.
Verteilte Betriebssysteme, 2009/10, P. Schulthess,VS, Universität Ulm
6-13
K.4 CORBA-Objekte
Eigenschaften eines CORBA-Objekts
Attribute (von außen zugreifbare Instanzvariablen),
Operationen (von außen zugreifbare Methoden),
Verteilt bzw. remote aufrufbar,
Identität der Instanz,
Zustand.
Stub enthält GET- und SET-Routinen für exportierte Variablen.
Zum Thema „Objektorientierung“:
CORBA-Objekt muss nicht identisch mit einem Objekt in einer Programmiersprache sein,
CORBA kann auch „objektlose“ Programmiersprachen unterstützen, z.B. C.
Verteilte Betriebssysteme, 2009/10, P. Schulthess,VS, Universität Ulm
6-14
K.4.1 IOR – Interoperable Object Reference
Darstellung einer Objektreferenz als IDL-Datenstruktur:
muss verwendet werden für GIOP,
Repräsentation als String möglich (object_to_string).
Profile in der IOR:
für jede Protokollfamilie eigenes Profil möglich,
Objekt kann theoretisch mehrere Protokolle unterstützen,
z.B. IIOP neben herstellerspezifischem Protokoll.
Typ. Implementierung in Standard-ORBs:
IOR wird als eindeutiger Objektbezeichner benutzt,
Nutzung von IIOP auch innerhalb des ORBs.
Object
POA
Server
Identifier
Identifier
spec.
Info
IIOP Host Port
Version ID number
Object
Key
Components
IOR
Repository ID
Verteilte Betriebssysteme, 2009/10, P. Schulthess,VS, Universität Ulm
Profile
ID
Profile
Data
...
Next
Profile
6-15
K.4.2 Objekterzeugung für den Server
Beschreibung der Objekt-Schnittstelle in IDL.
Implementierung des Servant
Servant realisiert ein oder auch mehrere CORBA-Objekte,
Entscheidung für eine Programmiersprache,
Umsetzung der IDL-Schnittstelle in ein Skeleton,
Skeleton wird in der Regel ausgefüllt mit Implementierungscode,
Prä-Compiler wird häufig IDL-Compiler genannt.
Instanzieren des CORBA-Objekts (Servant)
Aktivierung des Servants am Object-Adaptor,
Generierung einer entfernten Objektreferenz im OA,
Verteilte Betriebssysteme, 2009/10, P. Schulthess,VS, Universität Ulm
6-16
POA Beispiel:
mindestens eine POA-Instanz pro Adressraum (Server-Prozess),
Aufruf von activate_object am POA,
Rückgabe der Referenz auf Servant:
Aufruf von servant_to_reference am POA,
Realisierung der Objektreferenz ist sprachabhängig
liefert Objektreferenz auf CORBA-Objekt (nicht Servant)
z.B. in Java: Stellvertreterobjekt (lokaler Stellvertreter ist optimiert)
implizite Aktivierung
Übergabe des Servant als Aufrufsparameter aktiviert automatisch den Servant,
eine mögliche Betriebsart des POA.
Verteilte Betriebssysteme, 2009/10, P. Schulthess,VS, Universität Ulm
6-17
K.4.3 Objektnutzung durch den Klienten
Erzeugung eines Stubs
Umsetzung der IDL-Schnittstelle in einen Stub,
Auswahl einer Programmiersprache für die Client-Seite.
Empfang eines Parameters mit Objekttyp
Autom. Erzeugung einer neuen Objektreferenz mit Hilfe des Stub-Code:
Objekttyp ist zur Compile-Zeit bekannt: Stub-Code kann erzeugt werden
realisiert auch entfernte Objektreferenz
Aufruf von Operationen gemäß Sprachanbindung
z.B. Java: Aufruf von Methoden am Stellvertreterobjekt
Verteilte Betriebssysteme, 2009/10, P. Schulthess,VS, Universität Ulm
6-18
K.4.4 Namensdienst.
Woher bekommt man die Referenz auf den Namensdienst?
Initiale entfernte Objektreferenz muss irgendwie beschafft werden,
ORB-Interface: z.B. orb.resolve_initial_reference( “NamingService” );
Vorkonfiguration durch Systembetreiber.
Alternative: Übergabe der Referenzen außerhalb des Systems
ORB-Interface: Umwandlung in einen String: orb.object_to_string( objref );
Rückumwandlung: orb.string_to_object( str );
Referenz kann per String übermittelt werden, z.B. über Datei, TCP/IP, Standardeingabe,
Kommandozeile ...
Verteilte Betriebssysteme, 2009/10, P. Schulthess,VS, Universität Ulm
6-19
K.4.5 Sprachabhängige Code-Generierung
z.B. in Java wird aus IDL-Beschreibung neben Stub und Skeleton auch
Holder- und Helper-Klasse generiert
Verteilte Betriebssysteme, 2009/10, P. Schulthess,VS, Universität Ulm
6-20
K.4.6 Parameterübergabe
Objekttypen: Übergabe der Objektreferenz
Basistypen: Übergabe des abgebildeten Sprach-Datentyps
komplexere Typen: Übergabe sprachabhängig
Übergabe bei out und inout Parametern sprachabhängig.
Typumwandlung / Cast:
Objektreferenz kann einen Typ aus der Vererbungshierarchie der Schnittstellen besitzen,
wahrer Objekttyp kann spezifischer in der Vererbungshierarchie sein,
Erzeugung einer anderen Objektreferenz mit anderem Typ,
Zusätzlicher Aufwand im Skeleton.
Verteilte Betriebssysteme, 2009/10, P. Schulthess,VS, Universität Ulm
6-21
K.4.7 Ergebnisrückgabe und Vererbung
Problem 1: mehrfache Ergebnisse
Manche Programmiersprachen können nur schwer mehrere Ergebnisse zurückzugeben:
=> Holder-Klassen in Java:
z.B. kann AccountHolder eine Referenz auf ein Account-Objekt aufnehmen,
Java-Referenz auf AccountHolder-Objekt wird als out- oder inout-Parameter übergeben,
Ergebnisparameter kann aus Holder-Objekt ausgelesen werden.
Problem 2: Vererbung
narrow- & cast-Operation benötigt sprachabhängige Umsetzung:
Umwandlung in spezifischeren Typ ist nur möglich, wenn tatsächlich vorliegend,.
Umwandlung in weniger spezifischen Typ ist immer möglich,
z.B. Java Helper-Klassen pro Objekttyp:
AccountHelper, SavingsAccHelper, CheckingAccHelper,
anyAccount = AccountHelper.narrow( savingsAccInstance);
Verteilte Betriebssysteme, 2009/10, P. Schulthess,VS, Universität Ulm
6-22
K.5 Interface-Definition-Language
K.5.1 Schnittstellenkonzept
Schnittstelle wird unabhängig von der benutzten Programmiersprache in
einer Interface-Definition-Language (IDL) beschrieben
von außen zugreifbare Attribute und Operationen müssen in
Schnittstellendefinition deklariert werden.
Language-Mapping:
Abbildung zwischen Programmiersprache und IDL-Syntax,
Abbildung zwischen Sprachcompiler und CDR (Common Data Representation)
Skalare, Arrays, Strukturen, Objekte, Vererbung,
Parameterübergabe und –rückgabe.
von CORBA unterstützte Sprachen
Ada, C, C++, Java, Lisp, PL/I, Python, Smalltalk
weitere inoffizielle Language-Mappings existieren,z.B. für Perl
Verteilte Betriebssysteme, 2009/10, P. Schulthess,VS, Universität Ulm
6-23
K.5.2 IDL angelehnt an C++
geringer Lernaufwand für C++ Programmierer.
Module
definieren hierarchischen Namensraum für Anwendungsschnittstellen und -typen,
z.B. Verantwortlichkeit für ein Modul an Programmierer zuordnen.
Schnittstellen:
beschreiben einen von außen wahrnehmbaren Objekttyp
eigene Datentypen
Basistypen
Aufzählungstyp
zusammengesetzte Typen
Exceptions beschreiben Ausnahmebedingungen
Verteilte Betriebssysteme, 2009/10, P. Schulthess,VS, Universität Ulm
6-24
K.5.3 Parameterübergabesemantik für IDL
Basistypen, komplexe Typen:
Call-by-Value, Wert wird kopiert
Call-by-Object-Reference für Objekttypen:
Hauptsächlich sinnvoll für IOR Referenzen,
Referenz auf das Objekt wird kopiert.
Seit CORBA 2.3 auch Value-Types:
ähnlich wie Objekttypen, aber mit Call-by-Value-Übergabe,
Der Parameter wird serialisiert – ähnlich Java,
Z.B. für struct, record, Instanz …
valuetype AccountVal{
Valuetype in IDL:
public short accoutnNr;
Valuetype wäre in C++ schwierig,
private double balance;
auch Vererbung möglich,
auch abstrakte
double withdraw( in double amount ) ;
double deposit( in double amount );
factory init( in short accountNr );
}
Verteilte Betriebssysteme, 2009/10, P. Schulthess,VS, Universität Ulm
6-25
K.5.4 Beispiel: Umsetzung von IDL in C++ Sprachkonstrukte
ID L
C++
Verteilte Betriebssysteme, 2009/10, P. Schulthess,VS, Universität Ulm
6-26
Beispiel: Umsetzung von IDL in Sprachkonstrukte (z.B. Java)
ID L
Java
C++
Verteilte Betriebssysteme, 2009/10, P. Schulthess,VS, Universität Ulm
6-27
Vorteile
Schnittstellenbeschreibung unabhängig von Implementierungssprache,
ermöglicht Unterstützung vieler Programmiersprachen,
IDL ist sehr ausdrucksstark (z.B. sequence).
Nachteile
Objektschnittstelle muss in IDL und in der Implementierungssprache beschrieben werden
(letzteres kann teilweise automatisiert werden),
Sprachabbildung für IDL-Konstrukte, die in einer Programmiersprache nicht direkt vorhanden
sind, ist kompliziert,
Einige besondere Fähigkeiten einer Sprache, können nicht genutzt werden.
Verteilte Betriebssysteme, 2009/10, P. Schulthess,VS, Universität Ulm
6-28
K.6 CORBA Perspektive
Verknüpfung mit RMI:
RMI kann mit IIOP betrieben werden
standardisierte Abbildung von Remote-Schnittstellen auf IDL (und zurück)
CORBA-Objekt erscheinen als RMI-Objekte
RMI-IIOP-Objekte können als CORBA-Objekte auftreten
Fault-Tolerant-CORBA:
CORBA-Erweiterung für fehlertolerante Objekte
seit CORBA 3.0 im Standard integriert
Middleware-Erweiterung (holistischer Ansatz) für Objektgruppen-Referenzen
Quellen:
Hauck F., Vorlesung «Verteilte Betriebssysteme»,
Weber M., Verteilte Systeme, 2002,
Tanenbaum A., van Steen M., Distributed Systems, Prentics Hall 2002,
Bengel G., Verteilte Systeme, Vieweg 2000,
Verteilte Betriebssysteme, 2009/10, P. Schulthess,VS, Universität Ulm
6-29
Herunterladen