Datenbank

Einleitung

Datenbanken sind seit Jahrzehnten zentrale Komponenten von IT-Systemen. Sie erlauben die dauerhafte Speicherung von strukturierten und unstrukturierten Informationen. Die Konfiguration und der Betrieb einer Datenbank erfordern häufig Expertenwissen. Datenbank-Administratoren (DBA) kümmern sich traditionell um diese Themen.

Zwei grundsätzliche Entwicklungen konnten in den letzten Jahren bei Datenbanken beobachtet werden:

  • Grosse, monolithische Datenbanken verlieren langsam an Bedeutung und stattdessen kommt es zu Aufteilungen von grossen Datenbanken in mehrere kleinere Datenbanken. Diese Entwicklung ist eng verknüpft mit der Modernisierung von Applikationen durch Microservices. Die Aufteilung einer grossen Datenbank in mehrere kleinere Datenbanken bringt eine deutlich bessere Isolation der Workloads und es wird hierdurch ebenfalls möglich, dass die Datenbanken unabhängig voneinander mit mehr oder weniger IT-Ressourcen ausgestattet werden. Das Thema der Isolation ist dahingehend wichtig, da bei einer grossen gemeinsam genutzten Datenbank es sein kann, dass einzelne Datenbank-Operationen so viele IT-Ressourcen des Datenbank-Servers beanspruchen können, dass andere Abfragen hierdurch ausgebremst werden. Dieses Verhalten möchten Unternehmen in jedem Fall verhindern.
  • Die zweite Entwicklung geht weg von einer einzigen bestimmten Datenbank-Technologie innerhalb eines Unternehmens, wie relationale Datenbanken, und hin zu mehreren unterschiedlichen Datenbank-Technologien welche für das jeweilige Einsatzgebiet am besten geeignet sind. Die Vorteile hierbei sind, dass die Workloads bessere Ergebnisse auf diesen zweckgebundenen Datenbanken erzielen und gleichzeitig meistens auch noch kostengünstiger betrieben werden können, da z.B. keine oder nur geringere Lizenzkosten anfallen.

Wie bei fast allen technologischen Entwicklungen gibt es nicht nur Vorteile, sondern ebenfalls auch Nachteile und Herausforderungen. Ein zentraler Aspekt für Unternehmen ist sicherlich das erforderliche, und unterschiedliche Datenbank Know-How aufzubauen und zu bewahren. Mit einer gestiegenen Anzahl unterschiedlich unterstützter Datenbank-Technologien wächst häufig auch die Anzahl benötigter Mitarbeiter, um diese ordnungsgemäss zu konfigurieren und zu betreiben.

Technische Konzepte

Datenbanken verfügen über eine Vielzahl an unterschiedlichen technischen Konzepten. Da dieser Kurs kein Datenbank-Kurs ist, werden die technischen Konzepte nicht im Detail erklärt. Stattdessen wird dieser Abschnitt die für den Cloud-Kontext relevanten technischen Aspekte erklären.

Werden Datenbanken in der Cloud verwendet, so gibt es je nach genutzten Service zwei grundsätzliche Modelle. Entweder basiert der Service auf einem serverbasierten Ansatz oder aber auf einem serverlosen Ansatz. Eines vorweg, in beiden Modellen laufen die Datenbank immer noch auf Servern. Der Unterschied für Cloud-Nutzer ist, dass ihr euch bei einem serverbasierten Ansatz Gedanken machen müsst über wie viele Ressourcen (CPU, Memory, …) der Datenbank-Server verfügen soll und wo (in welcher Availability Zone) sich dieser befinden soll. Bei einem serverlosen Ansatz fällt dieser Aufwand komplett weg und stattdessen geben User dieser Services eher an wie viele Lese- und Schreiboperation die Datenbank unterstützen soll. Daneben sind serverlose Services so konzipiert, dass sie mit der entsprechenden Last skalieren können, sprich im Hintergrund können mehr oder weniger Ressourcen automatisch zur Verfügung gestellt werden. Eine Konsequenz aus dieser automatischen Skalierung sind die Kosten, welche für den Service anfallen. Gibt es wenig Last, so sind diese gering und wird eine hohe Last abgearbeitet so steigen entsprechend die Kosten.

Die Themen Skalierbarkeit und Verfügbarkeit müssen bei einem serverbasierten Ansatz stärker betrachtet und ggf. aktiviert werden. Soll z.B. der Datenbank-Server nicht nur in einer Availability Zone, sondern noch in einer weiteren Availability Zone laufen, um ein hochverfügbares Setup zu haben, so sind die entsprechenden Optionen für den jeweiligen Service auszuwählen. Ähnlich sieht es aus, wenn es neben dem einzelnen Datenbank-Server noch weitere Datenbank-Server geben soll um z.B. eine grosse Menge an lesenden Anfragen zu bewältigen. Dies muss ebenfalls vom Kunden konfiguriert werden.

Relevante AWS Services

Innerhalb von AWS gibt es unterschiedliche Möglichkeiten Datenbanken zu nutzen. Neben der klassischen Möglichkeit Datenbanken selber in AWS zu verwalten, analog zum Muster wie dies Unternehmen in eigenen Rechenzentren machen, erlaubt es AWS ebenfalls eine Vielzahl unterschiedlicher Datenbank-Typen als von AWS verwaltete Services (Managed Services) zu nutzen. Durch die Nutzung von Managed Services wird der Aufwand für die Nutzung dieser Services für Unternehmen deutlich vereinfacht, da typische Administrationsaufgaben von AWS übernommen werden und automatisiert sind.

AWS bietet über 10 unterschiedliche Datenbank-Services an und in der Folge sollen nur die wichtigsten Services kurz beschrieben werden:

  • Amazon RDS: RDS steht für Relational Database Service und erlaubt es sowohl kommerzielle (Oracle, Microsoft) als auch Open-Source basierte Datenbanken (MySQL, PostgreSQL) als Managed Services von AWS zu beziehen. Es handelt sich bei allen Produkten um relationale Datenbanken, die über einen serverbasierten Ansatz zur Verfügung gestellt werden.

  • Amazon DynamoDB: Hierbei handelt es sich um eine NoSQL-Datenbank bei der zu einem eindeutigen Schlüssel mehrere Attribute (Spalten) persistiert werden. Typische Anwendungsfälle für DynamoDB sind hochfrequentierte Webanwendungen oder Spiele, die Antwortzeiten im einstelligen Millisekundenbereich benötigen. DynamoDB ist eine Implementierung eines serverlosen Datenbank-Service.

  • Amazon ElastiCache: Die Verwendung von Caches erlaubt es Informationen direkt aus dem Memory zurückzugeben und nicht diese erst über eine Datenbankabfrage zu erhalten. Über diesen Ansatz lassen sich Antworten im Mikrosekundenbereich erzielen, und typische Anwendungsfälle sind z.B. das Sitzungs-Management von Online-Shops (Einträge in einem Warenkorb).

  • Amazon Redshift: Eine weitere wichtige Kategorie zum Speichern und Verwalten von grossen Datenmengen sind Data Warehouses (DWH). Der Fokus dieser Systeme liegt auf analytische Aspekte und Nutzer von Data Warehouses versuchen neue Erkenntnisse aus einer Vielzahl von unterschiedlichen Datenquellen zu erhalten. Amazon Redshift ist das schnellste und am häufigsten verwendete Cloud Data-Warehouse weltweit.


Anwendung

Der Betrieb unserer Datenbank als Managed Service von AWS macht Sinn, da bereits viele Themen wir z.B. Skalierbarkeit, Monitoring, Backup & Recovery und Hochverfügbarkeit einfach aktiviert werden können. Benutzer müssen sich nicht wie sonst um die Installation einer virtuellen Maschine, der Datenbank-Engine oder dem Einspielen von Updates kümmern.

In der Beispielanwendung wird die Ablage der Daten in einer Datenbank vorgenommen. Durch diese Separation können alle Ebenen der Anwendung (Front- und Backend sowie Datenbank) abhängig von ihrer Auslastung skaliert werden.

Erstellen einer Amazon RDS Subnetzgruppe

Eine Subnetzgruppe definiert in welche Subnetzen Amazon RDS eine Datenbank platzieren darf.

Aufgabe: Erstelle eine Amazon RDS Subnetzgruppe (engl. Subnet Group) mit dem Namen workshop-db-subnet-group. Konfiguriere die Subnetzgruppe, sodass sie die beiden privaten Subnetze 172.100.3.0/24 und 172.100.4.0/24 aus den Availability Zonen us-east-1a und us-east-1b enthält.

Hinweis
Lösung

Erstellen einer neuen relationalen Datenbank

Aufgabe: Erstelle eine eigene Amazon RDS Datenbank mit dem Namen workshop-db. Die Datenbank soll als Datenbankengine MySQL 8.0.35 benutzen.

Da diese Applikation nicht produktionsfähig sein muss kannst du Kosten sparen indem du die Datenbank als Dev/Test Datenbank erstellst. Damit wir später ein Failover testen können, nutze die Multi-AZ DB instance. Wähle den burstable Typ db.t3.micro aus und deaktiviere storage autoscaling.

Die Datenbank soll in der zuvor erstellten Subnetzgruppe mit dem Namen workshop-db-subnet-group platziert werden. Für die Security Gruppe soll Workshop-RDS-SG ausgewählt werden. Diese Security Gruppe erlaubt nur Netzwerkverbindungen von den Servern die die Applikation ausführen. Außer­dem musst du sicherstellen, dass sich die Applikation mit dem Master usernameclusteradmin und dem Master password todopassword bei der Datenbank authentifizieren/anmelden kann.

Aus Sicherheitsgründen sollten Passwörter selbstverständlich niemals in einer solchen Form dokumentiert werden! Obwohl die Zugangsdaten hier im Klartext dokumentiert sind, wird später der Zugriff auf die Datenbank nur von den Container Instanzen her möglich sein. Zudem wird die Datenbank NICHT über das Internet erreichbar sein. Anstatt nun den Benutzernamen sowie das Passwort zu notieren könnte diese z.B. in AWS Secrets Manager abgelegt werden.

Finde die zwei letzten Einstellungen, definiere den initialen Datenbanknamen als todo und schalte automatische Backups aus.

Kannst du die Einstellung für Verschlüsselung finden? Wie du siehst, ist Verschlüsselung automatisch für Amazon RDS angeschaltet. Amazon RDS benutzt die im Kapitel zur Verschlüsselung server-side encryption Methode zur Verschlüsselung der Daten in Rest. Sollte ein Angreifer die Datenbank hacken, kann dieser nicht die Daten ohne den Schlüssel lesen. Somit hilft die Amazon RDS Voreinstellung das Best Practice Verschlüsselung zu nutzen. Diese Einstellung sollte also unbedingt angeschaltet bleiben.

Bevor du auf Create database klickst solltest du deine Konfiguration mit den folgenden Screenshots vergleichen: Screenshot 1, Screenshot 2, und Screenshot 3. Die Datenbank hat viele Einstellungen und manche Einstellungen sind nach der Provisierung fest, sodass diese korrekt sein sollten, damit die ToDo-App später funktioniert.

Hinweis
Lösung

Das Setup kann einige Minuten in Anspruch nehmen. Der Status kann in der AWS Console verfolgt werden. Für die Beispielanwendung ist die ausgewählte Datenbank-Instanz vollkommen ausreichend. Wenn sich die Anforderungen an die zur Verfügung stehenden Ressourcen ändern, kann die Instanzgrösse später im Betrieb während eines Maintenance Windows jederzeit geändert werden.

Informationen zur Datenbank Instanz

  1. Unter Services den Dienst RDS auswählen.
  2. Links im Menü auf Databases klicken.
  3. Unter Databases auf den Datenbank identifier workshop-db klicken.
  4. Nach erfolgreicher Bereitstellung wird im Tab Connectivity & security im Abschnitt Endpoint & port der DNS Endpunkt der Datenbank angezeigt.

Der DNS Name wird später für die Verbindung der Backend Container Instanzen benötigt. Daher am besten gleich über die Zwischenablage in ein Textfile kopieren und dort zusätzlich den Datenbank Benutzernamen sowie das Passwort (siehe oben) notieren.

  1. In den Tabs Monitoring, Logs & events, Configuration sowie Maintenance & backups können weitere Informationen und Einstellungen eingesehen werden.
  2. Erstelle ein neues Tag mit key Name und value todoapp in dem Tags Tab.

Zusammenfassung und nächste Schritte

In diesem Kapitel haben wir gesehen, dass es analog zu unterschiedlichen Fahrzeugkategorien (Kombi, Kleinwagen, Cabrio, …) unterschiedliche zweckgebundene Datenbanken gibt, die es erlauben für den jeweiligen Anwendungsfall die am besten geeignete Datenbank auszuwählen. Der Verwaltungsaufwand für die Nutzer von Cloud-Services unterscheidet sich wesentlich bei Datenbanken welche serverbasiert oder serverlos angeboten werden.

Herzlichen Glückwunsch! Du hast eine relationale Datenbank (Amazon RDS Instanz) erstellt, die als Speicher für die ToDos dienen wird. Die Instanz ist nicht öffentlich erreichbar und wurde im Workshop VPC gestartet. Durch die verknüpfte Security Group Workshop-RDS-SG kann die Datenbank lediglich von Ressourcen erreicht werden, die von der Workshop-ECS-SG aus kommen. Im nächsten Schritt werden die Container Images für Front- und Backend vorbereitet und in einer Container Registry publiziert.