Slides 6

Computerarchitectuur en netwerken
–6–
Gedistribueerde IPC
Lennart Herlaar
23 september 2014
Inhoud
IPC: locaal vs. gedistribueerd
Message passing
Client/server model
Remote Procedure Call
locaal vs. gedistribueerd
marshalling
Name server
Ports
IPC in het Internet
Lennart Herlaar
Computerarchitectuur en netwerken – 6
1
Gedistribueerde IPC 1
Proces A
Proces B
netwerk
Lennart Herlaar
Computerarchitectuur en netwerken – 6
2
Gedistribueerde IPC 2
virtuele
communicatie
Proces A
netwerk
software
Lennart Herlaar
Proces B
netwerk
software
Computerarchitectuur en netwerken – 6
3
Gedistribueerde IPC 3
Files slecht
Grofmazig
moeilijk te synchroniseren
Gedistribueerd misschien via een “netwerk file systeem”
Pipes nee
voornamelijk één op één
éénrichting
named pipes als geen gemeenschappelijke voorouder
Pipes zitten binnen 1 computer
Shared memory nee
semaforen o.i.d. nodig voor synchronisatie
signals/boodschappen e.d. voor seintjes
Shared memory zit in 1 computer
Message passing ja
Flexibel
Mits software dit toestaat
Lennart Herlaar
Computerarchitectuur en netwerken – 6
4
Message Passing 1
Het “message passing” model kan gemakkelijk in een
netwerk omgeving gebruikt worden.
Als het niet in het O.S. zit dan vaak via aparte laag
software (middleware)
De API bestaat uit een SEND en RECEIVE opdracht en de
nodige administratieve operaties.
Ontwerpbeslissingen:
synchroon of asynchroon: blokkeert een zendend proces tot
de boodschap aangekomen is?
één- of tweerichting: Is elke boodschap onafhankelijk of is
er een request–reply combo?
In het laatste geval: wacht de verzoeker tot het antwoord
binnen is?
Lennart Herlaar
Computerarchitectuur en netwerken – 6
5
Message Passing 2
Adressering: hoe benoemen de communicerende partners
elkaar?
Hoe vinden communicerende partners elkaar?
Zijn er timeouts en recovery bij de communicatie?
Kunnen er meer processen tegelijk betrokken zijn in één
communicatie?
Kan de ontvanger selecteren welke boodschappen wel/niet
te ontvangen?
Lennart Herlaar
Computerarchitectuur en netwerken – 6
6
Client/server model
In het client-server model worden diensten uitgevoerd door
server processen
Een client is een proces dat een dienst wil laten uitvoeren
door een server
De server processen zitten meestal op speciaal aangewezen
computers (die ook servers genoemd worden)
Clients zijn vaak op PC’s
Servers kunnen weer clients zijn van andere servers
Voorbeelden: Fileserver, HTTP-server, printserver,
database server
In microkernel O.S. worden vele O.S. taken in
serverprocessen uitgevoerd
In Unix en Windows sommige taken ook (In Unix heten ze
vaak ‘daemons’, in Windows ‘services’).
Lennart Herlaar
Computerarchitectuur en netwerken – 6
7
Client/server communicatie 1
Communicatie met message passing
client
server
SEND
request
REC
request
Wacht of doe
iets anders
REC
reply
Lennart Herlaar
Verwerk request
SEND
reply
Computerarchitectuur en netwerken – 6
8
Inhoud
IPC: locaal vs. gedistribueerd
Message passing
Client/server model
Remote Procedure Call
⇐=
locaal vs. gedistribueerd
marshalling
Name server
Ports
IPC in het Internet
Lennart Herlaar
Computerarchitectuur en netwerken – 6
9
RPC 1
RPC (Remote Procedure Call) = manier van InterProces
Communicatie, waarbij de vorm van een
procedure/functie/methode-aanroep gebruikt wordt.
De implementatie ervan kan d.m.v. messages e.d.
plaatsvinden.
De aanroeper en de aangeroepen functie kunnen in
verschillende processen draaien, en op verschillende
computers.
Voordeel is dat het procedure (methode)-aanroep idee
beter bekend is bij programmeurs dan message passing.
Lennart Herlaar
Computerarchitectuur en netwerken – 6
10
RPC 2
Communicatie met RPC
client
server
REC
request
REQUEST
SERVICE
(parameters)
SEND
reply
Lennart Herlaar
Computerarchitectuur en netwerken – 6
Of
hier
als
methode
geschreven
11
RPC 3
Programma’s lopen dan als gedistribueerde sequentiële
processen.
De opdrachten worden sequentiëel uitgevoerd
maar verspreid over verschillende computers
Onder water worden nog acknowledge berichten verstuurd:
Alleen aan het eind (RRA – Request-Reply-Acknowledge)
Zowel na de request als na de reply (RARA –
Request-Acknowledge-Reply-Acknowledge)
Lennart Herlaar
Computerarchitectuur en netwerken – 6
12
RPC 4
De object-georienteerde vorm wordt ook wel Remote
Method Invocation (RMI) genoemd.
Voorbeelden:
de Distributed Computing Environment van de Open
Software Foundation (OSF DCE) is op RPC gebaseerd
(niet objectgeörienteerd)
Microsoft Windows COM is op OSF DCE gebaseerd maar
is wel objectgeörienteerd. Tegenwoordig .NET remoting.
Java heeft RMI ingebouwd.
Corba is een taal-onafhankelijk, O.S.-onafhankelijk,
leverancier-onafhankelijk objectgeörienteerd systeem voor
RPC (dus eigenlijk RMI).
SOAP is een RPC systeem gebaseerd op XML (niet
objectgeörienteerd).
Lennart Herlaar
Computerarchitectuur en netwerken – 6
13
Verschillen gedistribueerd/locaal
Onafhankelijke crashes Bij RPC kan de aanroeper of de
aangeroepene crashen terwijl de ander doorgaat –
Bij locale aanroep crasht het hele proces. Wat
moet de ander doen?
Geen gemeenschappelijke tijd Verschillende computers kunnen
niet exact dezelfde tijd bijhouden. Algoritmes die
van de tijd afhangen kunnen dus anders lopen op
een gedistribueerd systeem. Tijd in een
gedistribueerd proces heeft een partiële ordening.
Lennart Herlaar
Computerarchitectuur en netwerken – 6
14
Partiële ordening tijd
A
D
SEND
RECEIVE
B
E
SEND
RECEIVE
F
C
Weet je of B eerder of later is dan E?
Lennart Herlaar
Computerarchitectuur en netwerken – 6
15
Verschillen gedistribueerd/locaal
Toegang tot variabelen In een RPC heeft de functie die
aangeroepen wordt niet noodzakelijk toegang tot
alle variabelen.
Geen gemeenschappelijke toestand De toestand van een
gedistribueerd proces is verdeeld over verschillende
locaties. Het is lastig om een consistent overzicht
van de hele toestand bij de hand te hebben.
Hiervoor zijn zogenaamde snapshot algoritmes
ontwikkeld.
Scheduling Aanroeper en aangeroepene worden afzonderlijk
gescheduled. Deadlock kan het gevolg zijn.
Lennart Herlaar
Computerarchitectuur en netwerken – 6
16
Verschillen gedistribueerd/locaal
Adressering De service (aangeroepen functie) moet gevonden
worden, meestal op run-time.
Data representatie en structuren Speciale voorzieningen moeten
getroffen worden als aanroeper en aangeroepene
verschillende datarepresentaties gebruiken, en
datastructuren moeten bij elkaar geraapt worden.
Wijzigingen in aanroeper-data Een remote procedure kan niet
zomaar wijzigingen in data van de aanroeper
maken.
Lennart Herlaar
Computerarchitectuur en netwerken – 6
17
Transparante RPC
Bij transparante RPC ziet een RPC er in de aanroeper
precies hetzelfde uit als een locale aanroep.
De procedure zelf wordt ook als een normale procedure
gedeclareerd (en kan locale aanroepen aan).
Bij de aanroeper wordt een functie toegevoegd met
dezelfde naam en parameters als de aan te roepen functie
(client stub). Deze pakt de parameters op, verstuurt ze
naar de aangeroepene en geeft het resultaat terug.
Bij de aangeroepen functie wordt een server stub of
skeleton gemaakt die de parameters uit de boodschappen
haalt, de functie aanroept en het resultaat terugstuurt.
Lennart Herlaar
Computerarchitectuur en netwerken – 6
18
Transparante RPC
Parameters en resultaten moeten geschikt gemaakt worden
voor netwerkverkeer: marshalling en omgekeerd:
unmarshalling.
Voor gemarshalde gegevens moet een gemeenschappelijke
datarepresentatie gebruikt worden (Network Data
Representation).
De stubs maken gebruik van het RPC runtime systeem.
De stubs worden automatisch gegenereerd met een speciale
compiler.
De specificatie van de functie interface gebeurt vaak in een
aparte taal (IDL = Interface Definition Language)
Via een name server maakt de server bekend dat een
service beschikbaar is.
Lennart Herlaar
Computerarchitectuur en netwerken – 6
19
Stubs
server
client
u=F(x,y,z)
1
(M)
x’
2
y’
10
5
3
z’
(U)
9
6
u=F(x,y,z)
(U) 4
x’ y’
8
u’
F
u’
z’
7
(M)
client stub
server stub
O.S/netwerk
O.S/netwerk
(M) = marshall
(U) = unmarshall
Lennart Herlaar
Computerarchitectuur en netwerken – 6
20
Marshalling/unmarshalling
Simpele parameters (integer, float, char e.d.) worden naar
Network Data Representation omgezet.
Variabele parameters (arrays e.d.) moeten de grootte erbij
hebben
Pointers worden vervangen door de betreffende inhoud
Parameters kunnen twee kanten uitgaan (in en out)
out parameters moeten bij terugkeer teruggezet worden
Grote parameters kunnen beter niet in zijn geheel
meegegeven worden. Bij DCE is het mogelijk om een pipe
type te gebruiken (waarden worden op verzoek
opgestuurd).
Lennart Herlaar
Computerarchitectuur en netwerken – 6
21
Server implementatie
Een single-threaded server
kan een grote bottleneck
vormen
server
request
Tijdens wachten in de
server kunnen geen andere
cliënten bediend worden
wacht
reply
Lennart Herlaar
Computerarchitectuur en netwerken – 6
22
Server implementatie
Oplossing: multithreaded server
Hoofdthread haalt de wachtrij met verzoeken leeg
simpele verzoeken kunnen direct afgehandeld worden
langdurige verzoeken in aparte thread
Of op Unix vaak: fork() een kloon voor het uitvoeren van
het verzoek
Het originele proces leegt de wachtrij
Lennart Herlaar
Computerarchitectuur en netwerken – 6
23
Multithreaded Server
hoofd thread
thread per request
start thread
request
wacht
op
volgende
request
start thread
reply
reply
Lennart Herlaar
Computerarchitectuur en netwerken – 6
24
Adressering voor IPC
Binnen een computer kunnen proces id’s (process handles)
gebruikt worden
Op Win32: een window handle of thread handle voor
messages
Named pipes: de naam van de pipe (vgl. filenaam)
In een netwerk: netwerk adres van de computer + een van
bovenstaande
Lennart Herlaar
Computerarchitectuur en netwerken – 6
25
Adressering voor IPC
Binnen een computer kunnen proces id’s (process handles)
gebruikt worden
Op Win32: een window handle of thread handle voor
messages
Named pipes: de naam van de pipe (vgl. filenaam)
In een netwerk: netwerk adres van de computer + een van
bovenstaande
Nadelen:
Hoe vind je welk proces/window/etc. een service biedt?
Hoe vind je op welke computer het proces zit?
Lennart Herlaar
Computerarchitectuur en netwerken – 6
25
Adressering voor IPC
Binnen een computer kunnen proces id’s (process handles)
gebruikt worden
Op Win32: een window handle of thread handle voor
messages
Named pipes: de naam van de pipe (vgl. filenaam)
In een netwerk: netwerk adres van de computer + een van
bovenstaande
Nadelen:
Hoe vind je welk proces/window/etc. een service biedt?
Hoe vind je op welke computer het proces zit?
Naming service (name server)
Lennart Herlaar
Computerarchitectuur en netwerken – 6
25
Name server
name
server
2
client
1
3
server
1. server registreert zich
2. client vraagt locatie van server
3. client communiceert met server
Lennart Herlaar
Computerarchitectuur en netwerken – 6
26
Inhoud
IPC: locaal vs. gedistribueerd
Message passing
Client/server model
Remote Procedure Call
locaal vs. gedistribueerd
marshalling
Name server
Ports
⇐=
IPC in het Internet
Lennart Herlaar
Computerarchitectuur en netwerken – 6
27
Ports
Een port is een abstractie voor een adrespunt voor
communicatie
We adresseren dan niet meer een proces maar een port
Sommige systemen hebben ports per computer: een adres
bevat netwerk-adres van de computer + port-adres
Systeem-wijde ports: een port kan op elke computer zitten;
alleen het port-adres hoeft opgegeven te worden
Vergelijk huisnummers en telefoon- of banknummers
ports kunnen aan processen vastzitten, of verhuisbaar zijn
tussen processen
Een proces kan meerdere ports hebben (vgl Windows
message queues): boodschappen categoriseren
Bij een “object-georienteerd” systeem: een port per object
(vb: een port per file).
Lennart Herlaar
Computerarchitectuur en netwerken – 6
28
Port adressering 1
Hoe wordt het proces gevonden bij een port?
Bepaalde “well-known” services kunnen een vast port-adres
hebben
Een server die opstart, creërt één of meer ports, en
publiceert de port-adressen
De port-adressen kunnen in een “name-server” opgeslagen
worden (bijv. geïndiceerd met een naam). De name-server
moet een vast port-adres hebben.
Bij “port-per-object” kan bij het creëren van een object het
port-adres van het object teruggegeven worden
Bij “request-reply” moet een “antwoord-port” gemaakt
worden en meegegeven worden als “afzender”
Lennart Herlaar
Computerarchitectuur en netwerken – 6
29
Port adressering 2
Wanneer ports per computer zijn, dan heeft elke computer
zijn eigen port database.
Wanneer ports systeem-wijd zijn, dan moet een
gedistribueerde oplossing gekozen worden:
Eén centrale name-server (bottleneck)
Alle port-adressen worden naar alle computers opgestuurd
(broadcast)
Als een port-adres op een bepaalde computer onbekend is
wordt een verzoek tot localisatie verzonden op het netwerk.
De computer die de port heeft stuurt het adres terug.
Andere computers houden locaal een cache bij.
Bij verhuizen van de server blijkt het port-adres ongeldig
en wordt een nieuwe zoekactie gestart
Of er wordt een “verhuisbericht” gestuurd
Lennart Herlaar
Computerarchitectuur en netwerken – 6
30
Speciale ports
getypeerde port: de berichten hebben een vast type (à la
programmeertaal). Typecontrole mogelijk.
In dat geval moet het verzenden via een gelijkgetypeerde
send-port die precies past op de ontvang-port
globale port of mailbox: ports zijn niet aan processen
gebonden. Meerdere processen kunnen uit dezelfde port
lezen. Dit maakt gedistribueerde services mogelijk (iedere
boodschap gaat naar 1 proces).
globale port
zenders
Lennart Herlaar
ontvangers
(1 per boodschap)
Computerarchitectuur en netwerken – 6
31
Broadcast/multicast
broadcast port: Een broadcast port stuurt ontvangen
boodschappen door naar een groep van processen (of
ports).
Processen kunnen zich vaak hierop “abonneren”.
Broadcast = stuur een boodschap naar alle
computers/processen in het systeem
Multicast = stuur een boodschap naar een bepaalde groep
computers/processen
Zonder specifieke “broadcast-port” moet elke afzender het
zelf regelen
Soms is het nodig om een speciale voorziening te hebben
die zorgt dat alle aangesloten processen de boodschappen
in dezelfde volgorde ontvangen
Dan zijn er speciale “broadcast/group ports” nodig
Lennart Herlaar
Computerarchitectuur en netwerken – 6
32
Broadcast port
apart verzenden:
zender
ontvangers
via broadcast port:
broadcast port
zenders
ontvangers
(alle)
Lennart Herlaar
Computerarchitectuur en netwerken – 6
33
Inhoud
IPC: locaal vs. gedistribueerd
Message passing
Client/server model
Remote Procedure Call
locaal vs. gedistribueerd
marshalling
Name server
Ports
IPC in het Internet
Lennart Herlaar
⇐=
Computerarchitectuur en netwerken – 6
34
IPC in het Internet
Communicatie tussen processen op verschillende computers
Sockets zijn de O.S. handvaten om met andere processen
te communiceren (abstractie van netwerk)
Vergelijkbaar met pipe, maar beide uiteinden kunnen op
verschillende computers zitten
Een socket kan gelezen en geschreven worden net als een
file
Tweerichting communicatie mogelijk
Elk uiteinde van de verbinding wordt bepaald door IP-adres
en portnummer
Lennart Herlaar
Computerarchitectuur en netwerken – 6
35
Voorbeeld HTTP client
String filename, reply;
Socket sock;
sock = new Socket("www.cs.uu.nl", 80);
BufferedReader in = null;
PrintWriter out = null;
in = new BufferedReader(...sock...)
out = new PrintWriter(...sock...)
out.println("GET " + filenaam);
reply = in.readLine();
// verwerk wat er terugkomt
NB: try/catch weggelaten
Lennart Herlaar
Computerarchitectuur en netwerken – 6
36
Voorbeeld HTTP server
Stap 1: maak een ServerSocket
int portnr = 80;
ServerSocket in = null;
try
{
in = new ServerSocket(portnr);
}
catch ....
Serversocket = voor het ontvangen van verbindingsverzoeken
Socket = voor het uitwisselen van data
Lennart Herlaar
Computerarchitectuur en netwerken – 6
37
Voorbeeld HTTP server
Stap 2: accept op de ServerSocket: dit levert een Socket op
Stap 3: doe communicatie op deze Socket in een nieuwe Thread
while (true)
{
try
{
Socket s = in.accept();
// start thread
new HTTPServerThread(s).start();
}
catch ....
}
Lennart Herlaar
Computerarchitectuur en netwerken – 6
38
Server Thread
BufferedReader inp = null;
PrintWriter out = null;
inp = new BufferedReader(...socket....);
out = new PrintWriter(...socket...);
...
out.println(header);
String line = inp.readLine();
if (line.substring(0,4).equals("GET ")) {
out.println(....);
out.close();
}
Lennart Herlaar
Computerarchitectuur en netwerken – 6
39
Samenvatting
IPC in het internet gaat in grote lijnen net als binnen één
computer
Er komen extra problemen bij zoals het vinden van de
communicerende partner
Het client/server model wordt meestal gebruikt
Ports zijn een goede abstractie zodat je de processen niet
hoeft te weten
RPC en RMI zijn mooie mechanismen die gemakkelijker
zijn voor programmeurs dan message passing
In het Internet gebruiken we sockets om te communiceren
Lennart Herlaar
Computerarchitectuur en netwerken – 6
40