Übung 7: Verteilte Programmierung mit RPC (Stefan Bosse) [7.2025]

Übung 7 - Verteilte Programmierung mit RPC

Übung 7 - Verteilte Programmierung mit RPC
Vorbereitung und Verwendung
RPC

Vorbereitung und Verwendung

Minimalanforderungen: lvm 1.1.19, luv 2.7.5, weblvm 1.2.0

In dieser Übung wird:

  1. Die parallele LuaJit VM lvm mit integrierten RPC/CSP Modul für das jeweilige eigene Betriebssystem verwendet (genannt Remote Kontext);
  1. Integrierte Fengari Lua VM mit eingeschränkten RPC Modul (genannt Lokal Kontext).

Remote: Ein Beispiel mit lvm (luv steht zur Verfügung)

 ▸ 
 ◼ 
 ↻ 
 ✗ 
 ↻ 
 ≡ 

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.

Lokal: Ein Beispiel mit Embedded Lua (luv steht nicht zur Verfügung)

 ▸ 
 ✗ 
 ≡ 

RPC

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.


Remote: Ein RPC Service starten

 ▸ 
 ◼ 
 ↻ 
 ✗ 
 ↻ 
 ≡ 


Remote: Ein RPC Service beenden

 ▸ 
 ◼ 
 ↻ 
 ✗ 
 ↻ 
 ≡ 

Lokal: Ein RPC Klient und eine Anfrage an den Service

 ▸ 
 ✗ 
 ≡ 

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.


Remote: Die Service Prozesse

 ▸ 
 ◼ 
 ↻ 
 ✗ 
 ↻ 
 ≡ 

Lokal: Ein RPC Klient und eine Anfrage an den Service

 ▸ 
 ✗ 
 ≡ 

cnBjMSA9IFJwYyh7dmVyYm9zZT0yfSkKcnBjMiA9IFJwYyh7dmVyYm9zZT0yfSkKcnBjMTpnZXRyZXEoJzEyNy4wLjAuMScsMTIzNDUsZnVuY3Rpb24gKHJlcSkKICBwcmludChyZXEpCiAgPGI+bG9jYWw8L2I+IHJlc3VsdCxzdGF0PSIiLCJFQ01EIgogIFN3aXRjaChyZXEuY21kKS5jYXNlb2YoewogICBBZGQgPSA8Yj5mdW5jdGlvbjwvYj4gKCkKICAgICByZXN1bHQgPSByZXEueCtyZXEueQogICAgIHN0YXQgICA9ICdPSycKICAgZW5kLAogICBTcXJ0ID0gPGI+ZnVuY3Rpb248L2I+ICgpCiAgICAgPGI+bG9jYWw8L2I+IGVycm9yLHJlcGx5ID0gcnBjMTp0cmFucygnMTI3LjAuMC4xJywxMjM0NixyZXEpCiAgICAgcmVzdWx0ID0gcmVwbHkucmVzdWx0CiAgICAgc3RhdCAgID0gcmVwbHkuc3RhdAogICA8Yj5lbmQ8L2I+CiAgIC0tIHVuZC9vZGVyCiAgIGRlZmF1bHQgPSA8Yj5mdW5jdGlvbjwvYj4gKCkKICAgICA8Yj5sb2NhbDwvYj4gZXJyb3IscmVwbHkgPSBycGMxOnRyYW5zKCcxMjcuMC4wLjEnLDEyMzQ2LHJlcSkKICAgICByZXN1bHQgPSByZXBseS5yZXN1bHQKICAgICBzdGF0ICAgPSByZXBseS5zdGF0CiAgIDxiPmVuZDwvYj4KICB9KQogIDxiPnJldHVybjwvYj4gewogICAgcmVzdWx0PXJlc3VsdCwKICAgIHN0YXQ9c3RhdAogIH0KICBlbmQpCnJwYzI6Z2V0cmVxKCcxMjcuMC4wLjEnLDEyMzQ2LGZ1bmN0aW9uIChyZXEpCiAgcHJpbnQocmVxKQogIDxiPmxvY2FsPC9iPiByZXN1bHQsc3RhdD0iIiwiRUNNRCIKICBTd2l0Y2gocmVxLmNtZCkuY2FzZW9mKHsKICAgU3FydCA9IDxiPmZ1bmN0aW9uPC9iPiAoKQogICAgIHJlc3VsdCA9IG1hdGguc3FydChyZXEueCkKICAgICBzdGF0ICAgPSAnT0snCiAgIDxiPmVuZDwvYj4KICB9KQogIDxiPnJldHVybjwvYj4gewogICAgcmVzdWx0PXJlc3VsdCwKICAgIHN0YXQ9c3RhdAogIH0KICBlbmQp



Hilfe



Einreichung (Assignment #2025-13724 )



Prüfen



Bewerten (Lehrer)




Created by the NoteBook Compiler Ver. 1.36.4 (c) Dr. Stefan Bosse (Thu Jul 24 2025 18:50:13 GMT+0200 (Central European Summer Time))