Übung 7: Verteilte Programmierung mit RPC (Stefan Bosse) [7.2025] |
Minimalanforderungen: lvm 1.1.19, luv 2.7.5, weblvm 1.2.0
In dieser Übung wird:
# lvm weblvm.lua
Service thread 2 started.
[2@1592562880] HTTP server (2) listening to http://0.0.0.0:4610
Monitor thread 4 started.
[4@1592562880] HTTP server (4) listening to http://0.0.0.0:4611
▸
◼
↻
|
✗
↻
≡
|
Es kann notwendig sein den weblvm Prozess neu zu starten. Dazu kann einfach der linke Kreispfeil Knopf verwendet werden. Gelegtnlich wird die lvm Konsolenausgabe hie rnicht aktualisiert. Diese kann mit dem rechten Kreispfeil Knopd aktuallisiert werden.
▸
|
✗
≡
|
In der verteitlten Programmierung gibt es eine Menge von isolierten (oder schwach gekoppelten) Prozessen P={p1,..}, die miteinander über Nachrichtenaustausch kommunizieren. Dabei muss Synchronisation und Datenaustausch ermöglicht werden.
In dieser Übung wird ein einfaches nachrichtenbasiertes Kommunikationsmodell verwendet: Remote Procedue Call Kommunikation. Diese baut auf allgmein verfügbaren bidirektionalen nicht oder nur partiell synchroniserte Kommunikationskanäle auf, z.B. unter Verwendung von HTTP oder allg. UDP/TCP-IP.
Die RPC Semantik definiert zwei Rollen die Prozesse (alternierend) einnehmen können: Service und Klient. Der Service stellt eine Menge von Prozeduren (Funktionen) F={f1,..} zur Verfügung die der Klient aufrufen kann.
Es werden bei einem Service IP Ports belegt und gebunden. Solange ein RPC Service (in einer eigenen Koroutine) auf einem IP Port aktiv ist kann kein weiterer Service auf diesem Port arbeiten. Um einen nicht mehr benötigten RPC Service zu beenden und den IP Port freizugeben kann rpc = Rpc(); ... rpc:close()
aufgerufen werden.
▸
◼
↻
|
✗
↻
≡
|
▸
◼
↻
|
✗
↻
≡
|
▸
|
✗
≡
|
Frage 1. Nenne einen Vor- und zwei Nachteile der RPC Kommunikation
Aufgabe 2. Implementiere zwei RPC Service Prozesse. Der erste führt die arithmetischen Operationen Add(x,y), Sub(x,y), Mul(x,y) und Div(x,y) aus. Der zweite führt Sqrt(x) und Pow(x,y) mit den jweiligen Lua math Funktionen aus. Aber: Ein Klient kontaktiert immer nur den ersten. Falls dieser die Anfrage nicht bearbeiten kann muss er diese via trans an den zweiten weiterleiten und auf Antwort warten. Die Antwort wird dann dem ursprünglichen Klientenprozess übermittelt.
▸
◼
↻
|
✗
↻
≡
|
▸
|
✗
≡
|
cnBjMSA9IFJwYyh7dmVyYm9zZT0yfSkKcnBjMiA9IFJwYyh7dmVyYm9zZT0yfSkKcnBjMTpnZXRyZXEoJzEyNy4wLjAuMScsMTIzNDUsZnVuY3Rpb24gKHJlcSkKICBwcmludChyZXEpCiAgPGI+bG9jYWw8L2I+IHJlc3VsdCxzdGF0PSIiLCJFQ01EIgogIFN3aXRjaChyZXEuY21kKS5jYXNlb2YoewogICBBZGQgPSA8Yj5mdW5jdGlvbjwvYj4gKCkKICAgICByZXN1bHQgPSByZXEueCtyZXEueQogICAgIHN0YXQgICA9ICdPSycKICAgZW5kLAogICBTcXJ0ID0gPGI+ZnVuY3Rpb248L2I+ICgpCiAgICAgPGI+bG9jYWw8L2I+IGVycm9yLHJlcGx5ID0gcnBjMTp0cmFucygnMTI3LjAuMC4xJywxMjM0NixyZXEpCiAgICAgcmVzdWx0ID0gcmVwbHkucmVzdWx0CiAgICAgc3RhdCAgID0gcmVwbHkuc3RhdAogICA8Yj5lbmQ8L2I+CiAgIC0tIHVuZC9vZGVyCiAgIGRlZmF1bHQgPSA8Yj5mdW5jdGlvbjwvYj4gKCkKICAgICA8Yj5sb2NhbDwvYj4gZXJyb3IscmVwbHkgPSBycGMxOnRyYW5zKCcxMjcuMC4wLjEnLDEyMzQ2LHJlcSkKICAgICByZXN1bHQgPSByZXBseS5yZXN1bHQKICAgICBzdGF0ICAgPSByZXBseS5zdGF0CiAgIDxiPmVuZDwvYj4KICB9KQogIDxiPnJldHVybjwvYj4gewogICAgcmVzdWx0PXJlc3VsdCwKICAgIHN0YXQ9c3RhdAogIH0KICBlbmQpCnJwYzI6Z2V0cmVxKCcxMjcuMC4wLjEnLDEyMzQ2LGZ1bmN0aW9uIChyZXEpCiAgcHJpbnQocmVxKQogIDxiPmxvY2FsPC9iPiByZXN1bHQsc3RhdD0iIiwiRUNNRCIKICBTd2l0Y2gocmVxLmNtZCkuY2FzZW9mKHsKICAgU3FydCA9IDxiPmZ1bmN0aW9uPC9iPiAoKQogICAgIHJlc3VsdCA9IG1hdGguc3FydChyZXEueCkKICAgICBzdGF0ICAgPSAnT0snCiAgIDxiPmVuZDwvYj4KICB9KQogIDxiPnJldHVybjwvYj4gewogICAgcmVzdWx0PXJlc3VsdCwKICAgIHN0YXQ9c3RhdAogIH0KICBlbmQp