Aufgabe 5.1: Virtualisierung

In der Vorlesung haben Sie die Prinzipien der Virtualisierung kennen gelernt.

1. Welche Arten der Virtualisierung gibt es und was sind die Vor- und Nachteile?

  • Anwendungsvisualisierung

    • Vorteil:
      • Nutzer hat erleichtert Zugriff auf eine Anwendung durch einen Server welche alle persönlichen Informationen und andere Charakteristiken der Anwendung speichert
      • Nutzer kann durch einen thin Client Zugriff auf die Anwendung haben
    • Nachteil:
      • Nutzer hat eventuell wenig Zugriffsrechte (könnte auch Vorteil sein)
      • Kein direkten Zugriff auf die Hardware
    • Beispiel: VMware, ThinApp
  • Betriebssystemvirtualisierung

    • Vorteil:
      • mehrere Virtuelle Instanzen eines Betriebssystems auf einer einzelnen Hardware-Plattform
      • effizientere Nutzung von Ressourcen und höhere Flexibilität bei der Verwaltung verschiedener Anwendungen und Dienste
    • Nachteil:
      • höherer Aufwand für Ressourcenisolierung und -teilung für mehrere VMs
      • Ressourcen (CPU, Speicher und Netzwerk) müssen geteilt werden
    • Beispiel: Docker (Container)
  • Hardwarevirtualisierung

    • Vorteil:
      • mehrere Betriebssysteme oder VMs auf einer physischen Hardware gleichzeitig
      • Abstraktion der physischen Ressourcen (Rechenwerk, Speicherwerk, Netzwerk), sorgt für eine effiziente Ressourcennutzung, da mehrere VMs auf einer Hardware laufen können
      • Bessere skalierbarkeit, neue VMs können schnell und relativ einfach erstellt werden, ohne dass zusätzliche Server benötigt werden
      • VMs können auf verschiedenen Betriebssystemen laufen
    • Nachteil:
      • Erhöhter Overhead durch Ressourceneinteilung
      • Komplexität, vorallem wenn immer mehr VMs dazu kommen, kann die Verfügbarkeit und Operabilität darunter leiden
      • Ressourcenkonflikt, falls mehrere VM Nutzer zum Beispiel CPU intensive Aufgaben durchführen wollen, kann das Gesamtsystem darunter leiden
    • Beispiel: Microsoft Hyper-V

2. Warum ist Emulation ein Thema?

Mit der relativ schnell fortschreitenden Entwicklung der Technologie wird die Instandhaltung von Programmen und Systemen für die nächste Generation bzw. fortschrittlichere Systeme teilweise immer schwieriger. Hier kommen Emulatoren ins Spiel, die auf einem System genutzt werden, um beispielsweise eine ältere Version eines Programms auszuführen, die mit dem aktuellen System (aus welchen Gründen auch immer) nicht mehr kompatibel ist. Das System „emuliert“ dann die vom Programm erwartete technische Architektur, sodass das Programm auf dem neuen Gerät genauso läuft, wie es sollte. Ein Beispiel sind 64-Bit-Systeme, die 32-Bit-Systeme emulieren, um Programme, die für 32-Bit-Systeme entwickelt wurden, zum Laufen zu bringen.


Aufgabe 5.2: Cloud Definition

Das National Institute of Standards and Technology (NIST) ist in den USA unter anderem für Standardisierungsprozesse zuständig.

1. Erklären Sie Cloud Computing anhand der Definition des NIST.

NIST Cloud Computing Definition

”cloud computing is a model for enabling ubiquitous, convenient, on-demand network access to a shared pool of configurable computing resources (e.g., networks, servers, storage, applications and services) that can be rapidly provisioned and released with minimal management effort or service provider interaction.” Final Version of NIST Cloud Computing Definition Published

Das NIST definiert Cloud Computing vor allem durch fünf Charakteristiken:

  • On-demand self-service
    • Nutzer können Ressourcen bei Bedarf eigenständig anfordern.
  • Broad network access
    • Zugriff ist über das Netzwerk (z. B. Internet) von überall möglich.
  • Resource pooling
    • Ressourcen werden dynamisch mehreren Nutzern bereitgestellt.
  • Rapid elasticity or expansion
    • Kapazitäten können flexibel und schnell angepasst werden.
  • Measured service
    • Die Nutzung wird überwacht und basierend darauf abgerechnet.

In meinen eignen Worten:

  • Cloud Computing ist ein Service, der einem Nutzer flexibel bereitgestellt wird. Der Nutzer kann selbst auf diesen Service zugreifen wann und wie er will. Ihm werden Ressourcen wie Rechenleistung, Speicherleistung und Netzwerkleistung bereitgestellt, welche an die Anforderungen des Nutzers schnell skalierbar sind. Der Nutzer zahlt nur für die gemessenen genutzten Services

2. Welche Komponenten braucht eine IaaS Cloud Middleware mindestens?

NIST

”*Infrastructure as a Service (IaaS).*The capability provided to the consumer is to provision processing, storage, networks, and other fundamental computing resources where the consumer is able to deploy and run arbitrary software, which can include operating systems and applications.” The NIST Definition of Cloud Computing

  • Processing
    • (Bereitstellung von Rechenressourcen (CPU/GPU) für Anwendungen.)
  • Storage
    • (Speicherplatz, auf dem Daten abgelegt werden können.)
  • Networks
    • (Netzwerkinfrastruktur, um Verbindungen zwischen den Komponenten sowie zu externen Netzwerken herzustellen.)
  • Möglichkeit Software auf der Cloud laufen zu lassen
    • evtl. besser formuliert Bereitstellung einer Umgebung zur Ausführung benutzerdefinierter Software
    • ( Die Fähigkeit, benutzerdefinierte Software, einschließlich Betriebssysteme und Anwendungen, zu installieren und auszuführen.)

Aufgabe 5.3: Enabling Technologies

Welche Technologien waren für die Entstehung/Entwicklung von Cloud Computing notwendig?

  • Virtualisierung: Ermöglichte es, physische Server in mehrere virtuelle Maschinen aufzuteilen und flexibel zu nutzen.
  • Breitband-Internet: Schuf die Grundlage für den schnellen und zuverlässigen Zugriff auf entfernte Ressourcen.
  • Verteilte Systeme: Legten die Basis für Skalierbarkeit und Redundanz.
  • Rolle großer Unternehmen: Amazon, Google und andere entwickelten Cloud-Dienste, um eigene IT-Ressourcen besser zu nutzen und als Services anzubieten (z. B. AWS 2006).
  • Frühe Plattformen wie BSCW: Zeigten den Nutzen von webbasiertem Zugriff und Zusammenarbeit, waren jedoch nur ein kleiner Teil der Entwicklung.

Beispielsweise führte Amazon mit AWS (Amazon Web Services) die Elastic Compute Cloud (EC2) ein, was als Startschuss für moderne Cloud-Dienste gilt. Diese Dienste adressierten die Herausforderung, IT-Ressourcen flexibel an den Bedarf anzupassen, insbesondere zu Spitzenzeiten (z. B. Weihnachten bei Amazon). Daraus entstand die Idee, ungenutzte Ressourcen als Service bereitzustellen.


Aufgabe 5.4: Cloud Broker

Charakterisieren Sie den Cloud Broker.

Was ist ein Cloud Broker?

Ein Cloud Broker vermittelt zwischen Provider und Endkunden

1. Welche Arten gibt es?

Es gibt hauptsächlich drei Arten von Cloud Brokern:

  • Integrations-Broker
  • Aggregations-Broker
  • Entscheidungs-Broker

2. Wie unterscheiden sich diese?

  • Integrations-Broker:

    • Beschreibung: Diese Brokerart spezialisiert sich auf die Integration verschiedener Cloud-Dienste und -Anbieter. Sie ermöglichen es den Nutzern, verschiedene Services nahtlos zu kombinieren und zu verwalten.
    • Funktion: Sie bieten APIs und Tools, um unterschiedliche Cloud-Plattformen miteinander zu verbinden, sodass Daten und Anwendungen über verschiedene Umgebungen hinweg funktionieren.
  • Aggregations-Broker:

    • Beschreibung: Aggregations-Broker bündeln Dienste von mehreren Anbietern und stellen sie als einheitliches Angebot zur Verfügung.
    • Funktion: Sie ermöglichen den Nutzern den Zugriff auf eine Vielzahl von Cloud-Diensten über eine einzige Schnittstelle, wodurch die Verwaltung vereinfacht wird.
  • Entscheidungs-Broker:

    • Beschreibung: Diese Brokerart unterstützt Nutzer bei der Auswahl des passenden Cloud-Dienstes basierend auf spezifischen Kriterien und Anforderungen.
    • Funktion: Sie analysieren die Bedürfnisse des Nutzers und empfehlen die optimalen Cloud-Lösungen, oft unter Berücksichtigung von Kosten, Leistung und Sicherheitsanforderungen.

3. Nennen Sie einen typischen Anwendungsfall für jede Brokerart.

  • Integrations-Broker:

    • Anwendungsfall: Ein Unternehmen möchte seine bestehenden On-Premises-Anwendungen nahtlos mit Cloud-Diensten wie AWS und Azure integrieren. Der Integrations-Broker stellt die notwendigen Schnittstellen bereit, um Daten zwischen den unterschiedlichen Plattformen auszutauschen und die Anwendungen konsistent zu betreiben.
  • Aggregations-Broker:

    • Anwendungsfall: Ein mittelständisches Unternehmen benötigt Zugriff auf verschiedene Cloud-Dienste wie Speicher, Rechenleistung und Datenbanken von unterschiedlichen Anbietern. Der Aggregations-Broker fasst diese Dienste zusammen und bietet eine zentrale Verwaltungskonsole, über die das Unternehmen alle benötigten Ressourcen effizient nutzen kann.
  • Entscheidungs-Broker:

    • Anwendungsfall: Ein Startup möchte die kosteneffizienteste und leistungsstärkste Cloud-Lösung für seine neue Anwendung finden. Der Entscheidungs-Broker analysiert die spezifischen Anforderungen des Startups und empfiehlt die besten Cloud-Anbieter und -Dienste, die sowohl den Budgetvorgaben als auch den technischen Anforderungen entsprechen.

Aufgabe 5.5: Cloud Rollen

Beschreiben Sie die Rollen in der NIST Cloud Computing Reference Architecture. Welche Eigenschaften/Aufgaben haben diese?

  1. Cloud Provider

    • Aufgabe: Stellt die Cloud-Infrastruktur und -Dienste bereit, verwaltet Sicherheit, Wartung und Skalierung.
    • Beispiele: Amazon Web Services (AWS), Microsoft Azure, Google Cloud Platform (GCP).
  2. Cloud Consumer

    • Aufgabe: Nutzt Cloud-Dienste basierend auf Abonnementmodellen, z. B. SaaS, PaaS oder IaaS.
    • Beispiele: Unternehmen, die Salesforce (SaaS) verwenden, Entwicklerteams, die Heroku (PaaS) nutzen, oder Start-ups, die AWS EC2 (IaaS) einsetzen.
  3. Cloud Broker

    • Aufgabe: Vermittelt zwischen Provider und Consumer, optimiert Auswahl, Integration und Management der Dienste.
    • Beispiele: RightScale, CloudBolt, Scalr.
  4. Cloud Auditor

    • Aufgabe: Prüft Sicherheit, Datenschutz und Compliance der Cloud-Dienste unabhängig.
    • Beispiele: Zertifizierungsstellen wie ISO/IEC 27001-Auditoren, SOC 2-Prüfer.
  5. Cloud Carrier

    • Aufgabe: Verbindet Consumer mit der Cloud-Infrastruktur über Netzwerke und Transportdienste.
    • Beispiele: Internetanbieter wie Deutsche Telekom, Verizon, AT&T.

Aufgabe 5.6: Portabilität und Interoperabilität

Erklären Sie die Unterschiede zwischen Portabilität und Interoperabilität zwischen Clouds und erläutern Sie dabei die Vorteile des Einsatzes von Containern.

  • Interoperabilität beschreibt, zu welchem Grad zwei oder mehrere Systeme, Produke oder Komponente gegenseitig Informationen austauschen können und diese Informationen auch wirklich nutzen können. Kurzgesagt sagt die Interoperabilität aus, ob die Informationen die ich auf System A immernoch gleich sind, wenn ich sie an System B schicken würde oder dort darauf zugreifen würde.

  • Portabilität beschreibt, wie potenziell einfach es ist von einem IT-System zu einem anderen zu migrieren. Dieses Potential ist oftmals nicht 100%, da infrastrukturelle IT-Systeme oftmals nicht identisch sind.

Container spielen nun eine wichtige Rolle diesen Problemen von Informationserhaltung entgegen zu wirken. Mit einem Container wird die Umgebung und alle nötigen Variablen festgelegt und die zu laufende Anwendung kann innerhalb dieses Containers laufen. Da die Umgebungsvariablen im Container festgelegt werden, ist die Portabilität und auch Interoperabilität sehr hoch, was sie sehr gut dafür macht sicher zu gehen, dass Anwendungen auch auf verschiedenen IT-Systemen gleich funktionieren.

Ein passendes Paper was ich bei meiner Recherche gefunden habe WIK: Interoperabilität, Portabilität und Wechselmöglichkeit: Implikationen für die Cloud


Aufgabe 5.7: IaaS-, PaaS- und SaaS-Clouds

Stellen Sie in einem Schichtdiagramm von der reinen Hardware bis zu Applikationen die Zusammenhänge zwischen IaaS-, PaaS- und SaaS-Clouds dar und geben Sie für jede der drei Cloud-Ausprägungen einen typischen Repräsentanten an.


classDiagram
    class Infrastruktur {
    }
    class IaaS {
        +AWS
        +Google Cloud
    }
    class PaaS {
        +Vercel
        +AWS Elastic Beanstalk
    }
    class SaaS {
        +Google-Apps (z.B. Gmail)
        +Dropbox
    }

    Infrastruktur --> IaaS
    IaaS --> PaaS
    PaaS --> SaaS


Aufgabe 5.8: Praktisch: StirlingPDF als Docker-Container aufsetzen

Containerisierung ist ein zentraler Bestandteil moderner Cloud-Computing-Technologien. Ziel dieser Aufgabe ist es, praktische Erfahrungen mit der Einrichtung und Verwaltung von Containern mithilfe von Docker und Docker-Compose zu sammeln. Sie setzen dabei StirlingPDF, ein Open-Source-Dokumentenmanagement-Tool, als Docker-Container auf Ihrer Hostmaschine auf.

Aufgabenstellung

Starten Sie StirlingPDF als Docker-Container mithilfe von Docker-Compose. Der Container soll auf Port 10000 Ihrer Hostmaschine laufen. Gehen Sie dabei wie folgt vor:

1. Git-Repository klonen

Klonen Sie das Git-Repository von StirlingPDF von der offiziellen GitHub-Seite:
https://github.com/Stirling-Tools/Stirling-PDF

2. Docker-Compose-Datei anlegen

Kopieren Sie die Beispiel-docker-compose.yml-Datei aus der Projektbeschreibung oder der README des Repositories und legen Sie diese in einem passenden Verzeichnis auf Ihrem Rechner an.

3. Port und Verzeichnisse anpassen

Ändern Sie die Standardkonfiguration in der docker-compose.yml-Datei so, dass der Service auf Port 10000 Ihrer Hostmaschine zugänglich ist. Passen Sie bei Bedarf auch Verzeichnis-Mounts an, um Daten persistieren zu können.

4. Container starten

Starten Sie den Container mit folgendem Befehl:

docker-compose up -d

5. Überprüfung

Überprüfen Sie, ob StirlingPDF unter http://localhost:10000 erreichbar ist.


Abgabe

Reichen Sie Ihre bearbeitete docker-compose.yml-Datei und gegebenenfalls einen Screenshot ein, der zeigt, dass StirlingPDF erfolgreich auf Ihrer Hostmaschine läuft.

version: "3.3"
services:
  stirling-pdf:
    image: stirlingtools/stirling-pdf:latest
    ports:
      - "10000:8080"
    volumes:
      - ./trainingData:/usr/share/tessdata # Required for extra OCR languages
      - ./extraConfigs:/configs
    #      - ./customFiles:/customFiles/
    #      - ./logs:/logs/
    environment:
      - DOCKER_ENABLE_SECURITY=false
      - INSTALL_BOOK_AND_ADVANCED_HTML_OPS=false
      - LANGS=en_GB

Funfact: Ich hatte Stirling PDF schon lange auf GitHub gestarred war aber trotz des minimalen Aufwands und der geringen Use-Cases zu faul Stirling aufzusetzden, dementsprechend war es relativ nett, dass es als praktische Aufgabe drankam :D


Zusatzinformationen

Falls während der Bearbeitung der Aufgabe Probleme auftreten, können die folgenden Hinweise hilfreich sein:

1. Port bereits belegt

Sollte der Port 10000 auf Ihrer Hostmaschine bereits verwendet werden, können Sie einen anderen freien Port wählen. Ändern Sie in der docker-compose.yml-Datei den Port-Mapping-Eintrag wie folgt:

ports:
  - "NEUER_PORT:80"

Ersetzen Sie NEUER_PORT durch einen verfügbaren Port, z. B. 10001, und starten Sie den Container erneut.

2. Fehlerbehebung mit Logs

Wenn der Container nicht wie erwartet startet, können die Logs des Containers helfen, den Fehler zu diagnostizieren. Verwenden Sie folgenden Befehl, um die Logs anzuzeigen:

docker-compose logs

3. Container neu starten

Sollte der Container nicht wie erwartet funktionieren, können Sie ihn stoppen und neu starten. Nutzen Sie dazu die folgenden Befehle:

docker-compose down
docker-compose up -d

4. Weiterführende Informationen

Weitere Informationen zu Docker und Docker-Compose finden Sie in der offiziellen Dokumentation: