APPE
HSLU - Modul
HSLU - Modul
Kartei Details
Karten | 141 |
---|---|
Sprache | Deutsch |
Kategorie | Informatik |
Stufe | Universität |
Erstellt / Aktualisiert | 06.06.2020 / 21.10.2024 |
Weblink |
https://card2brain.ch/box/20200606_appe
|
Einbinden |
<iframe src="https://card2brain.ch/box/20200606_appe/embed" width="780" height="150" scrolling="no" frameborder="0"></iframe>
|
1.3.4 Was sind Herausforderungen bei Microservices?
Zentrale Herausforderung sind und bleiben die Abhängigkeiten, welche bei Microservices primär durch Kommunikation entstehen. Möglichst wenig und gering (minimale Kopplung, ideal keine!)
⇒ Herausforderung beim Design ("bounded contexts").
⇒ Abhängigkeits-Management und Rückwärtskompatibilität
Abhängigkeiten entstehen durch Kommunikation
1.3.6 Zwischen welchen Kommunikationsarten unterscheidet man bei Microservices?
Man unterscheidet zwischen zwei verschiedenen Kommunikationen:
Cient und [Port-]Microservice
- Leichtgewichtige Kommunikation
- In der Praxis häufig REST-basiernde Kommunikation (JSON oder XML Format)
- Mehrheitlich synchrone Kommunikation
- Man nutz gerne das Gateway-Pattern
Inter-Kommunikation zwischen Microservices
- Sollte wenn immer möglich vermieden werden. (starke Kopplung)
- Man nutz eine tolle Technik aus der Message oriented Architektur →Queues!
- Neue Funktion können so dynamisch ergänzt werden
1.3.7 Welchem Pattern von GOF entspricht das Gateway-Pattern und welche Aufgaben übernnimmt der Gatway sonst noch?
Gateway entspricht dem Konzept des Fassaden-Patterns → vereinfacht die Implementation des Clients
- Übernimmt auch Authentifizierung und Verschlüsselung
- Kann einfache Mapping Transformationen vornehmen
- Wird als eigener Service implementiert → gibt auch generische Gateways
Die Fähigkeit von technischen Systemen, bei Störungen bzw. Teilausfällen nicht vollständig zu versagen, sondern wesentliche Systemdienstleistungen aufrechtzuerhalten.
1.3.9 Was macht das Microservice Pattern Circuit-Breaker?
Situation:
Zwei Services kommunizieren synchron miteinander. Beispiel: API-Gateway zu Port-Microservice.
Man legt einen transparenten "circuit-breaker"-Proxy dazwischen. Dieser prüft permanent, wie lange die Request dauern. Wird ein konfigurierbares Zeitlimit überschritten, unterbricht der Proxy die Verbindung und bricht alle neuen Request sofort ab (fail-fast). Nach einem konfigurierbaren Timeout öffnet der Proxy wieder und prüft erneut. Der Vorgang kann sich beliebig wiederholen.
Vorteil: Bei einer Störung/Ausfall werden weniger Ressourcen verschwendet, Aufrufer brechen schneller ab.
Transaktionen verursachen eine enge semantische Kopplung → Mit SAGA Pattern arbeiten.
1.3.11 Was sind Herausforderungen beim Logging auf Microservices?
- Logging findet auf verschiedenen Systemen, ggf. mit verschiedenen Sprachen und Frameworks statt.
- Stark verteilte Datenhaltung, Netzwerkinfrastruktur, unter Umständen auch in der Cloud und Serverless!
- Durch (gewollte) möglichst lose Kopplung verliert man ggf. die Nachverfolgbarkeit (Traceability) von Businessprozessen.
1.3.12 Welche Schwierigkeiten entstehen beim Tracing bei Microservices?
Wenn ein Service eine Anzahl von Folgeaktivitäten (weitere Services) aufruft und diese asynchron durch Queues verzögert ausgeführt werden.
Lösung:
Man verpasst jedem Client-Request einen Fingerabdruck (Correlation-ID) und reicht diesen konsequent an alle Unter- bzw. Folgeaufrufe weiter. Somit wird unabhängig vom zeitlichen und örtlichen Kontext ein kompletter Request relativ einfach nachvollziehbar.
1.3.13 Was ist eine Correlation ID? (UUID)
Universally Unique Identifier
Ein UUID besteht aus einer 16-Byte-Zahl, die hexadezimal notiert und in fünf Gruppen unterteilt wird.
- Historisch existieren fünf verschiedenen Varianten (Type 1 - 5).
- Konkretes Beispiel für Java: Klasse java.util.UUID produziert mit randomUUID() pseudozufällige Type 4 UUIDs.
- Beispiel: 4e6abea6-d18a-49c1-a7b0-4f57702e6602
- Schnelle Generierung möglich, typisch kein Problem.
Sind explizit in die Software eingebaute Messpunkte, welche einen Rückschluss auf die Leistung eine (Teil-)Systems erlauben.
1.3.15 Nennen Sie einige Beispiel für Messpunkte
- Zähler (counter) der die Anzahl Ereignisse kumuliert
- Messwert (gauge): Absoluter Wert (Anzahl Elemente in Queue)
- Meter (meter): Messwert/Zeiteinheit (Ereignisse pro Min.)
- Histogramme: Statische Verteilungen von Messwerten (z.B: Min, Max, Mittelwert etc.)
1.5.1 Was ist ein API und was soll diese bieten?
Schnittstelle die explizit darauf ausgelegt ist, eine Softwareeinheit nutzbar zu machen.
- Möglichst einfache Nutzung
- Soll Aufwand für Nutzer minimieren
- Soll Unabhängigkeit von einer konkreten Implementation bieten
Wird typisch vom Nutzer verwendet und vom Anbieter implementiert.
1.5.3 Aus welchen Komponenten besteht eine API und was wird in der API definiert?
Besteht typischerweise aus mehreren Klassen/Interfaces.
Definiert gemeinsame Funktionen (Interfaces) und Datentypen
1.5.4 Wann wird eine Schnittstelle zur API?
Ist eine Frage des Scopes.
Die Definition, welchen Scope und somit welche «Wichtigkeit» eine Schnittstelle hat, erfolgt auf Architektur-Ebene.
- Somit nicht primär technisch getrieben!
Info:
Eine rein technisch betrachtet identische Schnittstelle kann:
- Im (Detail-)OO-Design in einer Implementation existieren.
- Die Schnittstelle zu einer Komponenten darstellen.
- Die Schnittstelle zu einem Framework darstellen.
- Die Schnittstelle zu einem Teilsystem darstellen.
- Die Schnittstelle zu einem vollständigen System darstellen.
Der Scope und die Wichtigkeit wird auf Architekturebene festgelegt.
1.5.6 Was ist die Motivation für gute APIs?
- Fördern die Modularität und Entkopplung
- Machen komplizierte Dinge möglichst einfach nutzbar
- Machen die Implementation austauschbar
- Machen das Produkt attraktiv
- Binden die Nutzer
- Nutzer investieren in API Schulung
1.5.7 Was verursachen schlechte APIs?
- Verursachen Ärger und Kosten
- Fehlerhafte Nutzung und aufwendige Fehlersuche
- Verführen dazu eine vorhandene Lösung nicht zu nutzen und etwas selber zu machen
- Verführen zu unsauberen Arbeiten
1.5.8 Was sind Herausforderungen bei APIs?
- APIs leben fast ewig → auch derer Fehler
- Nur mit grossem Aufwand und Konsequenzen änderbar
- Grosse Kunst: API so zu entwerfen, dass sie entwicklungsfähig ist.
1.5.9 Was sind die Hauptziele einer guten API?
- Maximale Entkopplung
- Maximales Information Hidding
- Maximale Kohäsion
1.5.10 Was für Qualitätsanforderungen hat eine API?
- Konsistent → Namensgebung und Regeln konsequent einhalten
- Namensgebung → Einfache, eingängige treffende Namen wählen
- Verhalten → Klare Erwartungen erfüllen, ohne Nebeneffekte
- Erweiterbarkeit → Offen für Weiterentwicklung
- Dokumentation → Einfache und hilfreiche Doku
- Perspektive → Es soll für den Nutzer einfach sein
- Sicherheit → Die Nutzung soll sicher sein
1.5.11 Was sind API Patterns und wofür werden sie verwendet?
Werden verwendet, um in APIs die Namensgebung und das Verhalten möglichst vorhersehbar und durchgängig zu gestalten.
Bsp:
Repetition
Verwende immer den gleichen Namen für die gleichen Dinge.
Periodisch
Verwende immer die gleiche Bezeichnung für gleiches Verhalten.
Symmetrie
Biete wenn möglich symmetrische Methode an, z.B. für das Öffnen und Schliessen, oder das Belegen und Freigeben.
Der Nutzer selber sowie auch der Anbieter.
JDBC als API zu Datenbanken. REST
1.5.14 Was ist ein SPI (Service Provider Interface)?
- Eine spezielle Teilmenge oder Ergänzung zu einer API
- Ist für Anbieter gedacht
- Kann verschiedene Konfigurationen anbieten
- Kann eine Konfig-Datei sein (Properties)
- Die bewusste Abgrenzung durch ein explizites SPI verbessert die Gesamt-API und schützt sie massgeblich vor falscher Nutzung.
1.5.15 Was ist Class based API?
- Werden über ein oder mehrere Klassen realisiert
- Typisch in einem Package oder Modul abgeschlossen
- Geschichtete Architekturen → Datentypen zwischen Schichten brechen!
CRUD = Creat / Read / Update / Delete.CRUD ist ein Akronym für die vier fundamentalen Operationen des Datenmanagement
REpresentational State Transfer
REST ist ein Architekturstil und definiert einen Satz von Prinzipien, welche eine konkrete, REST-konforme Architektur einhalten soll.
1.5.21 Was sind die wesentlichen REST-Prinzipien?
Die wesentlichen REST-Prinzipien sind:
- Statuslose Kommunikation (Zustandslosigkeit)
- Ressourcen mit eindeutiger Identifikation (URI)
- Verwendung von (http-)Standardmethoden
- Hypermedia-Prinzip (Hinter diesem Prinzip steht das Konzept von Verknüpfungen von unterschiedlichen Ressourcen über Links.)
- Unterschiedliche Repräsentation von Ressourcen (Darstellung der Informationen)
1.5.22 Auf was basiert eine REST-konforme Architektur?
- Auf einer verteilten Client-Server Architektur, meist http-Protokollen
- RESTfull verlangt, dass jedoch unterschiedliche Protokolle genutzt werden können
1.5.23 Wie muss die Kommunikation bei REST sein? Wie ergibt sich der Status einer Applikation? Welche Informatione dürfen nicht existieren?
- Zustandslos
- Zustand wird von Client gehalten, oder vom Server in einem veränderten Ressourcenstatus abgebildet
Der Status der Applikation ergibt sich ausschliesslich aus der Ressourcenrepräsentation (URI) und dem Ressourcenstatus.
- Es dürfen keine Sitzungsinformationen existieren. Keine serverseitige «Session»!
Eine Ressource ist einen Informationseinheit, welche über eine URI eindeutig identifiziert bzw. angesprochen werden kann. Sie kann verschieden Datenformate nutzen.
Hypermedia As The Engine Of Application State
1.5.28 Was ist das Richardson Maturity Model und wie funktioniert es?
Zur Beurteilung ob einer Applikation die wesentliche REST-Prinzipien einhaltet:
Level 0: Swamp of the POX (Plain old XML) --> Verwenden von HTTP und XML
Level 1: Verwenden von eindeutigen URIs
Level 2: Verwenden von de Htttp-Standart-MethodenLevel
3: Verwenden von Links zur Navigation (Resource wird angefragt und bekommt weiter links zurück zu weitern Resourcen)
Content-negotiation: Es wird ausgehandelt (definiert) in welcher Repräsentation die Recource übermittelt wird. (Wird in Header festgelegt)