PD Stefan Bosse - VPP - Modul G: Verteilte Programmierung (WEB)

Verteilte und Parallele Programmierung

Mit Virtuellen Maschinen

PD Stefan Bosse

Universität Bremen - FB Mathematik und Informatik

1 / 32

PD Stefan Bosse - VPP - Modul G: 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 / 32

PD Stefan Bosse - VPP - Modul G: Verteilte Programmierung (WEB)

Verteilte Systeme

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

    • Physisch geteilten Speicher (Unsynchronisierter Datenauschtausch);
    • Semaphoren (Synchronisation, Kooperation, Schutz), häugfig 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 Rechner mit Nachrichtenkommunikation implementiert werden!
    • Channels können dann genutzt werden um andere Synchronisationsobjekte (z.B. Semopahoren) zu implementieren
3 / 32

PD Stefan Bosse - VPP - Modul G: Verteilte Programmierung (WEB)

Verteilte Systeme

Parallele Systeme sind i.A. synchrone Prozesssysteme

Verteilte Systeme sind inherent 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 / 32

PD Stefan Bosse - VPP - Modul G: 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

    • Der Leader kann vorherein 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 / 32

PD Stefan Bosse - VPP - Modul G: 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

6 / 32

PD Stefan Bosse - VPP - Modul G: 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) └────────┘
7 / 32

PD Stefan Bosse - VPP - Modul G: Verteilte Programmierung (WEB)

Beispiel: TCP Socket in Lua/LVM

Server

local server = luv.net.tcp()
server:bind(host, port)
function on_conncetion(chanClient)
-- handle client request
client:write(data)
end
server: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(data)
data=chanClient:read()
end)

Lua Socket mit bidirektionaler TCP Kanalverbindung

8 / 32

PD Stefan Bosse - VPP - Modul G: 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)

9 / 32

PD Stefan Bosse - VPP - Modul G: Verteilte Programmierung (WEB)

WEB Sockets

www.pubnub.com