• Keine Ergebnisse gefunden

Compute-Cluster Mehrprozessor- systeme

N/A
N/A
Protected

Academic year: 2021

Aktie "Compute-Cluster Mehrprozessor- systeme "

Copied!
23
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Multiprozessoren und

Compute-Cluster Mehrprozessor- systeme

(gemeinsamer Speicher)

Computernetze

(geographisch verteilt) eng

gekoppeltlose gekoppelt

Busge- Schaltnetzgekop- pelt (“switched”) koppelt

Mehrrechner- systeme

(räuml. konzentriert)

MIMD

Parallelrechner verteiltes System

Abgrenzung Parallelrechner

“multiprocessor” “compute cluster”

sehr schnelle Kommunikation auf niedriger Ebene

(interne Kommunikation)

langsamere Kommunikation (externe Kommunikation)

Kopplungsgrad alsqualitatives Merkmal

Multiple Instruction, Multiple Data (im Gegensatz zu SIMD)

(2)

Prozessorverbund

- Autonome Prozessoren + Kommunikationsnetz - Je nach Kopplungsgrad und Grad der Autonomie ergibt sich daraus ein

- Mehrprozessorsystem - Compute Cluster - Computernetz

P

P P P

P P

P P P

P

P

???

Prozessor

PE PE PE PE

MM MM MM

Processing Elements

Memory Modules

???

Speicherkopplung

- Shared Memory

- Kommunikation über gemeinsamen Speicher

- n Processing Elements teilen sich k Memory Modules - Kopplung zwischen PE und MM, z.B.

- Bus - Schaltnetz - Permutationsnetz

- UMA-Architektur (Uniform Memory Access) oder NUMA (Non-Uniform Memory Access)

wenn es “nahe” und “ferne” Speicher gibt: z.B. schneller Zugriff auf den eigenen Speicher, langsamer auf fremden

(3)

Busgekoppelte Multiprozessoren

PE PE PE

MM MM

Processing Element (cpu; Prozessor)

Memory

Bus

logisch gemeinsamer Speicher (“shared memory”)

Module

Busbreite z.B.:

32 Datenleitungen 32 Adressleitungen

~ 20 Steuerleitungen

Problem:

Bus i.Allg. bereits bei wenigen (3 - 5) PEs überlastet

Lösung:

PE

cache

zwischen PE und Bus:

Lokale Caches

Cache gross genug (relativ zur Hauptspeichergrösse) wählen, um Hitraten > 90% erzielen

Probleme:

1) Kohärenz der caches

2) Damit Überlastungsproblem nur verschoben

(nicht wesentlich mehr Prozessoren möglich)

Generell: Busgekoppelte Systeme schlecht skalierbar!

(Übertragungsbandbreite bleibt “konstant” bei Erweiterung um Knoten)

Schaltnetzgekoppelte Multiprozessoren

PE PE PE

MM MM

Schnelles Verbindungsnetz

“Illusion” eines

gemeinsamen Speichers

PE PE PE PE

MM MM MM MM

elektronische Schalter (“crosspoint switch”)

Z.B. Crossbar-switch (Kreuzschienenverteiler):

- Gleichzeitiger Zugriff von PEs auf Speichermodule (MM) zum Teil möglich

- Schlecht skalierbar (quadratisch viele Schalter)

(4)

Permutationsnetze

exchange

shuffle

PE Memory

Modules

Mehrere Stufen von Schaltelementen ermöglichen die Verbindung jeden Einganges zu jedem Ausgang Schaltelement (“interchange box”) kann zwei

Zustände annehmen (durch ein Bit ansteuerbar):

straight through exchange

Shuffle- Exchange- Netz

(Omega-Netz)

Hier: log n (identische!) Stufen mit je n/2 Schaltern Es gibt weitere ähnliche dynamisch schaltbare Netze Designkriterien:

- wenig Stufen (“delay”)

- Parallele Zugriffe; Vermeidung von Blockaden

z.B. Butterfly-Netze

Beispiel:

Multiprozessoren - Fazit

- Speicherkopplung begrenzt Skalierbarkeit und räumliche Ausdehnung

- Untergliederung des Speichers in mehrere Module (Parallelität) - leistungsfähiges Kommunikationsnetz

- Realisierungsaufwand (Grösse, Kosten)

- Skalierbarkeit (mit wachsender Anzahl PEs und MMs)

- innere Blockadefreiheit (parallele Kommunikationsvorgänge?) - Anzahl der Stufen (Verzögerung)

- Eingangsgrad und Ausgangsgrad der Bauelemente

- Bewertungskriterien für Verbindungsnetze

- Gemeinsamer Speicher, über den die Prozessoren In- formation austauschen (d.h. kommunizieren) können

- Prozessoren müssen mit dem Speicher (bzw. den einzelnen Speichermodulen) gekoppelt werden

(5)

Mehrrechnersysteme (“Compute Cluster”)

Vernetzung vollständiger Einzelrechner:

PE MM

PE MM

PE MM

PE MM

Verbindungsnetz

Zugriff auf andere Rechner (bzw. deren private Speicher) nur indirekt über Nachrichten

“privater”

Speicher

- kein globaler Speicher

- NORMA-Architektur (NO Remote Memory Access)

Verbindungstopologien für Mehrrechnersysteme

Zusammenhängender Graph mit

Knoten = Rechner (Prozessor mit privatem Speicher) Kante = dedizierte Kommunikationsleitung

Ausdehnung: i.Allg. nur wenige Meter

Bewertungskriterien:

- Gesamtzahl der Verbindungen (bei n Knoten)

- maximale bzw. durchschnittliche Entfernung zweier Knoten - Anzahl der Nachbarn eines Knotens (“fan out”)

- Skalierbarkeit - Routingkomplexität

Technologische Faktoren:

- Geschwindigkeit, Durchsatz, Verzögerung, spezifische Kommunikationsprozessoren / Switches,...

- Zahl der alternativ bzw. parallel verfügbaren Wege

Frage: Wieso kommuniziert man nicht einfach über Funk (indem z.B. jeder Knoten seine spezifische Empfangsfrequenz hat)?

(6)

Hypercube

Draufsicht von der Seite liefert jeweils niedrigere Dimension

Entsprechend: Herausdrehen des Objektes aus der Blickebene zeigt, dass es sich “eigentlich” um ein Objekt der Dimension n+1 handelt!

...

- Hypercube = “Würfel der Dimension d”

- Rekursives Konstruktionsprinzip

- Hypercube der Dimension 0: Einzelrechner - Hypercube der Dimension d+1:

„Nimm zwei Würfel der Dimension d und verbinde korrespondierende Ecken“

4-dimensionaler Würfel

Hypercube der Dimension d

- Einfaches Routing:

(Anzahl der “ports” in der Hardware)

- n = 2

d

Knoten

- Anzahl der Nachbarn eines Knotens = d

- Gesamtzahl der Kanten (= Verbindungen): d 2

d

/2 = d 2

d-1

- Knoten systematisch (entspr. rekursivem Aufbau) numerieren - Zieladresse bitweise xor mit Absenderadresse

- Wo sich eine “1” findet, in diese Dimension muss gewechselt werden

110

d=3 d=2 d=1

-Vorteile Hypercube:

111

000 100

001

- Maximale Weglänge: d - Durchschnittliche Weglänge = d/2

(Induktionsbeweis als Übung!)

- kurze Weglängen (max. log n) - einfaches Routing

- viele Wegalternativen (Fehlertoleranz, Parallelität!)

-Nachteile:

- Anzahl der Nachbarn eines Knotens wächst mit der Dimension d - insgesamt relativ viele Verbindungen (“Kanten”): O(n log n)

d=1 d=2 d=3

(eigentlich genügen n-1)

(Ordnung O(n logn))

wieviele verschiedene Wege der Länge k gibt es insgesamt?

(7)

M PE

M PE

M PE

M PE

M PE

M PE

M PE

M PE

5 1 2 6

7 3 4 8

3 4

7 8

5 6

1 2

Layout eines Hypercube

Obiger Topologie sieht man nicht unmit- telbar an, dass es sich dabei um einen 3-dimen- sionalen Würfel handelt!

= d-dimensionales Gitter mit “wrap-around”

Baustein für

2 Dimensionen 3 Dimensionen

- Bei Ausdehnung w

i

in Dimension i:

n = w

1

× w

2

× .. × w

d

Knoten;

mittlere Entfernung zw. 2 Knoten : Δ ≈ ∑

14

w

i

- Hypercube der Dimension d ist d-dimensionaler Torus mit w

i

= 2 für alle Dimensionen!

→ Δ =

14

d

2 = (2 d) = = log

14 d2 12 2

n

Eine andere Verbindungstopologie:

- Ring als Sonderfall d = 1 !

- Rekursives Konstruktionsprinzip: „Nimm w

d

gleiche Exemplare eines Torus der Dimension d -1 und ver- binde korrespondierende Elemente zu einem Ring“

der d-dimensionale Torus

(8)

3-dimensionaler Torus

Mit w

1

= 4, w

2

= 3, w

3

= 3

Cube Connected Cycles (CCC)

Cube Cycle

“Ecke” eines CCC (d=5)

Bei Dimension d: n = d 2

d

Maximale / mittlerer Weglänge?

CCC = d-dimensionaler Hypercube mit aufge- schnittenen Ecken, die durch Gruppen von d ringförmig verbundenen Knoten ersetzt sind

Anzahl der Verbindungen = 3 n / 2

(statt O(n log n) wie beim Hypercube)

Es gibt viele weitere Verbindungstopologien

(wollen wir hier aber nicht betrachten)

Beachte: Jeder Knoten hat immerdrei Anschlüsse!

Denkübung!

(nicht ganz einfach)

(9)

Kommunikation

Kommunikation

Notwendig, damit die Kommunikation klappt, ist jedenfalls:

1) dazwischenliegendes physikalisches Medium 2) einheitliche Verhaltensregeln

- z.B. elektrische Signale in Kupferkabeln

- Kommunikationsprotokolle

3) gemeinsame Sprache und gemeinsame Semantik

- gleiches Verständnis der Bedeutung von Kommunikationskonstrukten und -Regeln

Also trotz Verteiltheit gewisse gemeinsame Aspekte!

- Prozesse sollen kooperieren, daher untereinander Information austauschen können; mittels

-gemeinsamer Daten in einem globalen Speicher (dieser kann physisch oder evtl. nur logisch vorhanden sein: “virtual shared memory”)

- oderNachrichten: Daten an eine entfernte Stelle kopieren

- send → receive

- Implizite Synchronisation: Senden vor Empfangen - Nachrichten sind dynamische Betriebsmittel

- Empfänger erfährt, wie weit der Sender mindestens ist

- verursachen Aufwand und müssen verwaltet werden

- Nachrichtenbasierte Kommunikation:

(10)

Message Passing System

- Organisiert den Nachrichtentransport

- z.B.send (...) bzw.receive (...)

- Bietet Kommunikationsprimitive (als APIs) an

- evtl. auch ganze Bibliothek unterschiedlicher Kommunikationsdienste

- Verwendet vorhandene Netzprotokolle und implementiert damit neue, “höhere” Protokolle

- Garantiert (je nach “Semantik”) gewisse Eigenschaften

- z.B. Reihenfolgeerhalt oder Prioritäten von Nachrichten

- Abstrahiert von Implementierungsaspekten

- wie z.B. Geräteadressen, Längenbeschränkung von Nachrichten etc.

- Maskiert gewisse Fehler

- mit typischen Techniken zur Erhöhung des Zuverlässigkeitsgrades:

- Verbirgt Heterogenität unterschiedlicher Rechner- bzw. Betriebssystemplattformen

- verwendbar mit gängigen Programmiersprachen (oft zumindest C)

- erleichtert Portabilität von Anwendungen

als einfache Form von “Middleware”

System1 System2 System3

Verteilte Anwendung APIs

- Besteht aus Hilfspro- zessen, Pufferobjekten,...

Netz

- Verbirgt Details des zu- grundeliegenden Netzes

Timeouts, Quittungen, Sequenznummern, Wiederholungen, Prüfsummen, fehlerkorrigierende Codes,...

Ordnungserhalt von Nachrichten?

- Manchmal werden vom Kommunikationssystem

- entspricht einer “Globalisierung” von FIFO auf mehrere Prozesse

Garantien bzgl. Nachrichtenreihenfolgen gegeben - Eine mögliche Garantie stellt FIFO (First-In-First-Out) dar: Nachrichten zwischen zwei Prozessen überholen sich nicht: Empfangsreihenfolge = Sendereihenfolge

FIFO kein FIFO

- FIFO verbietet allerdings nicht, dass Nachrichten evtl. indirekt (über eine Kette anderer Nachrichten) überholt werden

- Möchte man auch dies haben, so muss die Kommuni- kation “kausal geordnet” sein

(Anwendungszweck?)

- “Dreiecksungleichung”: Keine Information erreicht Empfänger auf Umwegen schneller als auf direktem Wege

zwar FIFO, aber nicht kausal geordnet

- Denkübung: wie garantiert (d.h. implementiert) man kausale Ordnung auf einem System ohne Ordnungsgarantie?

P1

P3 P2

(11)

- Achtung: Semantik ist a priori nicht ganz klar:

Prioritäten von Nachrichten?

- Soll (kann?) das Transportsystem Nachrichten höherer Priorität bevorzugt (=?) befördern?

- Sollen (z.B. bei fehlender Pufferkapazität) Nach- richten niedrigerer Priorität überschrieben werden?

- Wieviele Prioritätsstufen gibt es?

- Sollen auf Empfangsseite zuerst Nachrichten mit höherer Priorität angeboten werden?

- Mögliche Anwendungen:

- Unterbrechen laufender Aktionen ( → Interrupt) - Aufbrechen von Blockaden

- Out-of-Band-Signalisierung

Vorsicht bei der Anwendung: Nur bei klarer Semantik verwenden; löst oft ein Problem nicht grundsätzlich!

Durchbrechung der FIFO-Reihenfolge!

- Inwiefern ist denn eine (faule) Implementierung, bei der “eilige”

Nachrichten (insgeheim) wie normale Nachrichten realisiert werden, tatsächlich nicht korrekt?

(Vgl. auch Service-Klassen inComputernetzen: bei Rückstaus bei den Routern soll z.B. interaktiver Verkehr bevorzugt werden vor ftp etc.)

Fehlermodelle

Crash / Fail-Stop: Ausfall eines Prozessors

Zeitfehler: Ereignis erscheint zu spät (oder zu früh)

“Byzantinische” Fehler: Beliebiges Fehlverhalten, z.B.:

P1 P2 P3

?

- verfälschte Nachrichteninhalte

- Prozess, der unsinnige Nachrichten sendet

(solche Fehler lassen sich nur teilweise, z.B. durchRedundanz, erkennen)

Fehlertolerante Algorithmen sollen das “richtige”

Fehlermodell berücksichtigen!

- adäquate Modellierung der realen Situation / des Einsatzgebietes - Algorithmus verhält sich korrekt nurrelativ zum Fehlermodell

Fehler beim Senden / Übertragen / Empfangen - Klassifikation von Fehlermöglichkeiten; Abstrak- tion von den konkreten, spezifischen Ursachen

P1 P2 P3

(12)

Mitteilung vs. Auftrag

Mitteilungsortientiert:

- Unidirektional

- Übermittelte Werte werden der Nachricht typw.

als “Ausgabeparameter” beim send übergeben

send(...)

Auftragsortientiert:

send(...)

- Bidirektional

- Ergebnis eines Auftrags wird als “Antwortnachricht”

zurückgeschickt

Client Server

Zeit

request reply

receive(...)

receive(...) send(...) ...

...

evtl. zu einem einzigen Befehl zusammenfassen

request

reply

arbeiten warten

- Auftraggeber (“Client”) wartet bis Antwort eintrifft

Blockierendes Senden

- Blocking send: Sender ist bis zum Abschluss

der Nachrichtentransaktion blockiert

was genauist das?

Transportschicht bzw.

Kommunikationssubsystem impli-

zites ack.

(1) (2) (3) (4)

Empfangsbereitschaft signalisiert durch “receive”

send

Puffer im Betriebs- system des Senders

Puffer im Betriebs- system des Empfängers

-Zeitpunkt 4 (automatische Bestätigung, dass der Empfänger das receive ausgeführt hat) ist die höhere, anwendungsorientierte Sicht.

- Falls eine Bestätigung bereits zumZeitpunkt 2 geschickt wird, weiss der Sender nur, dass die Nachricht am Zielort zur Verfügung steht und der Sendepuffer wieder frei ist. Vorher sollte der Sendepuffer nicht überschrieben werden, weil die Nachricht bei

- Verschiedene Ansichten der “korrekten” Definition

Sender blockiert

von “Abschluss der Transaktion” aus Sendersicht:

syn

Sender- seite

Empfangs- seite

fehlerhafter Übertragung evtl. wiederholt werden muss.

- Sender hat so eineGarantie (Nachricht wurde zugestellt / empfangen)

(13)

“Receiver first”

“Sender first”

Synchrone Kommunikation

“gleich” “zeitig”

t

- Idealisierung: Send und receive geschehen gleichzeitig - Wodurch ist diese Idealisierung gerechtfertigt?

(Kann man auch mit einer Marssonde synchron kommunizieren?)

Implementierung mit

?

!

msg ack

Zeit

Empfänger eingefroren x

y

beide gleichzeitig eingefroren

?

!

Idealisierung:

senkrechte Pfeile in den Zeitdiagrammen

t t

?

!

msg ack

Zeit beide gleichzeitig eingefroren t

?

!

msg ack

Zeit

Nachricht wartet

(a)

(b)

Als wäre die Nachricht zum Zeitpunkt t gleichzei- tig gesendet (“!”) und empfangen (“?”) worden!

Zeit des Senders steht still

es gibt einen

gemeinsamen Zeitpunkt t, - Bem.: “Receive” ist i.Allg. blockierend (d.h. Empfänger

wartet so lange, bis eine Nachricht ankommt)

wo die beiden Kommuni- kationspartner sich treffen.

“Rendezvous”

blocking send:

entspricht:

- Ein Ablauf, der synchrone Kommunikation benutzt, ist (bei Abstraktion von der Realzeit) durch ein

äquivalentes Zeitdiagramm darstellbar, bei dem alle Nachrichtenpfeile senkrecht verlaufen

Virtuelle Gleichzeitigkeit

- Folgendes geht nicht virtuell gleichzeitig (wieso?)

- nur stetige Deformation (“Gummiband-Transformation”)

- aber was geschieht denn, wenn man mit synchronen Kommuni- kationskonstrukten so programmiert, dass dies provoziert wird?

Synchronous, Asynchronous and Causally Ordered Communication.

Distributed Computing, Vol. 9 No. 4 (173-191), www.vs.inf.ethz.ch/publ/

Mehr dazu nur für besonders Interessierte: Charron-Bost, Mattern, Tel:

A B

A

B

C

(14)

P1

Deadlocks bei synchroner

P1:

Kommunikation

send (...) to P2;

receive...

...

P2:

send (...) to P1;

receive...

...

In beiden Prozessen muss zunächst dassend ganz ausgeführt werden, bevor es zu einemreceive kommt P1

P2

Kommunikationsdeadlock!

P1 P2

Zyklische Abhängigkeit der tet auf P2, und P2 wartet auf P1

“Wait-for-Graph”

Genauso tödlich:

P1:

send (...) to P1;

receive...

...

Prozesse voneinander: P1 war-

Gleichnishaft entspricht der syn. Kommunikation das Telefonieren, der asy.

Komm. der Briefwechsel

Asynchrone Kommunikation

- No-wait send: Sender ist nur (kurz) bis zur lokalen Ab- lieferung der Nachricht an das Transportsystem blockiert - Jedoch i.Allg. länger blockiert, falls das System

z.Z. keinen Pufferplatz für die Nachricht frei hat

- Vorteile:

noch während die Nachricht übertragen wird

→ Höherer Grad an Parallelität möglich

→ Stärkere Entkoppelung von Sender / Empfänger

→ Sender weiss nicht, ob / wann Nachricht angekommen

→ System muss Puffer verwalten

Puffer send(...)

Puffer receive(...)

Kommuni-

→ Sendender Prozess kann weiterarbeiten,

- Nachteile:

(Alternative: Sendenden Prozess nicht blockieren, aber mittels “return value” über Misserfolg des send informieren)

→ Geringere Gefahr von Kommunikationsdeadlocks

(diese kurzzeitigen Blockaden sollten für die Anwendung transparent sein)

kationsnetz

(im Vgl. zur synchronen Kommunikation aufwendiger zu realisieren) (im Vgl. zur syn. Kommunikation oft angenehmer in der Anwendung)

→ Debugging der Anwendung oft schwierig

(wieso?)

(15)

Sendeoperationen in der Praxis

- Es gibt Kommunikationsbibliotheken, deren Dienste von verschiedenen Programmiersprachen (z.B. C) aus aufgerufen werden können

- z.B. MPI (Message Passing Interface) Quasi-Standard; verfüg- bar auf vielen vernetzten Systemen / Compute-Clustern

- Typischer Aufruf einer solchen Send-Operation:

status = send(buffer, size, dest, ...)

Zieladresse Anzahl der zu ver- sendenden Bytes Adresse des Puffers, in dem die zu verschickende Nachricht steht z.B. <0: Fehler;

>0: Anzahl der tatsächlich ge- sendeten Bytes

- Derartige Systeme bieten i.Allg. mehrere verschiedene Typen von Send-Operation an

- Zweck: Hohe Effizienz durch möglichst spezifische Operationen - Achtung: Spezifische Operation kann in anderen Situationen u.U. eine falsche oder unbeabsichtigte Wirkung haben (z.B. wenn - Problem: Semantik und Kontext der Anwendbarkeit ist oft nur informell beschrieben

vorausgesetzt wird, dass der Empfänger schon im receive wartet)

Synchron

- Kommunikationsbibliotheken machen oft einen Unter-

- bzw. analog zwischen asynchron und nicht-blockierend

schied zwischen synchronem und blockierendem Senden

- leider etwas verwirrend!

- Blockierung ist dann ein rein senderseitiger Aspekt

- Synchron / asynchron nimmt Bezug auf den Empfänger

-blockierend: Sender wartet, bis die Nachricht vom Kommunika-

? blockierend

=

tionssystem abgenommen wurde (und der Puffer wieder frei ist) -nicht blockierend: Sender informiert Kommunikationssystem lediglich, wo bzw. dass es eine zu versendende Nachricht gibt

-synchron: Nach Ende der Send-Operation wurde die Nachricht dem Empfänger zugestellt (asynchron: dies ist nicht garantiert)

- Nicht-blockierende Operationen liefern oft einen “handle”

(Gefahr des Überschreibens des Puffers!)

- dieser kann in Test- bzw. Warteoperationen verwendet werden - z.B. Test, ob Send-Operation beendet: msgdone(handle)

- z.B. warten auf Beendigung der Send-Operation: msgwait(handle)

- Nicht-blockierend ist effizienter aber u.U. unsicherer und umständlicher (evtl. Test; warten) als blockierend

handle = send(...)

(16)

Dualität der Kommunikationsmodelle

Synchrone Kommunikation lässt sich mit asynchroner Kommunikation nachbilden:

send m

receive m send ack

receive ack

send m;

receive ack;

receive m;

send ack;

Sender Empfänger

- Warten auf explizites Acknowledgment im Sender di- rekt nach dem send

- Explizites Versenden des Acknowledgments durch den Empfänger direkt nach dem receive

Sender blockiert

. . . . . .

. . . . . .

(receive wird als blockierend vorausgesetzt)

Idee: Zusätzlichen Prozess vorsehen, der für die Zwischenpufferung aller Nachrichten sorgt

Puffer → Entkoppelung von

Dazwischengeschalteter Prozess mit vielen Pufferplätzen

Sender und Empfänger

S E

Asynchrone Kommunikation mittels synchroner:

Puffer als Multithread-Objekt

Empfangs- thread

Sende- thread

put get receive

send

- Empfangsthread ist (fast) immer empfangsbereit

- nur kurzzeitig anderweitig beschäftigt (put in lokalen Pufferspeicher) (aber evtl. nicht empfangsbereit, wenn lokaler Pufferspeicher voll)

- Pufferspeicher (FIFO) wird i.Allg. zyklisch verwaltet

Pufferspeicher

- Pufferspeicher liegt im gemeinsamen Adressraum

Synchronisation der beiden Threads notwendig!

- z.B. Semaphore etc.

→ “konkurrentes Programmieren”

→ klassische Themen der Betriebssystem-Theorie!

- Sendethread ist (fast) immer sendebereit

Beachte: Threads (Leichtge-

S

E

wichtsprozesse) greifen auf gemeinsamen Speicherzu

(17)

Klassifikation von

Kommunikationsmechanismen

no-wait send (Datagramm)

“asynchroner RPC”

Rendezvous

Remote Procedure Call (RPC)

asynchron synchron Mitteilung

Auftrag

Synchronisationsgrad

Kommunika- tionsmuster

- Hiervon gibt es diverse Varianten

- Weitere Klassifikation nach Adressierungsart möglich (Prozess, Port, Mailbox, Broadcast...)

“orthogonal”

- bei verteilten objektorientierten Systemen z.B.

“Remote Method Invocation” (RMI) statt RPC

- Häufigste Kombination: Mitteilung asynchron, Auftrag hingegen synchron

Datagramm

- Vorteile

send

receive

Datagramm

- Asynchron-mitteilungsorientierte Kommunikation

- weitgehende zeitliche Entkopplung von Sender und Empfänger - einfache, effiziente Implementierung (bei kurzen Nachrichten)

- Nachteil

- keine Erfolgsgarantie für den Sender

- Notwendigkeit der Zwischenpufferung (Kopieraufwand, Speicher- verwaltung …) im Unterschied etwa zur synchronen Kommunikation - „Überrennen“ des Empfängers bei langen/ häufigen Nachrichten

→ Flusssteuerung notwendig

(18)

Transport- schicht

Rendezvous-Protokolle

receive send

NACK ACK

Wieder- holung Sender

Empfänger

- Hier “Sender-first-Szenario”:

- “Receiver-first-Szenario” analog

- Rendezvous: Der erste wartet auf den

- Mit NACK / ACK sind weniger Puffer nötig

- Alternative 1: Statt NACK: Nachricht auf Empfängerseite puffern - Alternative 2: Statt laufendem Wiederholungsversuch: Empfänger-

instanz meldet sich bei Senderinstanz, sobald Empfänger bereit

anderen... (“Synchronisationspunkt”)

- Insbes. bei langen Nachrichten:

Vorherige Anfrage, ob bei der Empfängerinstanz genügend Pufferplatz vorhanden ist, bzw. ob

Empfänger bereits Synchronisationspunkt erreicht hat

→ Aber aufwändiges Protokoll! (“busy waiting”) Sender wartet zuerst

Zeitpunkt, wo Sender und Empfänger “gleichzeitig”

miteinander kommunizieren

- Synchron-mitteilungsorientierte Kommunikation

Senderinstanz

Empfängerinstanz

Remote Procedure Call (RPC)

call X(out: ...,... ; in: ...,...)

remote procedure X(...,... )

begin

end

return(...,...) -- out-Parameter setzen

-- zurückgelieferte in- Parameter verwenden

zurückzuliefern- de Werte nennen

Rechner A (Client)

Rechner B (Server)

Kom2 RPC

- Synchron-auftragsorientiertiertes Prinzip:

- Soll dem klassischen Prozeduraufruf möglichst gleichen

- klare Semantik für den Anwender (Auftrag als „Unterprogramm“) - einfaches Programmieren

- Typsicherheit (Datentypüberprüfung auf Client- und Serverseite möglich)

- Implementierungsproblem: Verteilungstransparenz

- Verteiltheit so gut wie möglich verbergen

- “Entfernter Prozeduraufruf”

- kein Erstellen von Nachrichten, kein Quittieren,... auf Anwendungsebene - Syntax analog zu bekanntem lokalen Prozeduraufruf

- Verwendung von lokalen / entfernten Prozeduren “identisch”

(19)

call

accept return reply

receive reply Client blockiert

Server bearbei- tet Prozedur Client

Server

- call; accept; return; receive: interne Anweisungen - Parameterübergabe: call-by-value/result

- Keine Parallelität zwischen Client und Server

→ send → receive

reply request

RPC: Prinzipien

- RPC-Aufrufe sind blockierend

- nicht sichtbar auf Sprachebene→ Compiler bzw. realisiert im API

RPC: Implementierung

Entf. Proze- duraufruf Ergebnis-

rückgabe

Marshalling Auspacken

der Ergeb- nisse

Senden der Request- Nachricht Empfangen

der Reply- Nachricht

Ergebnis- rückgabe lok. Proze-

duraufruf

Marshal- Auspacken

der Argu-

mente ling

Senden der Reply- Nachricht Empfangen

der Request- Nachricht Transport-

system Stubs

Client Server

Request

Reply Kontrolle

A E

local call local

call

“Kommunikation mit Proxies” (Bild aus dem Buch: “Java ist auch eine Insel”)

(20)

RPC: Stubs

- Lokale Stellvertreter (“proxy”) des entfernten Gegenübers

- simulieren einen lokalen Aufruf

- sorgen für Packen und Entpacken von Nachrichten

- konvertieren Datenrepräsentationen bei heterogenen Umgebungen - steuern das Übertragungsprotokoll (z.B. zur fehlerfreien Übertragung) - bestimmen evtl. Zuordnung zwischen Client und Server („Binding“)

- Können oft weitgehend automatisch generiert werden

- nutzen Hilfsroutinen aus Bibliotheken für Formatkonversion usw.

call S.X(out: a ; in: b);

xxx ; xxx ;

Ersetzt durch ein längeres Pro- grammstück (Client-Stub), welches u.a.

- Parameter a in eine Nachricht packt - Nachricht an Server S versendet - Timeout für die Antwort setzt - Antwort entgegennimmt (oder evtl. exception bei timeout auslöst) - Ergebnisparameter b mit den Werten der Antwortnachricht setzt

Client:

- Stubs sorgen also für Transparenz

- nutzen Routinen einerRPC-Laufzeitumgebung (z.B. zur Kommuni- wird nicht generiert, sondern dazugebunden kationssteuerung, Fehlerbehandlung etc.)

- Client-Stub bzw. Server-Stub

- Stub = Stummel, Stumpf

- z.B. mit einem “RPC-Compiler” aus dem Client- oder Server-Code und evtl. einer Schnittstellenbeschreibung (z.B. formuliert in IDL = “Interface Description Language”)

RPC: Marshalling

Marshalling: Zusammenstellen der Nachricht aus den aktuellen Prozedurparametern

- Problem: RPCs werden oft in heterogenen Umgebungen eingesetzt mit unterschiedlicher Repräsentation z.B. von

- Strings (Längenfeld↔ ‘\0’) - Arrays (zeilen-↔ spaltenweise)

- niedrigstes Bit einer Zahl vorne oder hinten - Character (ASCII↔ Unicode)

- evtl. dabei geeignete Codierung (komplexer) Datenstrukturen

- umgekehrte Tranformation auch als “unmarshalling” bezeichnet - Glätten (“flattening”) komplexer (evtl. verzeigerter) Datenstrukturen zu einer Sequenz von Basistypen (evtl. mit Strukturinformation)

- Problem: Parameter aus komplexen Datentypen wie

- Records, Strukturen - Objekte

- Referenzen, Zeiger - Zeigergeflechte

- sollen Adressen über Rechner- / Adressraumgrenzen erlaubt sein?

- sollen Referenzen symbolisch, relativ...

interpretiert werden? Ist das stets möglich?

- wie wird Typkompatibilität sichergestellt?

(21)

lokale Repräsen-

tation→ XDR XDR→ lokale

Repräsentation

System 1 System 2

- Beachte: Jeweilszwei Konvertierungen erforderlich; für jeden Datentyp jeweils Kodierungs- und Dekodierungsroutinen vorsehen

XDR

1) Umwandlung in eine gemeinsame Standardrepräsentation

- z.B. “XDR” (eXternal Data Representation)

2) Oder lokale Datenrepräsentation verwenden und

- “receiver makes it right”

- Vorteil: bei gleichen Systemumgebungen / Computertypen ist keine (doppelte) Umwandlung nötig

dies in der Nachricht vermerken

- Empfänger muss aber mit der Senderrepräsentation umgehen können

RPC: Datenkonversion

Datenkonversion überflüssig, wenn sich alle Kommuni- kationspartner an einen gemeinsamen Standard halten

RPC: Transparenzproblematik

- RPCs sollten so weit wie möglich lokalen Prozeduraufrufen gleichen, es gibt aber einige subtile Unterschiede

bekanntes Programmier- paradigma!

- Leistungstransparenz?

- RPC i.Allg. wesentlich langsamer

- Bandbreite ist bei umfangreichen Datenmengen relevant - ungewisse, variable Verzögerungen

- Ortstransparenz?

- evtl. muss Server (“Zielort”) bei Adressierung explizit genannt werden - erkennbare Trennung der Adressräume von Client und Server

- i.Allg. keine Pointer/Referenzparameter als Parameter möglich - keine Kommunikation über globale Variablen möglich

- Fehlertransparenz?

- es gibt mehr Fehlerfälle (beim klassischen Prozeduraufruf gilt:

Client = Server→ “alles oder nix”)

- partielle (“einseitige”) Systemausfälle: Server-Absturz, Client-Absturz - Nachrichtenverlust (ununterscheidbar von zu langsamer Nachricht!) - ein Crash kann im “ungünstigen Moment” der Transaktion erfolgen - Client / Server haben zumindest zwischenzeitlich eine unterschiedliche Sicht des Zustandes einer “RPC-Transaktion”

⇒ Fehlerproblematik ist also “kompliziert”!

- Client- / Serverprozesse haben evtl. unterschiedliche Lebenszyklen: Server könnte noch nicht oder nicht mehr oder in einer “falschen” Version existieren

(22)

Typische Fehlerursachen bei RPC:

- Gegenmassnahme:

- Doppelte Request-Nachricht!

I. Verlorene Request-Nachricht

- Nach Timeout (kein Reply) die Request-

- Wieviele Wiederholungsversuche maximal?

- Probleme:

- Wie gross soll der Timeout sein?

- Falls die Request-Nachricht gar nicht verloren war, sondern Nachricht oder Server untypisch langsam:

(Gefährlich bei nicht-idempotenten Operationen!)

- Server sollte solche Duplikate erkennen. (Wie? Benötigt er dafür einen Zustand? Genügt es, wenn der Client Duplikate als solche kennzeichnet? Genügen Sequenznummern? Zeitmarken?) - Würde das Quittieren der Request-Nachricht etwas bringen?

Nachricht erneut senden

request request ...?

timeout- Intervall

?

Client

1 2

4 3

?

- Gegenmassnahme 1: analog zu verlorener Request-Nachricht

II. Verlorene Reply-Nachricht

- Probleme:

- Vielleicht ging aber tatsächlich der Request verloren?

- Oder der Server war nur langsam und arbeitet noch?

- Gegenmassnahme 2:

- Server hält eine “Historie” versendeter Replies

- Falls Server Request-Duplikate erkennt und den Auftrag bereits ausgeführt hat: letztes Reply erneut senden, ohne die Prozedur nochmal auszuführen

- Pro Client muss nur das neueste Reply gespeichert werden - Bei vielen Clients u.U. dennoch Speicherprobleme:

→ Historie nach “einiger” Zeit löschen

(Ist in diesem Zusammenhang ein ack eines Reply sinnvoll?) Und wenn man ein gelöschtes Reply später dennoch braucht?

reply timeout

Client

Server

!

- Ist aus Sicht des Clients nicht unterscheidbar!

- Also: Anfrage nach Ablauf des Timeouts wiederholen

(23)

Probleme:

III. Server-Crash

- Sinn und Erfolg konkreter Gegenmassnahmen hängt u.U. davon ab Client

Server

crash!

kein reply

Client Server

crash!

kein reply Ausführung

der Prozedur

(keine oder nur teilweise Ausführung der Prozedur)

- Wie soll der Client obige Fälle unterscheiden?

timeout

timeout request

request

(Ausführung der Prozedur, aber kei- ne Rückmeldung)

- Clientmeint u.U. zu Unrecht, dass ein Auftrag nicht ausgeführt wurde (→ falsche Sicht des Zustandes!)

- Evtl. Probleme nach einem Server-Restart

- z.B. “Locks”, die noch bestehen (Gegenmassnahmen?) bzw.

- ebenso: Unterschied zu verlorenem request bzw. reply?

allgemein: “verschmutzer” Zustand durch frühere Inkarnation - typischerweise ungenügend Information (“Server Amnesie”), um in alte Kommunikationszustände problemlos wieder einzusteigen

Referenzen

ÄHNLICHE DOKUMENTE

1 festangestellter Mitarbeiter mit Zertifizierung vom angebotenen Hersteller für die Programmierung von Steuerungszentralen Hinweis: Den Nachweis über die Einrichtung

Für die Durchführung der verkehrspädagogischen Teilmaßnahme des Fahreignungsseminars nach § 4a StVG ist künftig eine Seminarerlaubnis Verkehrspädagogik nach § 31a

Um die Auswertung einzuleiten, werden die beiden Bildbeispiele miteinander verglichen und geschaut, ob entscheidende Bildelemente fehlen oder hinzugekommen sind (gibt es eine

1 SGB IX (Schulbegleitungen), Personen nach § 13 a des Achten Buchs des Sozialgesetzbuchs (SGB VIII) (Schulsozialarbeiter), Freiwilligen- dienstleistende, im Rahmen

Beim Schulsport innerhalb (und außerhalb) von Gebäuden besteht ebenfalls keine Pflicht zum Tragen der Mund-Nasen-Bedeckung. f) Kurzeitige Abnahme aus pädagogischen Gründen:

− Kinder &lt;15 Jahre haben in der Regel zwei Tage Unterricht in der TimeOut-Schule in Mün-chenstein und verbringen drei Tage in einer sozialpädagogischen oder agogischen

Gespräch mit allen Beteiligten (Schülerin/Schüler, Erziehungsberechtigte, Schulleitung, eventuell Klassen- und/oder Fachlehrperson, eventuell Schulso- zialarbeiterIn) mit Klärung

[r]