- Anwendung läuft "verteilt" auf verschiedenen Systemen
- Uniformer Zugriff
- Vorteil: Last verteilt sich auf allen Replicas
- Aufstocken der Resourcen bei steigender Last kostspielig
- Resourcen müssen dauerhaft gewartet werden, auch bei fallender Last
- Resourcen werden nicht optimal utilisiert.
- Was ist eine der großen Herausforderung für polyglote verteilte Systeme und welche Technologie macht dies erst sehr simpel umsetzbar?
- Wie realisiert man Kommunikation zwischen Services und welche HErausforderungen gibt es? Welche Konzepte gibt es um diese Herausforderungen anzugehen?
- Weitere Probleme? welche konzepte und technologien gibt es hierfür?
- Sind distributed Systems und cloud computing das gleiche?
- Iaas; Paas; Saas? Erklären und beispiele geben.
- Typische Probleme in der traditionellen IT? Motivation für verteilte Systeme?
- Einen Fork des Repositories erstellen
- Codespace öffnen
- Mittels
sdk install java 17.0.0-tem
Java 17 installieren - Mit
java -version
validieren, dass Java 17 installiert ist - Projekt über VS Code ausführen
- @RestController implementieren mit @GetMapping("hello") der "Hello World"! zurück gibt
- Warum nutzen wir Frameworks wie Springboot?
- Welche Vorteile bieten Frameworks?
- Microservices verstehen und erklären? Warum von Monolithischen Anwendungen hin zu Microservices?
- Welche Herausforderungen gibt es für Microservices?
- Welche anderen Frameworks kennt ihr? Rein als Vergleich der Funktionsweise
Problem bei (polygloten) verteilten Systemen:
- Jede Umgebung muss aufwendig konfiguriert werden. Sowohl Server als auch Lokale Dev Environments
- Konfiguration muss identisch repliziert werden um Fehlerquellen durch unterschiedliche Umgebungen zu vermeiden
- Macht polyglote Systeme sehr aufwendig da für jede Sprache die eigene Entwicklungsumgebung geschaffen werden muss.
- Wechseln der versionen in der Entwicklung auch lästig
Probleme werden durch Containerisierung vermieden.
- Zielumgebung braucht lediglich die Container Engine.
- Container bringen mit was sie benötigen
- Aus dem Sourcerepo wird mittels Dockerfile ein Image (blaupause) erstellt.
- Aus diesem Image lassen sich beliebig viele Instanzen generieren => Container
- Images lassen sich auf Docker Hub, einem öffentlichen Image Repository ablegen.
- Images lassen sich so von überall beziehen
- Welche Probleme sind die wesentliche Motivation für Container und wie werden diese gelöst?
- DevOps Problem?
- Was ist die grundlegende Funktionsweise eines Containers?
- Wie containirisiere ich eine Applikation?
- Was ist ein Image und was ein Container?
- Was ist DockerHub?
- Muss für jeden einzelnen container die umgebung einzeln installiert werden ?
- Läuft der container mit rechenpower des Lokalen pc oder auf einem server?
- Images vs VMs? Was sind wesentliche unterschiede?
Mechanismus um Persistenz bei (generell eher kurzlebigen) Containern zu realisieren.
Mechanismus um Kommunikation über die Isolierung der Container hinaus zu realisieren
Definition und einfache Erstellung einer Container "Landschaft"
-
Wie funktioniert persistenz bei Docker per default (ohne volumes)?
-
Was sind Volumes und bei welchen Problem helfen Sie?
-
Was passiert wenn ein Container mit einem Volume abstürzt und neu gestartet wird? was muss man beachten?
-
Wofür dienen Networks?
-
Was sind Nachteile der Docker Networks?
-
Was ist Docker Compose und wofür dient es?
-
Anhand eines Beispiel-Docker-Compose-files:
- Erkläre was entsteht wenn das docker compose ausgeführt wird.
- Wie sähe im Vergleich der "klassische" Weg ohne Docker Compose aus
-
Was ist wichtig zu beachten bei der Image Referenz? Welceh Alternative gäbe es?
Schnittstellendefinition um die Kommunikation mit Services übers Netzwerk zu "vereinheitlichen".
- Was ist eine REST schnittstelle?
- Was sind die Vorteile?
- Was ist das Richardson Maturity Model?
Patterns um ein verteiltes system abzuhärten.
- Patterns benennen.
- Szenario skizzieren um typische Probleme in einer cloud native application landscape aufzuzeigen.
- Resilience Patterns um Szenario zu lösen
Kubernetes Topics:
- Kubernetes Cluster
- The Contol Plane
- Worker Nodes
- Pods
- Deployments
- Services
- Desired State Management
Ein zusammengehöriges System über mehrere Docker Hosts zu umspannen ist nicht so elegant wie wir es uns vorstellen
Kubernets maskiert die zugrunde liegende hardware und fungiert als ein zusammengehöriges System:
Übungen zu Kubernetes befinden sich auf der Novatec Lecture Website Um die Übungen auszuführen lässt sich der Codespace nutzen. Hier ist bereits eine Minikube Installation vorhanden. Diese einfach über
minikube start
starten und anschließen lassen sich kubectl
befehle ausführen.
- Was sind die grundlegenden Prinzipen und Charakteristika von Kubernetes?
- Was ist der Kubernetes Cluster? was sind dessen Komponenten?
- Wo wäre ein Multi-Cluster setup sinnvoll?
- Wie stellt Kubernetes sicher dass meine Applikationen so laufen wie sie sollen?
- Wie definiere ich meine Applikationen damit sie in Kubernetes laufen? wie sieht der gesamte Prozess vom fertigstellen der Entwicklung bis zur lauffähigen Anwendung auf K8s aus?
- Was sind die unterschiedlichen K8s objekte?
- Weshalb nutzen wir in k8s pods statt direkt mit containern zu arbeiten?
- Wehalb bevorzugen wir das arbeiten mit Deployments statt direkt mit pods?
- Was passiert wenn ein Knoten ausfällt; wie sieht der recovery Prozess aus?
Zusammenfassung der grundlegenden Design Prinzipien bei der Entwicklung von Cloud nativen Anwendungen.
- Was sind 12 Faktor Apps
- Einzelne Faktoren und deren Vorteile erklären ( nicht notwendigerweise Wort für Wort sondern eher die Grundidee dahinter )