Verteilte und Parallele Programmierung

Mit Virtuellen Maschinen

Prof. Dr. Stefan Bosse

Universität Koblenz - FB Informatik - FG Praktische Informatik

1 / 42

Stefan Bosse - VPP - Modul E Verteilte Programmierung (Web) ::

Verteilte Programmierung (Web)

Wie können Web Browser für die verteilte Datenverarbeitung genutzt werden?

Zentrales Thema Kommunikation: Wie können Web Browser (und Web Seiten) vernetzt werden?

Prozesskommunikation mit Channels über Web Sockets und Web Real-time Communication

Gruppenkommunikation

2 / 42

Stefan Bosse - VPP - Modul E Verteilte Programmierung (Web) :: Verteilte Systeme

Verteilte Systeme

  • Parallele Systeme sind eng gekoppelt. Kommunikation zwischen Prozessen nutzt:

    • Physisch geteilten Speicher (Unsynchronisierter Datenaustausch);
    • Semaphoren (Synchronisation, Kooperation, Schutz), häufig durch Betriebssystem implementiert;
    • Datenkanäle (Channels, Synchronisierter Datenaustausch).
  • Verteilte Systeme sind lose gekoppelt und können für die Synchronisation nicht auf das Betriebssystem und die technischen Eigenschaften des Hostrechners zurückgreifen!

    • Aber Channels können auch zwischen getrennten Rechnern mit Nachrichtenkommunikation implementiert werden!
    • Channels können dann genutzt werden um andere Synchronisationsobjekte (z.B. Semopahoren) zu implementieren
3 / 42

Stefan Bosse - VPP - Modul E Verteilte Programmierung (Web) :: Verteilte Systeme

Verteilte Systeme

Parallele Systeme sind i.A. synchrone Prozesssysteme

Verteilte Systeme sind inhärent asynchron und können nicht grundsätzlich und zuverlässig synchronisiert werden!

  • Kommunikation mit Nachrichten erfordert ein Kommunikationsprotokoll (siehe ISO Netzwerkschichten)
    • HTTP/HTTPS (Hyper Text Transfer Protocol + Secure, temporär verbindungsorientiert) →
    • TCP (Transmission Control Protocol, verbindungsorientiert, zuverlässig) |
    • UDP (User Datagram Protocol, verbindungslos, nicht zuverläassig)
    • Web Sockets (aufbauend auf HTTP/HTTPS/TCP)
4 / 42

Stefan Bosse - VPP - Modul E Verteilte Programmierung (Web) :: Verteilte Systeme

Verteilte Systeme

  • Parallele Systeme arbeiten häufig nach dem Prinzip der Produzenten-Konsumenten Interaktion und Partitionierung

  • Es gibt häufig einen ausgewiesenen Master und eine Vielzahl von Worker Prozessen

  • In verteilten Systemen gibt es häufig ein Leader Prozess (der selbst aber auch Worker sein kann)

  • Leader und Worker bilden eine (temporäre) Gruppe

    • Der Leader kann von vornherein fest stehen oder von der Gruppe gewählt werden → Leader Election Algorithmen
    • Der Leader vermittelt Worker und Kommunikation
    • Kommunikation kann zwischen Worker und Leader und zwischen Workern stattfinden
    • Gruppenkommunikation (Broad- und Multicast)
5 / 42

Stefan Bosse - VPP - Modul E Verteilte Programmierung (Web) :: Verteilte Systeme

Verteilte Systeme

┌────────┐ ┌────────┐
│ P1 │ │ P2 │
│ Worker │ ◀──────▶ │ Worker │
└────────┘ └────────┘
▲ ▲ ▲
│ │ ┌───────┐ │
│ └─▶ │ P5 │ ◀────┘
│ ┌─▶ │ Master│ ◀────┐
│ │ └───────┘ │
▼ ▼ ▼
┌────────┐ ┌────────┐
│ P3 │ │ P4 │
│ Worker │ ◀──────▶ │ Worker │
└────────┘ └────────┘

Verteiltes Prozesssystem mit Leader(Master) und Workern und Kommunikationskanälen (1:1 oder 1:N)

6 / 42

Stefan Bosse - VPP - Modul E Verteilte Programmierung (Web) :: Sockets

Sockets

  • Ein Socket ist sowohl ein Kommunikationsendpunkt (zum Empfang von Nachrichten) als auch ein Sender von Nachrichten

  • Sockets (die i.A. zu Prozessen gehören) können miteinander verbunden werden (verbindungsorientierte Kommunikation mit Sessions) oder verbindungslos Datenpakete sich gegenseitig zusenden

  • Ein Socket wird durch eine lokale oder netzwerkweite Identifikation (Pfad, Nummer, Nummer und Netzwerkadresse des Gerätes, Namen usw.) erreicht

<ip:port> <ip:port>
┌────────┐ data msg ┌────────┐
│ Socket ├──────────────────────▶│ Socket │
└────────┘ send(data) └────────┘
7 / 42

Stefan Bosse - VPP - Modul E Verteilte Programmierung (Web) :: Sockets

Beispiel: TCP Socket in Lua/LVM

Server

local chaneServer = luv.net.tcp()
chanServer:bind(host, port)
function on_conncetion(chanClient)
-- handle client request
data1=client:read()
client:write(data2)
end
chanServer:listen(128, function(err)
-- Accept the client
local chanClient = luv.net.tcp()
server:accept(chanClient)
on_connection(chanClient)
end)

Klient

local chanClient = luv.net.tcp()
chanClient:connect(host, port,
function (err)
-- check error and carry on.
chanClient:write(data1)
data2=chanClient:read()
end)

Lua Socket mit bidirektionaler TCP Kanalverbindung

8 / 42

Stefan Bosse - VPP - Modul E Verteilte Programmierung (Web) :: TCP versa UDP

TCP versa UDP

TCP
Transmission Control Protocol → verbindungsbasiertes Protokoll
UDP
User Datagram Protocol → verbindungsloses Protokoll

https://www.csestack.org/difference-connection-oriented-connectionless-services-protocol/

9 / 42

Stefan Bosse - VPP - Modul E Verteilte Programmierung (Web) :: TCP versa UDP

TCP versa UDP

Faktor TCP UDP
Verbindungstyp Erfordert eine bestehende Verbindung, bevor Daten übertragen werden; Nur Unicast Zum Starten und Beenden einer Datenübertragung ist keine Verbindung erforderlich. Uni-, Multi- und Braoidcast Adressierung möglich
Adressierungstyp Nur Unicast Uni-, Multi- und Broadcast Adressierung möglich
Reihenfolge der Daten Kann Daten sequenzieren (in einer bestimmten Reihenfolge senden) Keine Reihenfolge oder Anordnung der Daten möglich
Neuübertragung von Daten Kann Daten erneut übermitteln, falls Pakete nicht ankommen Keine erneute Datenübermittlung. Verlorene Daten können nicht wiederhergestellt werden
Zuverlässigkeit Die Zustellung ist garantiert Die Zustellung ist nicht garantiert
Fehlerprüfung Gründliche Fehlerkontrolle garantiert, dass die Daten in ihrem vorgesehenen Zustand ankommen Die minimale Fehlerprüfung deckt die Grundlagen ab, kann aber nicht alle Fehler verhindern
Nachrichtengröße Theoretisch unbegrenzt Auf Datenpaketgröße begrent (z.B. 4kB)
Datenfragmentierung Automatisch Manuell
Geschwindigkeit Höhere Latenz, niedrigere Bandbreite Schneller, aber mit der Gefahr einer unvollständigen Datenzustellung
https://www.avast.com/de-de/c-tcp-vs-udp-difference Vergleich TCP/UDP
10 / 42

Stefan Bosse - VPP - Modul E Verteilte Programmierung (Web) :: TCP versa UDP

https://www.graffletopia.com/stencils/1560 TCP Kommunikation ist zustandsbasiert und hat ein striktes Abluafprotokoll

11 / 42

Stefan Bosse - VPP - Modul E Verteilte Programmierung (Web) :: Web Sockets

Web Sockets

  • HTTP bietet sogenannte "pull" Anfragen (GET/POST), auf die es eine Antwort gibt (response).

  • Web Sockets bieten eine Zweiwege (bidirektionale) Kommunikation zwischen ursprünglich einem Server und einem Klienten (d.h. auch die andere Seite kann direkt Daten senden)

  • Web Sockets werden über das HTTP(S) Protokoll verhandelt und eine Socket Verbindung aufgebaut

  • Auch für die bidirektionale Kommunikation zwischen Web Browsern geeignet

  • Web Sockets nutzen (zwei) TCP Verbindungen um Datenströme zu übertragen. Die Übertragung ist als zuverläassig anzusehen (anders als bei UDP)

12 / 42

Stefan Bosse - VPP - Modul E Verteilte Programmierung (Web) :: Web Sockets

Web Sockets

www.pubnub.com Aufbau eines Web Sockets über eine HTTP(S) Verbindung

13 / 42

Stefan Bosse - VPP - Modul E Verteilte Programmierung (Web) :: Channels

Channels

  • Ein Kommunikationskanal zwischen zwei Prozessen kann

    • unidirektional (ein Sender, ein Empfänger);
    • einseitig bidirektional (ein Sender und Empfänger einer Rückantwort, request-reply);
    • beidseitig bidirektional sein (zwei getrennte Sender und Empfänger).
  • Ein Kommunikationskanal basiert auf einer FIFO Warteschlange (Queue)

14 / 42

Stefan Bosse - VPP - Modul E Verteilte Programmierung (Web) :: Channels

Channels

  • Es gibt zwei wesentliche Operation auf Kanälen:
read → data
Liest ein Datenelement aus der Warteschlange; wenn die Queue leer ist blockiert die Operation
write(data)
Schreibt ein Datenelement in die Warteschlange; wenn die Qeuee "voll" ist blockiert die Operation
15 / 42

Stefan Bosse - VPP - Modul E Verteilte Programmierung (Web) :: Channels

Channels

┌───────┐ ┌───────┐
│ │ send(d) │ │
│ ├────────────────▶│ │
│ Port │ send(d) │ Port │
│ │◀────────────────┤ │
├───────┤ ├───────┤
│ Queue │ │ Queue │
└────┬──┘ └─┬─────┘
▲ │ │ ▲
│ │ │ │
write(d) ▼ read() read() ▼ write(d)
───────────────── ──────────────────
process P1 process P2

Kanalkommunikation zwischen zwei (entfernten) Prozessen via Socket Ports

16 / 42

Stefan Bosse - VPP - Modul E Verteilte Programmierung (Web) :: Netzwerkkommunikation

Netzwerkkommunikation

  • Netzwerkkommunikation findet i.A. zwischen Prozessen und nicht Geräten statt

  • Dazu werden Kommunikationsports auf einem Gerät verwendet (Sockets)

  • Ein Kommunikationsport wird in IP (Internet Protocol) Netzen durch das Tupel ⟨ipaddr,ipport⟩ referenziert

  • Genauer ist es ein Tripel ⟨ipaddr,ipport,ipproto⟩ um das Protokoll mit einzubeziehen (z.B. tcp)

  • Ein Gerät (Hostrechner) hat mindestens eine wenigstens lokal eindeutige IP(4) Adresse ip, im Format "XX:XX:XX:XX" (X: hexadezimal Ziffer), oder "DDD:DDD:DDD:DDD".

17 / 42

Stefan Bosse - VPP - Modul E Verteilte Programmierung (Web) :: Öffentliche und Private Netzwerke

Öffentliche und Private Netzwerke

  • Ein Kommunikationsport muss mit seiner Adresse ⟨ipaddr,ipport⟩ öffentlich im Internet sichtbar sein (man spricht von einem Server)

  • Aber: Schon allein aufgrund der hohen Anzahl von Geräten reicht der IP4 Adressraum nicht mehr aus, und jeder öffentlich erreichbare Rechner ist ein Angriffspunkt

  • Es werden private/virtuelle Netzwerke aufgespannt mit zwei Adressräumen:

    • Öffentlich → Das ganze virtuelle Netzwerk hat eine einzige einmalige IP4 Adresse!
    • Virtuell → Jedes Gerät hat innerhalb des Subnetzwerkes eine eindeutige nicht öffentlich sichtbare Geräteadresse
  • Problem: Kommunikation nach außen erfordert Network Address Translation (NAT)

18 / 42

Stefan Bosse - VPP - Modul E Verteilte Programmierung (Web) :: Öffentliche und Private Netzwerke

bford.info/pub/net/p2pnat Öffentliche und private Netzwerke mit unterschiedlichen Adressräumen und Adressumrechnung (NAT)

19 / 42

Stefan Bosse - VPP - Modul E Verteilte Programmierung (Web) :: Network Address Translation

Network Address Translation

  • Immer wenn eine Kommunikation zwischen zwei Kommunikationsports zweier Prozesse auf zwei Geräten in unterschiedlichen Netzwerken stattfinden soll muss an der Grenze Öffentliches Internet ↔ Virtuelles Netzwerk die private Adresse ⟨ipaddr,ipport⟩ in eine öffentliche ⟨V2P(ipaddr),V2P(ipport)⟩ umgerechnet werden

  • Man unterscheidet:

    • Symmetrisches NAT: IP Adresse ipaddr und auch die Portnummer (ipport) werden transformiert
    • Asymmetrisches NAT: Nur die IP Addresse ipaddr wird umgerechnet, die Portnummer bleibt unverändert.
  • Auch durch NAT werden aber Ports in virtuellen Netzwerken öffentlich nicht sichtbar.

    • Hier fangen jetzt die Probleme für Kanalkommunikation via UDP/TCP an!!!
20 / 42

Stefan Bosse - VPP - Modul E Verteilte Programmierung (Web) :: Network Address Translation

bford.info/pub/net/p2pnat Kanalkommunikation zwischen zwei (entfernten) Prozessen via NAT

21 / 42

Stefan Bosse - VPP - Modul E Verteilte Programmierung (Web) :: NAT Durchdringung

NAT Durchdringung

Wie können Prozesse über NAT kommunizieren?

Peer-to-Peer Communication Across Network Address Translators, Bryan Ford, Pyda Srisuresh

Relais

Verbindungsumkehr