Aufgabenblatt 0

Werbung
Aufgabenblatt 0 - Vorbereitung
• Loggen Sie sich unter "gastXX" im Labor C 209L ein
• Es wird kein File-Server benutzt, d.h. bitte keine Dateien und vor allem keine
VMs unter "Eigene Dateien" ablegen.
• Der Ordner mit einer Readonly-Version der VM heißt in diesem Semester:
"D:\VM Read Only\Web-dev-01". Alternativ können Sie sich die Maschine in
der frischesten Form von der Website des Dozenten herunter laden:
http://wi.f4.htw-berlin.de/users/messer/Downloads/index.html
• Nun fertigen Sie eine Kopie von Web-dev-01 in einem sinnvoll benannten
Ordner auf der Platte D.
• Nun starten Sie VirtualBox und importieren die Maschine aus Ihrem eigenen
Ordner über Maschine>Hinzufügen und Auswahl der *.vbox-Datei innerhalb
des Ordners der VM.
• Achten Sie darauf, dass alle Ethernet-Karten neue MAC-Adressen bekommen.
• Die Maschine muss im Bridge-Modus (Netzwerkbrücke) laufen. Sie können
dies vor dem Start mit "Auswahl der Maschine" -> Ändern -> Netzwerk ->
"angeschlossen an" prüfen.
• Nun starten Sie die VM. Loggen sich unter student ein (PW=student). Dort
starten Sie den Browser: Sie müssen surfen können.
AVS – SS 2017 – Hinweise zu den Aufgabenblättern – Teil 2
2
Echte Tipps
Als erstes: Aufgabenblatt+Website lesen, Recherchieren
Erst den Entwurf machen, dann implementieren.
Gehen Sie bei der Implementierung immer in kleinen Schritten vor.
Ein Schritt – dann Testen.
Ein Schritt – dann Testen.
...
AVS – SS 2017 – Hinweise zu den Aufgabenblättern – Teil 2
3
Aufgabenblatt 1 - Repository
• Die API des Directory-Servers besteht aus folgenden Operationen:
– register(Name, Value)
– unregister(Name)
– query()
• Intern wird ein Hash angelegt, dessen Index der String des 1. Parameters
von register() ist, wie z.B. $database["Peter"]= "141.45.10.15" und
$database["Mary"]= "141.45.10.17".
• Damit diese Liste nicht beim Absturz verloren geht, wird sie nach jeder
Änderung in einer Datei unter einem geheimen Namen gespeichert. Das
bedeutet, dass bei den obigen Routinen ein weiterer Parameter
hinzukommt: der geheime Name.
• Aufruf von register():
http://…/register?name=Peter&value=141.45.10.15&sid=a7485276,
wobei name, value und sid die Namen der Parameter sind. Register() liest
aus der Datei a7485276 in die Variable $database den aktuellen Zustand
(oder legt initial eine solche Datei an), verarbeitet den Inhalt und
speichert $database wieder ab. Dazu muss $database serialisiert und
deserialisiert werden.
AVS – SS 2017 – Hinweise zu den Aufgabenblättern – Teil 2
4
Aufgabenblatt 2 – Chat-Server I
• Am besten Sie beginnen mit dem Design der Oberfläche; es muss
möglich sein:
– Initial durch Starten der Seite wird der Browser angemeldet.
– Anzeige aller Nachrichten live
– Eingabe einer eigenen Nachricht in einem von der Anzeige getrennten For
mular
– Nach Erstellung der Nachricht, wird diese per Klick gesendet und allen
anderen unmittelbar angezeigt.
– Knopf zur Beendigung der Teilnahme: durch diesen wird die Browser/IPAdresse gelöscht und erhält keine neuen Nachrichten mehr.
• Es handelt sich um eine 1-Page-Applikation.
• Machen Sie dazu einen Entwurf der Kommunikation: welche
Nachricht mit welchem Aufbau wird wann bzw. in welcher
Reihenfolge zwischen welchen Komponenten ausgetauscht. Als
Format nehmen Sie auf dem Hinweg zum Server das www-formurlencoded-Format und auf dem Rückweg das JSON-Format.
AVS – SS 2017 – Hinweise zu den Aufgabenblättern – Teil 2
5
Aufgabenblatt 2 – Chat-Server II
• Wir haben also zwei Server (VMs) zu Laufen:
– der Namensdienst mit einer vorgegebenen IP-Adresse,
– der Chat-Server mit einer weiteren vorgegebenen IP-Adresse
– viele Browser mit beliebigen IP-Adressen.
• Alle diese Komponenten benutzen den internen geheimen String
des Namensdienstes.
• Die Anzeige des Chat-Inhalts erfolgt durch den Browser per Ajax.
Daher wird über einen Timer alle 1s (oder kürzer) beim Server
angefragt, welche Informationen noch nicht abgeholt und angezeigt wurden.
• Damit die Abfrage etwas schneller geht, wird in den JSON-Teil
der Antwort ein boole‘sches Flag eingeführt, das anzeigt, ob noch
weitere Nachrichten verfügbar sind.
AVS – SS 2017 – Hinweise zu den Aufgabenblättern – Teil 2
6
Aufgabenblatt 3 – Chat-Server mit mehreren Servern
• Es wird ein Chat-System bestehend aus mehreren Chat-Servern
erstellt. Jeder der Chat-Server versorgt eine Gruppe von
Chattern, wobei alle in demselben Raum sich befinden.
• Wir haben also mindestens drei Server (VMs) zu Laufen:
– der Namensdienst mit einer vorgegebenen IP-Adresse,
– der mehrere Chat-Server
– viele Browser mit beliebigen IP-Adressen.
Repository
Gruppe3
Chat-Server1
D1
B1
Chat-Server2
Gruppe2
B2
C2
C1
Gruppe1
AVS – SS 2017 – Hinweise zu den Aufgabenblättern – Teil 2
7
Aufgabenblatt 3 II
• Jede der drei Gruppen meldet sich mit einer anderen geheimen
Zahl bei Repository an.
• Alle Nachrichten der 1. Gruppe werden an den Server der 2. und
umgekehrt gesendet.
• Es muss unterschieden werden zwischen Nachrichten,
– die von einem Browser kommen: werden zwischengespeichert, bis
sie abgeholt werden
– die vom anderen Server kommen: werden sofort weiter gesendet
AVS – SS 2017 – Hinweise zu den Aufgabenblättern – Teil 2
8
Aufgabenblatt 4 – Verteilen der CPU-Last
• Dazu wird eine sehr CPU-intensive Aufgabe gelöst. Es wird ein
Primzahlentest verteilt realisiert, der auf folgender Formel beruht
(Satz von Wilson):
(n-1)! mod n = n-1
• Wenn also die Fakultät n-1 einer Zahl n modulo n genau n-1 ergibt,
dann ist n eine Primzahl. Beispiel 7: 6! mod 7 = 2*3*4*5*6 mod 7
= 720 mod 7 = 6, denn 102*7= 714 (Differenz zu 720 ist ja 6).
Dass Fakultät zu sehr großen Zahlen führt, ist wohl klar. Daher
lassen sich diese großen Zahlen nach jeder Multiplikation durch
mod n immer wieder kleiner machen:
(a*b) mod n = ((a mod n)*(b mod n))mod n
• Wenn also ein Produkt mod n berechnet werden soll, können vorher
die Faktoren per mod n kleiner gemacht werden. Gleichzeitig
erlaubt die zweite Formel das Verteilen des Multiplizierens auf
mehrere Knoten. Diese Knoten werden hier Worker genannt.
AVS – SS 2017 – Hinweise zu den Aufgabenblättern – Teil 2
9
Aufgabenblatt 4 II
• Auf dem Hinweg wird ein JSON-Objekt mit den Daten geschickt.
Dabei wird nicht auf das Ende der Berechnung gewartet.
• Später werden die Zwischenergebnisse eingesammelt,
multipliziert und an den Browser geschickt.
• Auch hier machen Sie einen Entwurf der Kommunikation, mit
allen Formaten und dem Ablauf. Es gibt also pro Worker zwei
URLs: eine zum Berechnen und eine zum Abholen des
Ergebnisses. Die erste muss vorzeitig den Response liefern, bei
der zweiten kann entweder abgefragt werden, ob das Ergebnis
da ist oder auf das Ergebnis gewartet werden.
• gmp-Paket: http://php.net/manual/en/book.gmp.php
AVS – SS 2017 – Hinweise zu den Aufgabenblättern – Teil 2
10
Aufgabenblatt 5 – Verteiltes Array
• Stellen Sie sich eine Tabelle vor. Jeder Array-Eintrag hat einen
Index und beinhaltet ein Hash. Alles liegt im RAM.
• Dies wird dadurch kompensiert, dass auf einem Knoten nur ein
Teil des Arrays liegt. Beim einem Zugriff wird als Erstes der
Knoten mit dem richtigen Teil bestimmt und dann der Wert von
dort geholt.
• Es gibt einen Master, der das Inhaltsverzeichnis beinhaltet. Dies
ist ein Hash mit dem Begriff aus Wikipedia, z.B. "Computer".
Diesem Begriff wird eine Nummer zugeordnet – das ist der Index
im verteilten Array. Dieses liegt über verschiedene Knoten –
Worker genannt - verteilt im Netz. Im Master wird zum Begriff
"Computer" noch der Index sowie die IP-Adresse des Rechners
mit den Daten abgelegt.
AVS – SS 2017 – Hinweise zu den Aufgabenblättern – Teil 2
11
Aufgabenblatt 6 – PHPUnit des Repositorys
• Entwerfen Sie nun eine Testklasse mit möglichst scharfen Tests.
Testen Sie diese Testklasse in einer Simulation (Ersatz des
Repositorys durch eine PHP-klasse): rote Balken.
• Mittels curl, httpful oder HTTP_Request2 die notwendigen
Bibliotheksroutinen zum Zugriff auf andere Server sowie weitere
Routinen zum Zugriff auf die API Ihres Repositorys. Versuchen Sie
dabei die Wrapper um curl, httpful oder HTTP_Request2 so allgemein
wie möglich zu realisieren, so dass diese bei anderen Tests benutzt
werden können, einzig die Routinen, die die API aufrufen, sind
testspezifisch.
• Quälen Sie mal richtig Ihre Aufgabenlösung.
• Nun wird dies erweitert durch parallele Anforderungen, aber eben
parallel laufen, z.B. eine Sequenz mit register(), query(), unregister()
parallel zur Sequenz register(), register(), register(), query() jeweils mit unterschiedlichen Daten. Jede Sequenz ist in sich
sequentiell und untereinander parallel.
AVS – SS 2017 – Hinweise zu den Aufgabenblättern – Teil 2
12
Aufgabenblatt 6 – II
• Dann versuchen Sie Ihre Lösung kaputt zu bekommen: jetzt
werden parallel durchaus unsinnige Operationen durchgeführt,
z.B. register() und unregister() mit denselben Werten.
• Die Parallelität erreichen Sie mit den Mitteln des Aufgabenblatts
über Primzahlen. Bisher war immer nur ein Tester beteiligt.
• Zum Schluss probieren Sie mal folgendes aus: Sie lassen
vernünftige sequentielle Tests – da müssen ja immer grüne
Balken kommen – parallel von verschiedenen Maschinen laufen,
z.B. testen gleichzeitig 3 Maschinen das Repository.
AVS – SS 2017 – Hinweise zu den Aufgabenblättern – Teil 2
13
Aufgabenblatt 7 – Private webDAV-Cloud
●
Sie bauen Sie eine primitive private Speicher-Cloud. Da diese Lösung
ohne Accounts/Passwörter und TLS läuft, ist sie für eine reale
Anwendung nicht geeignet. Aber das Prinzip wird gelernt.
●
Das (alte) XAMPP-System beinhaltet schon das Apache-webdav-Modul,
auch sind die Konfigurationsdateien schon vorbereitet. Ihre Aufgabe
besteht nun darin, WebDAV in den virtuellen Maschinen zu realisieren.
Dazu ist eine Einarbeitung in das XAMPP-Implement unter
/opt/lampp/.. erforderlich. Dann gehört eine Recherche dazu, wie
Apache zum WebDAV-Server konfiguriert werden muss. Auch sollte die
Datei php.ini untersucht und gegebenenfalls geändert werden.
●
Wenn das WebDAV-Modul nicht vorhanden ist, muss der Apache
zusammen mit dem Modul übersetzt werden, oder Sie verlassen XAMPP
und nehmen die Versionen aus den Repositorys der Distribution.
●
Nun geht es um den Client. Unter Windows ist der WebDAV-Client im
Explorer schon integriert.
AVS – SS 2017 – Hinweise zu den Aufgabenblättern – Teil 2
14
Aufgabenblatt 7 II
• Dann besorgen Sie sich einen WebDAV-Client für Linux und
wiederholen den Test. Ein schöner Client ist z.B. cadaver:
http://www.webdav.org/cadaver – allerdings ohne GUI. Oder
davfs2 oder...
• Als letztes bauen Sie die virtuelle Maschine so um, dass Sie den
Ordner htdocs über WebDAV von Außen bespielen können.
AVS – SS 2017 – Hinweise zu den Aufgabenblättern – Teil 2
15
Nach dieser Anstrengung etwas Entspannung....
AVS – SS 2017 – Hinweise zu den Aufgabenblättern – Teil 2
16
Herunterladen