Mit Virtuellen Maschinen
Prof. Dr. Stefan Bosse
Universität Koblenz - FB Informatik - FG Praktische Informatik
Stefan Bosse - VPP - Modul E 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
Stefan Bosse - VPP - Modul E Verteilte Programmierung (Web) :: Verteilte Systeme
Parallele Systeme sind eng gekoppelt. Kommunikation zwischen Prozessen nutzt:
Verteilte Systeme sind lose gekoppelt und können für die Synchronisation nicht auf das Betriebssystem und die technischen Eigenschaften des Hostrechners zurückgreifen!
Stefan Bosse - VPP - Modul E Verteilte Programmierung (Web) :: 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!
Stefan Bosse - VPP - Modul E Verteilte Programmierung (Web) :: 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
Stefan Bosse - VPP - Modul E Verteilte Programmierung (Web) :: 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)
Stefan Bosse - VPP - Modul E Verteilte Programmierung (Web) :: 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) └────────┘ Stefan Bosse - VPP - Modul E Verteilte Programmierung (Web) :: Sockets
Server
local chaneServer = luv.net.tcp()chanServer:bind(host, port)function on_conncetion(chanClient) -- handle client request data1=client:read() client:write(data2)endchanServer: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
Stefan Bosse - VPP - Modul E Verteilte Programmierung (Web) :: TCP versa UDP
https://www.csestack.org/difference-connection-oriented-connectionless-services-protocol/
Stefan Bosse - VPP - Modul E Verteilte Programmierung (Web) :: 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 |
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
Stefan Bosse - VPP - Modul E Verteilte Programmierung (Web) :: 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)
Stefan Bosse - VPP - Modul E Verteilte Programmierung (Web) :: Web Sockets
www.pubnub.com
Aufbau eines Web Sockets über eine HTTP(S) Verbindung
Stefan Bosse - VPP - Modul E Verteilte Programmierung (Web) :: Channels
Ein Kommunikationskanal zwischen zwei Prozessen kann
Ein Kommunikationskanal basiert auf einer FIFO Warteschlange (Queue)
Stefan Bosse - VPP - Modul E Verteilte Programmierung (Web) :: Channels
Stefan Bosse - VPP - Modul E Verteilte Programmierung (Web) :: 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
Stefan Bosse - VPP - Modul E Verteilte Programmierung (Web) :: 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".
Stefan Bosse - VPP - Modul E Verteilte Programmierung (Web) :: Ö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:
Problem: Kommunikation nach außen erfordert Network Address Translation (NAT)
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)
Stefan Bosse - VPP - Modul E Verteilte Programmierung (Web) :: 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:
Auch durch NAT werden aber Ports in virtuellen Netzwerken öffentlich nicht sichtbar.
Stefan Bosse - VPP - Modul E Verteilte Programmierung (Web) :: Network Address Translation
bford.info/pub/net/p2pnat
Kanalkommunikation zwischen zwei (entfernten) Prozessen via NAT
Stefan Bosse - VPP - Modul E Verteilte Programmierung (Web) :: NAT Durchdringung
Wie können Prozesse über NAT kommunizieren?
Peer-to-Peer Communication Across Network Address Translators, Bryan Ford, Pyda Srisuresh
Relais
Verbindungsumkehr