Verteilte Systeme
Verteilte Systeme
- Komponenten befinden sich auf verschiedenen Geräten in einem oder mehreren Netzwerken
- Aktionen und Daten werden durch Kommunikation unter den Systemen gesteuert
- Menge unabhängiger Systeme die als ein System auftreten
Client Server Model
- Client –> Server
- Client –> Server / Client –> Server
Three Tier Architecture
- Client Application –> Server Application (UI, Access Control, Business Logic, Data Layer) –> Database
Vorteile verteilter Systeme
- Funktionale Trennung: Systeme basierend auf Funktionalität, Nutzen Fähigkeiten oder Aufgaben getrennt
- Verteilung: Funktionen der Systeme sind von Natur aus gleichmäßig Verteilt
- Resilienz: Fähigkeit zur Selbstheilung nach Ausfall, Belastung oder Angriff
- Skalierbarkeit: bei wachsender Last Ressourcen hinzufügen
- Vertical: Instanzen selbst verbessern
- Horizontal: Mehr Instanzen nutzen
- Fehlertoleranz: Fähigkeit trotz Ausfall einiger Systeme weiter zu funktionieren
- Redundanz: Wenn System 1 ausfällt wird System 2 genutzt
- Replikation: Alle Systeme werden immer gleichzeitig angesprochen, Ergebnis wird anhand von Vergleich ausgegeben
Aufbau einer verteilten Anwendung:
Virtualisierung und Deployment
Arten der Virtualisierung:
Simulation von Software und Hardware auf der eine Software ausgeführt wird
kann reelles System
- verschiedene virtuelle Systeme spalten
- wie ein anderes System aussehen lassen
Hypervisor
- VMM Type 1
- direkt auf der Hardware
- minimales OS um VMs zu verwalten
- Pro: Effizienter
- Con: benötigt spezielle Treiber
- VMM Type 2
- VMM als Prozess auf OS
- VMs sind ebenfalls Prozesse
- Pro: keine speziellen Treiber nötig
- Con: Mehr Overhead
- VMM Type 1
Full Virtualization
- Hypervisor emuliert Geräte
- Hardware kann VM übergreifend geteilt werden
- Binary translation
- nicht privilegierte Aktionen direkt auf der CPU
- sensible und privilegierte Aktionen werden simuliert ausgeführt
- kritische Aktionen werden mit Exceptions behandelt
- Problem: kritische Aktionen hängen manchmal von Parametern ab
Paravirtualization
- unterstützt durch OS
- Gast OS weiss das es in einer VM ist
- kritische Aktionen werden nicht ausgeführt
- Gast OS source code muss angepasst werden um Unterstützung nicht zu nutzen
- meisten Virtualisierungsplatformen nutzen OS Assisted für Geräte
Accelerated Virtualization
- Hardware gestützt
- durch Optimierung der Hardware
- besserer Datendurchsatz zwischen Gast und Gerät
- Direct Assignment
- VM besitzt die Hardware
- Hardware kann nicht geteilt werden
- Ziel: Effizienter Input und Output ohne VMM
- Problem: VMM muss Korrektheit und Isolation korrekt umsetzten
OS Virtualisierung
- Kernel erlaubt Existenz verschiedener isolierter Instanzen im User Space
- Programme im Container können nur Inhalte des Containers sehen sowie zugewiesene Geräte
- weniger Overhead als Full Virtualization, Programm nutzt normales Interface des OS
Tabelle Vergleich von Virtualisierung:
Cloud Computing und Skalierung
Eigenschaften
- On Demand Self Service
- keine manuelle Aktion nötig für Zuweisung von Ressourcen
- breiter Netzzugang
- Zugriff über Netzwerk mit Standardmechanismen
- Bündelung von Ressourcen
- Gebündelte Ressourcen können mehreren Verbrauchen zugewiesen werden
- Schnelle Elastizität
- Funktionen nach Bedarf zuteilen und freigeben
- Leistung wird gemessen
- Nutzung der Ressourcen wird überwacht, kontrolliert und gemeldet
- On Demand Self Service
Service Models
- Software as a Service
- Anwendungen werden direkt bereitgestellt
- Platform as a Service
- Kunden können eigene Anwendungen bereitstellen basierend auf Angebot des Anbieters
- Infrastructure as a Service
- Anbieter verwaltet Ressourcen
- Software as a Service
Deployment Models
- Private Cloud
- Infrastruktur für nur eine Organisation
- intern oder extern gehostet, Dienstleister oder Selbst
- Public Cloud
- Service für breites Publikum verfügbar
- Community Cloud
- Infrastruktur geteilt von verschiedenen Organisationen
- Hybrid Cloud
- Public und Private Cloud
- Private Cloud
Application Server und Frameworks
- Application Server
- Jede Application läuft in eigenem ClassLoader
- Applikationen isoliert
- teilen gleiches OS und JVM
- teilen Libraries und Funktionen
- Pro: Weniger Overhead, schnelles Deployment
- Con: Keine Limits und Isolation der Hardware
- Application Server vs Web Server Deployment
- Web Server stellt nur statische Inhalte
- Application Server führt Logik aus
- Application benötigt spezifische Konfiguration
CDI, JPA und Transaktionen
Jakarta Persistence
- Mit @Entity als Entity setzen
- @Table für Tabelle in DB
- @Column für spalten
- @Id für PK
Transaction
- CAP
- Consistency: jeder Knoten hat neusten und erfolgreich geschriebenen Wert
- Availability: jeder nicht ausgefallene Knoten gibt keine Fehler zurück
- Partition-tolerance: System funktioniert auch wenn Nachrichten fallengelassen werden
- ACID Eigenschaften
- Atomicity: Alle Daten einer Transaction werden entweder geschrieben oder nicht geschrieben. Keine teilweisen Änderungen
- Consistency: Alle Daten müssen gemäß der gesetzten Constraints valid sein
- Isolation: gleichzeitige Ausführung von Transaktionen soll Datenbank so verändern wie sequentielle Ausführung würde
- Durability: Transaktionen die committed wurden bleiben commited, auch wenn ein System ausfällt
- CAP
HTTP & JSON
HTTP Client-Server Protokoll
- basierend auf Request und Response
- Schickt 6 und 7, Presentation und Application
- Sequenz
- Client SYN –> Server
- Client <– Server SYN/ACK
- Client ACK
- Client ClientHello –> Server
- Client <– Server ServerHello, Certificate, ServerHelloDone
- Client ClientKeyExchange, ChangeCipherSpec, Finished –> Server
- Client <– Server ChangeCipherSpec, Finished
- Client HTTP Request –> Server
- Client <– Server HTTP Response
- besteht aus Header und Body
- Header
- General Header
- Request/Response Header
- Entity Header
- Body
- Header
HTTP Request/Response Message
- GET /index HTTP/1.1: METHOD, PATH, VERSION
- HTTP/1.1 200 OK: VERSION, STATUS CODE, STATUS MESSAGE
HTTP Request Methods
- Get
- spezifische Ressource anfragen
- NUR Daten abfragen
- Post
- Objekt “einsenden”
- Ändern von Inhalten, Erstellen von neuen Inhalten
- Put
- Alle derzeitigen Objekte mit neuem “eingesendetem” Objekt ersetzten
- Patch
- Teilweise Veränderung eines Objekts
- Delete
- Löschen einer Ressource
- Head
- Fragt nach IDENTISCHER Response, nur OHNE Response Body
- Connect
- Erzeugt Tunnel zum Server anhand von abgefragter Ressource
- Options
- Fragt nach Optionen für spezifische Ressource
- Trace
- Look-back Test entlang der Server
- Get
Uniform Resource Locator (URL)
- :
- mailto:account@mail-domain.org
- file:///verzeichnis/unterverzeichnis/datei
- http://server.example.org:8080/index.html?param1=A¶m2=B
HTTP Response Codes
- 100 - 199
- Informationen
- 101 Switching Protocols
- 200 - 299
- Erfolgreiche Antworten
- 200 ok
- 204 keine Inhalte
- 300 - 399
- Umleitungen
- 301 Moved Permanently
- 400 - 499
- Client Error Response
- 401 Unauthorized
- 404 Not Found
- 500 - 599
- Server Error Response
- 500 Internal Server Error
- 100 - 199
REST, JAX-RS, Validation
Representational State Tranfer, REST
- Architektur basierend auf HTTP
- beschreibt uniformes Interface zur Kommunikation
- Beschränkungen
- Server und Client reagieren unabhängig
- Stateless: Server kennt Stand des Clients nicht
- Cacheable: Server sagt ob Daten gecached werden sollen
- Uniformes Interface: Client und Server interagieren in vorhersehbaren Weg
- Layered: Funktioniert immer gleich, unabhängig von Objekten zwischen Systemen
- CRUD Operationen
- Create: POST
- Read: GET
- Update: PUT, PATCH
- Delete: DELETE
JAX-RS
- Get: @GET
- Head: @HEAD
- Post: @POST
- Put: @PUT
- Patch: @PATCH
- Delete: @DELETE
- Options: @OPTIONS
- @PathParam
- @QueryParam
- @HeaderParam
- @CookieParam
- @FormParam
- @MatrixParam
- @DefaultValue
Validation
- mit @Valid annotation nach Input
Caching (HTTP) & Redis
Caching
- Temporärer Speicher
- Bereits erhaltene Werte speichern und schneller erneut verwenden
- Web Content
- Browser: Browser Cache, Resolver Cache
- Proxy: Proxy Cache, CDN Cache, DNS Cache
- Application: Distributed Cache, Application Data Cache
- Database: Buffer Pool, In Memory Storage Engine
HTTP Caching
- In Browser und Proxy
- Kontrolliert durch HTTP Response Header
- Cache Control Header
- TTL: Time To Live
- Typen von Cache (Control)
- Public
- Private
- No-Cache, in Cache gespeichert muss aber vor jedem Benutzen validiert werden
- No-Store
Distributed Cache
- Sammelt RAM mehrerer Systeme zu einem System
- Nutzen
- Datenverkehr reduzieren
- Anwendung beschleunigen
- Web Session Data speichern
- Ausfällen standhalten
Redis, Remote Dictionary Service
- Keys
- sollte Schema key:value folgen
- kann genutzt werden um nach werten zu filtern
- Key kann mit TTL versehen werden
- Keys