Das VS2Lab dient zur praktischen Veranschaulichung von Prinzipien verteilter Softwaresysteme sowie zur Einführung in deren softwaretechnische Konstruktion.
Die Laborthemen orientieren sich an der inhaltlichen Struktur der Vorlesung VS2. Die Laborarbeit beinhaltet zunächst jeweils die Analyse gegebener Beispiele für einzelne Themenbereiche. Basierend darauf werden eigenständige Lösungen entwickelt.
Die Abgabe der Teilaufgaben erfolgt im ILIAS Kurs 'Verteilte Systeme 2 Labor'. Dort sind auch die genauen Regelungen der Abgabe zu finden.
Hinweis: Das Labor Repository wird laufend weiterentwickelt und
aktualisiert. Es empfiehlt sich daher, das Labor als Git Repository zu belassen
und regelmäßig per $ git pull
aktuell zu halten.
Das Labor wird im LKIT Rechner-Pool (Li 137) unterstützt. Die Laborplattform kann aber auch leicht auf dem eigenen Rechner eingerichtet werden. Dazu gehört:
- Git Versionsverwaltung
- Laufzeitplattform mit Python und Redis
- Entwicklungs- und Arbeitsumgebung
Alle Komponenten lassen sich auf den gängigen Plattformen relativ einfach installieren und sind z.T. schon standardmäßig vorhanden. Einige Tipps zur Installation folgen unten.
NEU im Sommersemester 2020
Im Sommersemester 2020 wird zusätzlich ein Ubuntu Disk Image für VirtualBox angeboten, auf dem die Laborplattform komplett vorkonfiguriert ist. Sie brauchen dann auf Ihrem Rechner nur VirtualBox installieren und können lokal mit einer virtuellen Maschine (VM) arbeiten.
Entpacken Sie zunächst das VS2Lab Disk Image (VS2-Labor.zip
). Erstellen Sie
dann in VirtualBox eine neue VM für Linux/Ubuntu64 (min. 4GB) und wählen Sie das
Disk Image als vorhandene Festplatte aus. Danach können Sie der VM noch min.
zwei Kerne zuordnen und sie anschließend starten. Das Passwort lautet "ic4ip
".
Das Labor nutzt die Git Versionsverwaltung und den GitLab Dienst zur Bereitstellung der Labordateien als git Repository. Git muss auf dem verwendeten Rechner verfügbar sein.
Wenn git
vorhanden ist, dann kopieren Sie das Labor Repository wie folgt
(aus dem lokalen Netz der Hochschule oder über VPN):
git clone https://iz-gitlab-01.hs-karlsruhe.de/IWI-I/vs2lab.git
Das Labor basiert auf Python und setzt (ab Aufgabe 2) eine Redis Installation voraus.
Die Beispiele und Aufgaben sind weitgehend in Python 3 (~3.6) geschrieben.
Python ist eine pragmatische und weit verbreitete objektorientierte (u.a.) Skriptsprache mit dynamischer Typisierung.
Python ist gut dokumentiert und einfach zu erlernen. Es ist für alle gängigen Plattformen frei verfügbar.
Für das Labor muss Python lokal verfügbar sein. Oft (vor allem bei Linux oder OSX) ist das schon der Fall. Sonst ist eine Installation erforderlich:
- Prüfen einer vorhandenen Python Version:
$ python3 --version
- Python Installer unter Python Downloads
- Alternativ über einen Package Manager in
Linux (z.B.
Ubuntu:
$ sudo apt-get install python3.6
) oder MacOS (Homebrew:$ brew install python
)
Verwendete Module sind u.a.
- os (miscellaneous operating system interfaces)
- socket (low-level networking interface)
- pickle (python object serialization)
- logging (logging facility for Python)
- threading (thread-based parallelism)
- multiprocessing (process-based parallelism)
Die Pakete müssen nicht separat installiert werden. Wir binden sie bei der Einrichtung der Python Umgebung ein (siehe unten).
Redis ist ein NOSQL Key-Value (KV) Store.
- Allgemeine Informationen auf der Redis Website
Redis muss zunächst installiert werden:
- Installationsanleitung unter Redis Quickstart
Das Labor braucht für viele Teile eine laufende Redis Instanz. Der Redis Server wird wie folgt gestartet:
redis-server
Redis besitzt ein Command Line Interface (CLI) zur interaktiven Benutzung. In einer weiteren Shell kann damit der Redis Server beobachtet werden:
$ redis-cli
127.0.0.1:6379> monitor
OK
Zur Programmierung nutzen wir den redis-py Client für Python.
- Übersicht der API unter Redis Command Reference
Das Paket muss nicht separat installiert werden. Wir binden es bei der Einrichtung der Python Umgebung ein (siehe unten).
Die verwendeten Python Packages können per pip
installiert werden. Das ist
der integrierte Paketmanager des Python Laufzeitsystems. Bei Bedarf können
Details im Tutorium nachgelesen werden:
Das Laborprojekt verwendet pip
nicht direkt. Module sollen nämlich nicht im
gesamten System sondern nur in einem isolierten Bereich für unser Labor
installiert werden (unterschiedliche Projekte brauchen oft unterschiedliche
Versionen gleicher Module). In Python benutzt man dafür virtuelle Umgebungen,
die mit virtualenv
erstellt werden. Bei Bedarf können Details hier
nachgelesen werden:
Das Laborprojekt verwendet auch virtualenv
nicht direkt. Stattdessen wurde
pipenv
verwendet. Dadurch wird die Erstellung virtueller Umgebungen und die
Installation von Modulen automatisch kombiniert und ist viel einfacher.
pipenv
muss ggf. installiert werden. Folgen Sie dieser Anleitung:
pipenv
erstellt bei der Nutzung eine Liste mit verwendeten Modulen
(Pipfile
, bzw. Pipfile.lock
), die z.B. im Git Repository gut geteilt
werden kann. Die Module dieser Liste können mit pipenv
automatisch
installiert werden. Dadurch kann man die Module des Labors auf dem eigenen
Rechner mit nur einem Befehl installieren (eine offene Internetverbindung wird
dabei vorausgesetzt):
cd vs2lab # angenommen hier liegt das vs2lab Repo
pipenv install
Bei Bedarf können Details in den pipenv
Docs nachgelesen werden:
Es wird keine explizite Entwicklungsumgebung (IDE) für Python Skripte vorgegeben (und auch nicht dringend benötigt - es reicht im Prinzip ein Editor). Einige Möglichkeiten sind:
- PyCharm (auch im Pool LKIT vorhanden), hat u.a. einen sehr nützlichen Debugger.
- Atom (auch im Pool LKIT vorhanden)
- Spyder (Teil der Anaconda Distribution, s.u.)
Bei der Arbeit mit Python wird nicht immer streng zwischen Entwicklungs- und Laufzeit von Systemen unterschieden. Entwickler können Teile des Systems wie Funktionen oder Objekte schon während der Entwicklung interaktiv ausprobieren, ohne ein explizites 'Hauptprogramm' ablaufen zu lassen. Auch Anwender können die Funktionen und Objekte von Python Systemen direkt aufrufen - ganz ohne klassische GUI. Dies ist besonders im Bereich von Data Science Systemen üblich.
IPython ist ein Command Line Interpreter (CLI) mit Read-Eval-Print-Loop (REPL) für Python. Damit wird die interaktive Arbeit mit Python Systemen in besonders leistungsfähiger und komfortabler Art möglich. Python Befehle werden hier interpretiert und deren Ergebnis auf dem Bildschirm ausgegeben. Dies kann neben Text auch eine grafische Ausgabe (z.B. Diagramme) sein und innerhalb von GUI Anwendungen oder Webseiten eingebettet werden. Mit IPython ist zudem die interaktive Arbeit auf Cluster Systemen möglich. Näheres über IPython findet sich hier:
Im VS2 Labor verwenden wir den enormen Umfang der IPython Features kaum. Wir ersetzen damit lediglich die GUI-Ebene der von uns erstellten verteilten Systeme. Alle diese Systeme werden entweder als Skripte ausgeführt oder über eine IPython Erweiterung direkt interaktiv benutzt. Genauer verwenden wir dazu Jupyter Notebooks. IPython selber braucht deshalb auch nicht installiert werden.
Jupyter ermöglicht die interaktive Nutzung von Programmierumgebungen verschiedener Art im Web Browser.
Im Browser können sogenannte Notebooks erstellt werden. Ein Notebook ist eine Mischung von Text (Markdown) und Code. Damit kann die interaktive Nutzung von Python Code erklärt werden. Näheres dazu findet sich unter folgendem Link:
Im Labor nutzen wir teilweise Jupyter Notebooks zur Erklärung der Beispiele oder zur Einreichung einer Aufgabe.
Jupyter wird im VS2Lab Repository automatisch installiert, wenn per pipenv install
die Abhängigkeiten installiert werden. Sie starten den Jupyter
notebook Server wie folgt:
cd vs2lab # angenommen hier liegt das vs2lab Repo
pipenv run jupyter notebook
Es sollte sich ein Browserfenster mit einer Übersicht der Dateien im Ordner
öffnen. Stoppen Sie den Server bei Bedarf mit ctrl-c
.
Für Python existieren auch komplette Distributionen, die verschiedene Tools beinhalten, z.B.:
Anaconda vereinfacht die Installation und beinhaltet z.B. schon die Spyder IDE und Jupiter Notebooks. Zudem verwendet Anaconda eine eigene Lösung für virtuelle Umgebungen in Python. Es zielt vor allem auf wissenschaftliche Anwendungen von Python. Das VS2 Labor ist nicht auf Anaconda ausgelegt, sollte aber darauf übertragbar sein.
- Die Installation von Python Dependencies erfordert i.d.R. eine offene Internetverbindung. Die Rechner im LKIT-Pool sind entsprechend konfiguriert.
- Das Repository kann auch per
ssh
'gecloned' werden. Hierzu benötigen Sie ein Benutzerkonto auf dem GitLab Server und müssen dort einen Schlüssel hinterlegen.
- Für alle
pipenv
Aufrufe sollten Sie sich im Wurzelverzeichnis (vs2lab) befinden. - Falls die Einrichtung der Umgebung per
pipenv install
zu Fehlern führt, versuchen Sie, die DateiPipfile.lock
zu löschen. - Als weitere Möglichkeit können Sie Packages einzeln installieren per
pipenv install <modul>
(Package Namen stehen im Pipfile)
... to be continued.
Die Aufgaben sind in den Unterverzeichnissen des Repositories beschrieben.