Computerarchitectuur en netwerken –6– Gedistribueerde IPC Lennart Herlaar
21 september 2015
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 pc’s, tablets, smartphones 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/group port: Een broadcast/group port stuurt ontvangen boodschappen door naar alle of 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/group 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