GithubHelp home page GithubHelp logo

c02-ssy-replication's Introduction

Replikation von Daten

Verzeichnisse & Dateien

  • bin/www ... Starten des Webservers, Error-Handling
  • routes/ ... Hier stehen die einzelnen Controller
    • index.js ... Erzeugt eine einfache Start-Seite
    • store.js ... Einfache Key-Value-Datenbank, welche repliziert wird
  • src/ ... Datenmodell und Geschäftslogik
    • database.js ... Datenbank und Fixtures mit Beispiel-Daten
  • app.js ... Definition & Setup der Express-Applikation
  • package.json ... Welche Bibliotheken sonst eingebunden werden sollen

Übersicht

Das Beispiel stellt ein repliziertes Storage-Service dar: man kann über einen Key /store/<key> ein beliebiges Objekt (JSON) speichern und wieder abrufen. Alle drei Replicas sind gleichberechtigt, der Schreibrequest kann also an jede Instanz gesendet werden und wird dann zu den anderen Instanzen weitergeleitet/repliziert.

Aufgabe

  1. Machen Sie sich mit dem Code vertraut. Sehen Sie sich die Routen an (GET/PUT/DELETE) und wie diese umgesetzt werden. Starten Sie die drei Server und führen Sie mit einem REST-Client einige Lese- & Schreibzugriffe durch. Vergewissern Sie sich, dass Sie verstehen, wie die Replikation implementiert ist.

  2. Implementieren Sie einen ersten Client (client/same-replica.js), der ein Objekt unter einem (frei gewählten) Key auf einer der drei Replicas abspeichert und von der selben Replica wieder ausliest.

  3. Implementieren Sie einen Client (client/different-replica.js), der ein Objekt unter einem (frei gewählten) Key auf einer der drei Replicas speichert und sofort danach versucht, von einer anderen Replica diesen Key zu lesen.

    Welches Verhalten können Sie beobachten?

    Tipp: stellen Sie sicher, bei Axios die Option validateStatus: null zu setzen (siehe store.js für genaue Syntax), da ansonsten ein 4xx-Status eine Exception beim Client auslöst.

  4. Implementieren Sie einen Client (client/concurrent-put.js), welcher auf demselben Key je Instanz einen unterschiedlichen Wert schreibt (also drei Schreibrequest). Lesen Sie nach einer Wartezeit den Wert des Keys von allen drei Instanzen aus.

    Haben alle drei Instanzen denselben Wert gespeichert? Warum nicht? (--> Server-Logs ansehen)

    Tipp: senden Sie die Requests rasch hintereinander ab, also ohne auf die Antwort mit await zu warten. Verwenden Sie stattdessen Callback-Funktionen (.then()) oder await Promise.all([...]) (siehe Kurzreferenz).

    Um abzuwarten, bevor Sie die Werte auslesen, verwenden Sie die Funktion setTimeout(funktion, time_in_ms).

  5. Ändern Sie die Replikation in store.js so, dass auf das Ergebnis des Axios-Calls mit await gewartet wird. Sehen Sie bei einem oder beiden der Clients aus Schritt 4 bzw. Schritt 5 nun einen Unterschied?

c02-ssy-replication's People

Watchers

 avatar  avatar

Forkers

cwerner1

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.