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