Webserver Infrastructures - Gesamt: Unterschied zwischen den Versionen

Aus FernFH MediaWiki
Zur Navigation springen Zur Suche springen
(Die Seite wurde neu angelegt: „{{:UrheberrechtDefault}}<br> {{:Benutzer:_KOPICA_Franz}}<br> {{:Webserver Grundlagen}}<br> {{:Lastausgleich und Skalierbarkeit}}<br> {{:Leistungsoptimierung (Webserver)}}<br> {{:Hochverfügbarkeit und Ausfallsicherheit (Webserver)}}<br> {{:Quellen}}“)
 
Markierung: Manuelle Zurücksetzung
 
(Eine dazwischenliegende Version desselben Benutzers wird nicht angezeigt)
(kein Unterschied)

Aktuelle Version vom 1. Oktober 2024, 08:09 Uhr

Nachdruck – auch auszugsweise –, Weitergabe an Dritte und Benutzung für die Erteilung von Unterricht nur mit ausdrücklicher Zustimmung der Ferdinand Porsche Fernfachhochschule GmbH.

Es wird ausdrücklich erklärt, dass alle Angaben trotz sorgfältiger Bearbeitung ohne Gewähr erfolgen und eine Haftung des Autors/der Autorin oder des Verlegers/der Verlegerin ausgeschlossen ist.

Medieninhaberin (Verlegerin):
Ferdinand Porsche Fernfachhochschule GmbH
Ferdinand Porsche Ring 3
2700 Wiener Neustadt
Austria, Europe


Benutzer:KOPICA Franz

1. Webserver - Allgemein

Ein Webserver ist ein Computer, welcher Rechenleistung, Speicher, Daten und Dienste in oder zu einem Netzwerk (WICHTIG: Netzwerk ist nicht nur die Netzwerkart LAN) bereitstellt und auch Zugriffsrechte verwaltet. Auf diese Informationen, die in Form von Text, Bild, Video, etc.etc. vorliegen wird mittels eines Software-Clients ("Webbrowser" bzw. in Kurzform "Browser" ) zugegriffen. dabei handelt es sich um ein Programm, also Software für ein bestimmtes Bertiebssysten, dessen Aufgabe darin besteht dierKommunikation zwischen einem Client und einem Host, also Server zu ermöglichen.

Ein Webserver kann aus Software, Hardware oder beidem zusammen bestehen. Was die Software betrifft, so besteht ein Webserver aus Teilen, die steuern, wie Webnutzer auf gehostete Dateien zugreifen. Was die Hardware betrifft, so handelt es sich um Computer, auf denen die Webserver-Software und die Komponentendateien einer Website wie z.B. HTML-Dokumente oder JavaScript-Dateien.

Im Minimum versteht ein Webserver, das HTTP(s)-Protokoll, das der Browser zur Anzeige von Webseiten verwendet und URLs (Uniform Resource Locator) versteht. Der Server ist so via Domänennamen der Websites(welche er auch speichert) erreichbar und transferiert die Inhalte der gehosteten Web-Sites zum User. Der Webbrowser und der Webserver arbeiten auf dem Client- und Server-Computer und dem Netzwerk.

Die Auswahl eines Webservers ist ein entscheidender Schritt bei der Entwicklung und Bereitstellung einer Web-Anwendung. Ein Webserver hostet diese Anwendung und ist meistens auch gleich die erste Verteidigungslinie gegen Sicherheitsbedrohungen. Die Entscheidung welches Betriebssystem, welches Produkt zum Einsatz kommt sollte daher mit äußerster Sorgfalt getroffen werden, wobei viele Faktoren wie Leistung, Sicherheit, Skalierbarkeit und Kosten zu berücksichtigen sind. Eine simple Formel einen Webserver zu beschreiben wäre folgende:

'

Webserver = Plattform + Software + Information

Nachstehend eine Abbildung einer allgemeinen Client/Server-Architektur:


                      ClientServerArchitektur.jpg   

1.1 Webserver - Überblick 

Das Webserverprogramm läuft ununterbrochen und wartet auf Benutzeranfragen, die über das Internet kommen. Das Webserverprogramm stellt dann eine Netzwerkverbindung her,um die Anfrage des Benutzers zu empfangen.  Der Webdienst interagiert mit dem Netz auf die gleiche Weise wie viele andere Netzdienste im Internet. Die Betriebssystemsoftware des Computers verbirgt die Komplexität und Vielfalt des zugrunde liegenden Netzwerks, indem es einfache Abstraktionen bereitstellt, die es Menschen und Programmen ermöglichen, ihre Arbeit leichter zu erledigen. So kommunizieren Programme beispielsweise über das Netz, indem es eine Verbindung von einem Port zu einem anderen herstellen.

Ein Port ist eine Abstraktion, welcher die eine einfache, generische Möglichkeit bietet, Netzwerkverbindungen herzustellen und zu nutzen.  Der Port ist in etwavergleichbar mit einer Telefondurchwahl. Wenn ein Computerprogramm eine Verbindung zu einem anderen Programm im Netzwerk herstellt, fordert es den Port des empfangenden Programms an. Dieser Port gibt genau an, mit welchem Programm das Ursprungsprogramm eine Verbindung herstellen möchte.

Daten, die an einen ausgehenden Port (auf dem Computer des Absenders) geschrieben werden, kommen am eingehenden Port des empfangenden Programms an, wo es gelesen werden. Jedem Webserver wird ein Port zugewiesen, der durch eine Nummer gekennzeichnet ist. Dieser Port stellt eine Netzwerkverbindung zur Systemplattform des Computers her. Das Web-Client-Programm, der Browser, sieht den Port des Web-Servers als seinen Zugangspunkt im Netzwerk.

Wenn das Webbrowser-Programm eine Anfrage an das Webserver-Programm stellen möchte, sendet es die Anfrage an den zugewiesenen Port des Webservers. Bei der Webserver-Software kommen die Daten an ihrem Port an. Die Webserver-Software liest die Anfrage, und schließlich sendet der Webserver Daten aus, indem er es über denselben Port schreibt. Die Webserver-Software muss nur wissen, wie es den Netzwerkanschluss lesen und beschreiben kann; es muss nichts weiter über die Übertragung der Nachricht über das Netzwerk wissen. Ein Großteil der Komplexität der Verwaltung der Netzwerkverbindung zwischen dem Client und dem Server ist im Betriebssystem und in der Netzwerksoftware von Client und Server verborgen.

1.2 Geschichtlicher Hintergrund

Die Entwicklung des Webservers ist eng mit dem britischen Physiker und Informatiker Tim Berners-Lee verbunden. Bereits 1989 regte dieser an, den Informationsaustausch des CERN (der Europäischen Organisation für Kernforschung) über ein Hypertext-System einfacher und schneller zu gestalten. Das Projekt nannte Berners-Lee anfänglich “Mesh”. Zusammen mit Robert Cailliau legte er 1990 einen Projektplan vor, aus dem im Laufe der Zeit neben dem ersten Webserver namens „CERN httpd“ auch der erste Webbrowser und einige weitere Grundlagen des Webs (wie HTML und HTTP) hervorgingen. Am 06. August 1991 war es soweit Tim Berners-Lee veröffentlichte in verschiedenen Newsgruppen im Internet eine Beschreibung seines Projekts “World Wide Web”.Berners-Lee gilt daher heute als Begründer des World Wide Web. Im April 1993 legte das CERN dann mit einem wichtigen formalen Akt das Fundament und gab das Web für die Öffentlichkeit frei(kein Patent und keine Lizenzzahlung).

Zu Popularität weit über den Kreis von Physikern und Informatikern hinaus verhalf dem WWW der Browser “Mosaic”, den der damalige Student Marc Andreessen 1993 entwickelte.[1]

Webserver werden durch drei wichtige Technologien ermöglicht [5]:

1.Das Adressensystem, Universal Resource Locators (URLs), das es ermöglicht, fast jede Art von Information von fast überall im Internet abzurufen
2.Das HyperText Transfer Protocol (HTTP), die Verkehrssprache von Webbrowsern und Webservern, die es vielen verschiedenen Programmen ermöglicht, zusammenzuarbeiten
3.Die HyperText Markup Language (HTML), die es ermöglicht, multimedialen Hypertext zu erstellen, der von jedem Webbrowser verwendet werden kann

1.3 Webserver - Technologien

Auch bei dieser Technologie gibt es unterschiedliche Ansätze hinsichtlich Open Source bzw. freie Software(Apache, nginx) und properitäre Software (z.B. Microsoft-IIS). In einer Umfrage vom Mai 2023 seitens NETCRAFT [3] lieferten 1.109.384.426 Websites mit 271.534.718 Domains und 12.037.194 Computern mit Internetanschluss einen Response. Somit ist es nicht einfach, "das Produkt" hinsichtlich Webservertechnologie zu benennen.

Microsoft verzeichnete die deutlichste Veränderung in allen drei Kennzahlen; es verlor 495.099 (-1,88%) Websites, 210.670 Domains (-2,93%) und 12.303 Computer (-1,02%). Microsoft macht nun 2,33% der von Netcraft erfassten Websites und 2,57% der Domains aus, ein Rückgang um 0,03 bzw. 0,07 Prozentpunkte.

LiteSpeed konnte in diesem Monat 202.283 Domains (+2,16%) hinzugewinnen, was mit einem Anstieg der Gesamtzahl der Websites um 388.293 (+0,69%) einherging.

OpenResty wuchs ebenfalls um 325.880 (+0,38%) Websites, verlor aber 349.276 Domains (-0,91%).

nginx verzeichnete einen großen Verlust von 5,7 Millionen Websites (-1,94%), 1,0 Millionen Domains (-1,36%) und 33.970 Computern (-0,72%). Im Gegensatz dazu gewann.

Cloudflare 1,1 Millionen Websites (+1,03%) und 203.491 Domains (+0,79%). Trotzdem hat nginx einen größeren Anteil (25,86 % der Websites im Vergleich zu 9,51 % von Cloudflare), aber Cloudflare hat immer noch die Oberhand bei den ersten Millionen Websites.

Bei den Top-Millionen-Websites behielt Cloudflare seinen ersten Platz und gewann 0,38 Prozentpunkte auf seinen führenden Marktanteil von 22,07 % hinzu. Sowohl nginx als auch Apache mussten Verluste hinnehmen: Ihre Marktanteile sanken um 0,12 Prozentpunkte auf 21,18 % bzw. 0,04 Prozentpunkte auf 21,16 %, während OpenResty um 0,02 Prozentpunkte auf 1,00 % zurückfiel. In der Zwischenzeit konnten LiteSpeed, Google und Microsoft ihre jeweiligen Marktanteile leicht steigern: Microsoft um 0,06 Prozentpunkte, LiteSpeed um 0,05 Prozentpunkte und Google um 0,003 Prozentpunkte.

In Bezug auf die Anzahl der Computer, die mit dem Internet verbunden sind, verzeichneten nginx, Apache und Microsoft einen Rückgang ihrer jeweiligen Marktanteile um 0,11 Prozentpunkte, 0,22 Prozentpunkte und 0,06 Prozentpunkte. nginx hält immer noch den größten Marktanteil von 38,77 % (4,6 Millionen), während Apache an zweiter Stelle mit einem Anteil von 26,80 % (3,2 Millionen Computer) und Microsoft an dritter Stelle mit einem Anteil von 9,99 % (1,2 Millionen Computer) steht. 

Nachstehend eine Übersicht der Marktanteile[4] von 6/2024:

                  WebSrv Marktanteil 2024.jpg

1.4 Webserver - Kommunikation

Die Kommunikation läuft von der Anforderung bis zur Auslieferung wie folgt ab:

Ein Browser parst die URL und teilt diese in Schema, Hostname, Portnummer und Ressourcenpfad/Resourssenteil. Die IP-Adresse zum Hostnamen wird durch das "Telefonbuch des Internet", dem Domain Name Service kurz DNS ermittelt und stellt eine TCP-Verbindung her. Sollte keine Portnummer mitgeliefert werden, wird je nach Schema der Port 80 (http:) oder 443 (https:) gewählt.

Bei der URL https://onlinecampus.fernfh.ac.at/mod/resource/view.php ist das Schema https erkennbar und dadurch ist Port 443 (siehe Liste der standardisierten Ports) ableitbar. Der Hostname ist /onlinecampus.fernfh.ac.at sowie der Pfad eben /mod/resource/view.php -->  php ist eine Skriptsprache zur Erstellung dynamischer Webseiten oder Webanwendungen.


Über die TCP-Verbindung sendet der Browser eine HTTP-Anfrage. Diese besteht aus HTTP-Method, Path und Protocolversion. Eine Anfrage im Browser durch eingage einer URL löst die Methode GET aus. Das hat zur folge, dass eine Ressource angeliefert werden soll. Die Methode POST wird zum Versenden von z.B. Formulardaten verwendet.

Der Server empfängt die Clientanfrage und reagiert darauf:

1.) Bei einer GET-Anfrage wird die angeforderte Datei dem Browser ausgeliefert.

2.)Bei einem serverseitiges Skript wird dieses vom zuständigen Servermodul ausgeführt und erst anschließend wird die Ausgabe als Antwort dem Browser übermittelt.

  Client DNS Webserver.jpg[2]

Anmerkung: Secure Sockets Layer(SSL) war das ursprüngliche Sicherheitsprotokoll, welches für HTTP entwickelt wurde.SSL-Handshakes heißen jetzt TLS-Handshakes.

1.5 Betriebssysteme von Webservern

Die wesentliche Aufgabe des Betriebssystems ist also die Betriebsmittelverwaltung. Als Betriebsmittel versteht man Hardware- und Software-Ressourcen und zwar u. a. die Prozessoren, die Prozesse (Software), Speicher, Dateien und Geräte. Dies sind reale
Betriebsmittel, aber auch sog. virtuelle Betriebsmittel wie virtueller Speicher, virtuelle Prozessoren und virtuelle Koprozessoren werden durch das Betriebssystem verwaltet. [6]

Die tragende Rolle spielt das Betriebssystem Linux. Das System ist seit 1992 als freie Software für jeden verfügbar und kann durch seinen einfachen modularen Aufbau mit dem entsprechenden Wissen den eigenen Vorstellungen angepasst werden.

In etwa zwei Drittel aller Webprojekte die zum Einsatz kommen werden Linux-Distributionen verwendet. Beliebte Distributionen sind z.B.:

    • Ubuntu
    • Red Hat
    • Debian
    • Fedora
    • SUSE
    • CentOS
    • Uvm.

      Truelist [7] zeigt einen Status von 6/2024:


Linux2024.jpg

Unix/Linux-Server-Betriebssysteme haben einen namhaften Konurenten -- Microsoft,  mit dem vormals Internet Information Server genanten Webserver, der auf Internet Information Services (IIS) umbenannt wurde.

Eine Möglichkeit, mehr aus einem System herauszuholen, besteht darin, mehr als einen Webdienst auf demselben Computer laufen zu lassen. Eine beliebige Anzahl von Webserver kann auf einem einzigen System laufen..

Der Webdienst befindet sich standardmäßig am TCP-Port 80. Das bedeutet,  auf Port 80 wird gelauscht und der Client eine Verbindung zu diesem Port auf dem Serverrechner anfordern sollte. Ein Webserver kann jedoch auch an fast jedem anderen Port als 80 lauschen, wenn es dafür einen Grund gibt. 

Das Einrichten eines Webdienstes an Port 80 erfordert beispielsweise Administrator bzw. Superuser-Rechte auf dem Server-Computer. Wenn Benutzer ohne Administratorrechte einen eigenen Dienst einrichten und warten wollen, müssen diese eine unbeschränkte, eingeschränkte Portnummer wählen, die höher als 1024 sein muss,

B. 8080 oder 8081 (siehe Liste der Standardisierten Ports https://de.wikipedia.org/wiki/Liste_der_Portnummern)  

So kann ein Exemplar des Webservers die Standard-Portnummer 80 verwenden und vom Superuser verwaltet werden, während Server, die die Ports 8080 und 8081 verwenden, den Benutzern gehören und von ihnen betrieben werden. Die verschiedenen Server werden unterschieden, indem die Portnummer in die URL aufgenommen wird: http://www.mydomain.at/index.html (port80) http://www.mydomain.at:8080/index.html (port:8080) http://www.mydomain.at:8081/index.html (port:8081) Diese URLs sind Anfragen an verschiedene Webdienste auf demselben Computer (www.mydomain.at ).


Mit z.B. einem Apache oder nginx Webserver können mit sogenannten Virtual Hosts diverse Einstellungen vorgenommen werden, damit mehrere Webseiten auf einem Server betrieben werden können.


Dazu bedarf es folgender Unterschiede:  

Unterschiedliche Domainnamen
Unterschiedliche Portangaben
Unterschiedlicher Verzeichnisnamen
'

1.5.1  Dateisysteme

 Bei der Auswahl  der Betriebssysteme ist es von Vorteil die Grundfunktionen dieser Dateisysteme zu kennen. Es erleichtert den Umgang mit dem System aber auch die Konfiguration diverser Subsysteme  und Applikationen.


Filesysteme.jpg   [99]


1.6 Webserver – Statischer Zugriff

Ein statischer Zugriff [8] läuft wie folgt ab:


                   1. Beim statischen Zugriff gibt der User Nutzer in der Adressleiste, nicht in der Suchleiste seines Browsers die Zieladresse ein

                   2. Der Browser sendet einen HTTP-Request, also eine Anfrage an den zur Zieladresse gehörenden Webserver.

                    3. Der Webserver sucht nach der angefragten HTML-Datei

                    4. Ist die HTML-Datei vorhanden, wird diese via HTTP an den Client gesandt, das ist ein HTTP-Response

                    4a.  falls nicht vorhanden = Fehlermeldung 404– file not found

                    5. Der Webbrowser zeigt die angefragte Datei an

 

1.7  Webserver – Dynamischer Zugriff 

Ein dynamischer Zugriff [8] läuft wie folgt ab:


1.) Der User gibt einen Suchbegriff in ein Eingabefeld ein
2.) Der Inhalt wird mittels http an den Webserver überreicht
3.) Der Webserver ruft z.B. ein PHP-Skript **) auf.
4.) Ein PHP-Interpreter wertet die Suchanfrage aus
5.) Der PHP-Interpreter startet eine Anfrage an eine Datenbank (z.B MySQL)
6.) Die Datenbank wird nach dem Inhalt durchsucht
7.) Die Datenbank liefert den gesuchten Inhalt zurück
8.) Der PHP-Interpreter wandelt den Inhalt in HTML-Code

      ( Der Webbrowser kann mit PHP nichts anfangen)

9.) Der HTML-Code wird mittels HTTP an den Webserver gesandt

10.Der Webbrowser zeigt den HTMLCode an

**)  PHP wird gerne zur Erstellung dynamischer Webseiten verwendet


2  Installation und Konfiguration von Webservern 

Webseiten entstehen dynamisch, d. h., dass sie mit Hilfe einer Programmiersprache erst erzeugt werden, wenn ein Nutzer eine Suchanfrage stellt. Die Software im Hintergrund wird immer „intelligenter“, daher wird von einem semantischen Web gesprochen. der webbasierten Programmierung
Sogenannte RIAs (Rich Internet Application) am Webserver sind De-facto-standards. Das bedeutet, dass diese Software nicht mehr auf dem eigenen Computer installiert werden muss, sondern im Browser gestartet werden kann. Beispiele hierfür sind die Office-Pakete Google Docs oder Microsoft
Office 365.

Größeren Websites werden heute mit Hilfe von Content-Management-Systemen erstellt. Dabei handelt es sich um Softwarepakete, die den gesamten Inhalt der Website mit Hilfe einer Datenbank verwalten. Für das Design stellt jedes CMS zahllose Templates zur Verfügung.

Die Installation und Administration eines Webservers ist alles andere als einfach. Glücklicherweise gibt es Zugang zur Technik. Gängige Webtechnologien in einem Paket sind unter  www.apachefriends.org  zu finden.

XAMPP ist eine vollständig kostenlose, leicht zu installierende Apache-Distribution, die MariaDB, PHP und Perl enthält. Das XAMPP Open-Source-Paket wurde für eine extrem einfache Installation und Nutzung eingerichtet. [9]

X ist der Platzhalter für das Betriebssystem **)  --> Windows-Server werden als WAMPP, Linux-Server als LAMPP und MAC-Server als MAMPP bezeichnet.

A steht für Apache.
• M sehr für das Datenbankmanagementsystem MySQL bzw. MariaDB
P  steht für die Skriptsprache PHP.
• P steht für Perl (alternativ zu PHP) einer Skriptsprache

**)diese Unterscheidung findet man im Sprachgebrauch bzw. in der Literatur, aber auf  www.apachefriends.org   sind die drei Applikationen unter dem Brandname XAMPP zu finden.

Neben den obgenannten Modulen sind je nach Betriebssystem je nach Betriebssystem auch andere Werkzeuge wie den Mailserver Mercury, die Datenbank-Administrationsanwendung phpMyAdmin, die Web-Analytics-OpenSSLApache Tomcat sowie die FTP-Server FileZilla oder ProFTPd im Installationsbundle vorhanden

2.1 Der Editor

Ein Editor ist unerlässlich hinsichtlich Änderung/Anpassung von Konfigurationsdateien wobei jeder beliebiger Texteditor oder falls es komfortabler sein soll  greift man auf eine Entwicklungsumgebung (Integrated Development Environment, IDE) zurück.

Eine IDE hat den Vorteil, dass ggf. Programmcode automatisch vervollständigt wird und zusammengehörige Elemente farbig dargestellt werden. Dies erleichtert die Fehlersuche und ist übersichtlicher, als z.B. der Standardeditor von Microsoft.

Anmerkung: Eine Auflistung textbasierter HTML-Editoren ist auf Wikipedia zu finden.


2.2 Installation eines Testsystemes 

Dafür gibt es mehrere Möglichkeiten:

1) Native Installation am eigenen Rechner
2) Einrichtung eines Dual-Boot-System
3) Installation eines Typ-2-Hypervisor(eine Anwendung am Host-Betriebssystem)

    Der Vorteil hinsichtlich der Installation einer VM ist der, dass ein anderes OS verwendet werden kann.

Anmerkung: VirtualBox [11] ist ein Allzweck-Virtualisierungsprogramm für x86-Hardware, das für Server, Desktops und Embedded-Systems geeignet ist, dass auf Windows, Linux und MAC läuft.


2.3 'Installation von Linux(Ubuntu) in einer VM unter Windows'

Ein  ISO-File wird benötigt, deshalb  https://ubuntu.com/download/desktop  ansurfen und die ISO-Datei herunterladen,dort findet man die Neueste vor. Ubuntu-Linux oder nur Ubuntu genannt basiert auf Debian.

Anmerkung: Wenn eine ältere Version von Ubuntu installiert wird, z.B. Ubuntu 22.04.3 LTS, ist die visuelle Darstellung des Installationsprogramms ggf. etwas anders ist, aber der allgemeine Ablauf ist ähnlich.

  • ) Installation auf einer VM (Virtualbox 7),

    Virtual-Box herunterladen und am Windowsrechner installieren

https://www.virtualbox.org/

Nach der Installation sollten auch sämtliche Updates für Windows durchgeführt werden.

TIPP: Einen Kaltstart durchführen

Des Weiteren einTutorial zum Einrichten einer VM  https://ubuntu.com/tutorials/how-to-run-ubuntu-desktop-on-a-virtual-machine-using-virtualbox#1-overview

01Ubuntu.jpg   

Installation von Ubuntu(Virtualbox 7), siehe z.B. https://ubuntu.com/tutorials/install-ubuntu-desktop#1-overview

TIPP:  Bei der Konfiguration des Netzwerk die Option Netzwerkbridge verwenden, damit sich die VM die IP vom DHCP Server holt.


12Bridge.jpg   

Aktualisieren des System

Ein Terminal öffnen


02VM.jpg   


Folgenden Befehl im Terminal eingeben, damit das System aktuell wird:

sudo apt update && sudo apt upgrade -y


03Update.jpg   


Anmerkung: && verbindet 2 Befehle

 -y  bestätigt automatisch die Ausführung

Die Ausführung kann etwas länger dauern.

2.3.1 Den Apache2-WebServer installieren 

Vorab Parameter für den Umgang mit Apache.


  • enable - aktiviert den Dienst
  • start - startet den Webserver

  • stop - stoppt den Server

  • restart - startet den Server neu, bestehende Verbindungen auf den Server werden gekappt

  • reload - lädt die Konfigurationsdateien neu, ohne dass Verbindungen getrennt werden

  • status - gibt den aktuellen Status des Server-Dienstes aus

    Im Terminal nachstehenden Befehl eingeben:

sudo apt install apache2 -y

Während der Installation registriert sich der Apache bei der UFW(= 'uncomplicated firewall)' und stellt einige Anwendungsprofile zur Verfügung, mit denen der Zugriff auf den Apache über die Firewall aktiviert oder deaktiviert wird.

Starten und aktivieren des Apache-Dienst

Nachstehenden Befehl verwenden, um sicherzustellen, dass er bei jedem Systemstart der Dienst automatisch geladen wird:

sudo systemctl enable apache2

Starten des Apache-Dienst erfolgt mit dem folgenden Befehl:

sudo systemctl start apache2


Zur Vorsicht wird überprüft, ob der Server fehlerfrei läuft:

sudo systemctl status apache2


Der Hostname bzw. die Server-IP ist im Terminal mit

  sudo hostname -I  oder ifconfig

abrufbar.

Anmerkung: sollte hostname -I mehrere IP zurückliefern, so liefert der Befehl    sudo  nmcli -p device show   exakte Informationen

Nun sollte der Web-Server in einem Webbrowser durch Eingabe des Protokolls und einer Domain oder einer IP

 http://localhost/ bzw. http://SERVER-IP

 erreichbar sein und die default welcome page von Ubuntu aufrufen.

04Default.jpg   


ANMERKUNG: Diese Seite liefert Informationen über die Konfiguration !

Diese Seite ist im Verzeichnis /var/www/html/ unter dem Namen  index.html gespeichert und kann mit dem Editor nano bearbeitet werden(s.2.3.1.1)

sudo nano /var/www/html/index.html

2.3.1.1 Der Editor nano 

Nano ist ein sehr einfacher Editor der intuitiv zu bedienen ist.

Die Kombinationen mit der STRG  Taste sind  im unteren Bereich des Editor-Bildschirms mittels  ^  dargestellt bzw. für die ALT-Taste. 


05Nano.jpg   


Hier ein Link für den raschen Umgang mit nano  https://www.howtoforge.de/anleitung/linux-nano-editor-fuer-anfaenger-erklaert-10-beispiele/

2.3.2 Die Dateistruktur des Apache-Webserver

Nachstehend die Dateistruktur der Konfiguration eines Apache2-Webserver unter Ubuntu.

 

03Layout.jpg   

 

Die Datei apache2.conf ist die Spitze der Konfigurationsdateien Es beziehts alle in der Struktur nachgelagerten  Konfigurationsdateien beim Starten des Webservers ein.

Die Datei ports.conf ist immer in der apache2.conf (mittels include-Anweisung) enthalten. Es wird verwendet, um die zu überwachenden Ports für eingehende Verbindungen zu bestimmen, und diese Datei kann jederzeit angepasst werden.

Die Konfig-Dateien in den Verzeichnissen mods-enabled/, conf-enabled/ und sites-enabled/ enthalten spezielle Konfigurationsausschnitte, die Module, globale Konfigurationsfragmente bzw. virtuelle Hostkonfigurationen. In den  *-enabled/ Verzeichnissen stehen die aktivierten Konfigurationen und in den *-available/ Verzeichnissen die editierten  Dateien.

Tools wie, a2enmod, a2dismod, a2ensite, a2dissite und a2enconf, a2disconf dienen dem Handlich der Konfigurationsdateien. Detaillierte Informationen findet man in den jeweiligen Man Pages.

Apache2 und wird mit systemd (das ist ein System- und Dienstmanager für Linux) verwaltet Der Befehl systemctl ist das wichtigste Werkzeug zur Verwaltung von

Nachstehende Abbildung zeigt  ein Snippet der apache2.conf. Jeder Parameter wurde dabei kommentiert.

03Apache.jpg   

2.3.2.1 Wichtige Dateien und Verzeichnisse 

Für eine effiziente Bedienung des Apache-Webservers ist es hilfreich, einige häufig gebrauchte Dateien und Verzeichnisse zu kennen:

  • /var/www/html: In diesem Verzeichnis stellt Apache standardmäßig Dokumente bereit. Dies kann in den Konfigurationsdateien geändert werden.
  • /etc/apache2: Hier werden alle Konfigurationsdateien von Apache aufbewahrt.
  • /etc/apache2/apache2.conf: Dies ist die Hauptkonfigurationsdatei. Damit man die die globale Konfiguration ändern.
  • /etc/apache2/ports.conf: In dieser Datei sind die geöffneten Ports gelistet. Dies sind in der Regel Port 80 und/oder Port 443.
  • /etc/apache2/sites-available/: In diesem Ordner befinden sich eingerichtete virtuelle Hosts. Konfigurationsdateien, die hierin abgelegt werden, müssen mit dem Verzeichnis „site-enabled“ verknüpft werden, damit es funktioniert.
  • /etc/apache2/conf-available/, /etc/apache2/conf-enabled/: Diese Verzeichnisse speichern zusätzliche Konfigurationsdateien, die nicht zu virtuellen Hosts gehören. Die Aktivierung der Konfiguration können man mit „a2enconf“ und die Deaktivierung mit „a2disconf“ vornehmen.
  • /etc/apache2/mods-available//etc/apache2/mods-enabled/: In diesen Verzeichnissen werden verfügbare und aktivierte Module aufbewahrt. Ein Modul kann mit „a2enmod“ aktiviert und mit „a2dismod“ deaktiviert werden.
  • /var/log/apache2/access.log: Diese Logdatei zeichnet alle Anfragen an den Webserver auf.
  • /var/log/apache2/error.log: In dieser Datei werden alle Fehlermeldungen protokolliert. Die LogLevel-Information gibt den Schweregrad der Ereignisse an.

2.3.3 Anpassen der Firewall 

Zuerst die Firewall einschalten:

'''sudo ufw enable

Danach die Anzeige der UFW Applikationen auflisten:

sudo ufw app list

Diese liefert uns drei Profile von Apache:


06Profil.jpg   


  • Apache: Dieses Profil öffnet nur Port 80 (normaler, unverschlüsselter Webtraffic)
  • Apache Full: Dieses Profil öffnet sowohl Port 80 (normaler, unverschlüsselter Webfraffic) als auch Port 443 (TLS/SSL-verschlüsselter Traffic)
  • Apache Secure: Dieses Profil öffnet nur Port 443 (TLS/SSL-verschlüsselter Datenfraffic)

    Da noch kein SSL für den Server konfiguriert wurde, wird der Datenverkehr auf Port 80 mit  nachstehendem Befehl zugelassen:

sudo ufw allow apache

Nun wird der Status auch überprüft:

sudo ufw status

2.3.4 Verzeichnisstruktur für den Web-server

Der erste Schritt besteht darin, eine Verzeichnisstruktur zu erstellen, welche die Website-Dateien enthält,d ie zur Verfügung gestellt werden sollen.

Unter dem Verzeichnis   /var/www/html/ wird der Verzeichnisname z.B.  shop  festgelegt. Für  jeden virtuellen Host wird ein eigenes Verzeichnis angelegt um dieses für die Besucher der Site freizugeben.

Innerhalb jedes dieser Verzeichnisse wird  ein Verzeichnis public_html. Das public_html-Verzeichnis enthält den Inhalt, der den Besuchern angezeigt wird. Die übergeordneten Verzeichnisse, hier shop  und wiki  genannt **), enthalten die Skripte und den Anwendungscode zur Unterstützung der Webinhalte.

Befehle um Verzeichnisse zu erstellen:

sudo mkdir -p /var/www/html/shop/public_html

sudo mkdir -p /var/www/html/wiki/public_html

**) es kann auch eine Domain sein z.B. myhomepage.at

 

2.3.4.1 Berechtigung erteilen 

Soll ein normaler Benutzer die Dateien in diesen Webverzeichnissen ändern können, ist die Egentümerschaft mit diesen Befehlen ändernzu :


sudo chown -R $USER:$USER /var/www/html/wiki/public_html

sudo chown -R $USER:$USER /var/www/html/shop/public_html

Anmerkung:Die Variable $USER nimmt den Wert des Benutzers an, als der man gerade angemeldet ist, damit ist der reguläre Benutzer nun Eigentümer der public_html.

Auch die Berechtigungen sind zu ändern, um sicherzustellen, dass Lesezugriff auf das allgemeine Webverzeichnis und alle darin enthaltenen Dateien und Ordner erlaubt ist, damit die Seiten korrekt ausgeliefert werden können:

sudo chmod -R 755 /var/www

Der Webserver verfügt nun über die erforderlichen Berechtigungen, um Inhalte bereitzustellen, und der Benutzer sollte in der Lage sein, Inhalte in den erforderlichen Ordnern zu erstellen.


2.3.4.2 Virtual Host - Webseite 

Nachdem eine  Verzeichnisstruktur eingerichtet wurde, kann man sich nun auf die einzelnen virtuellen Hostseiten und deren Inhalte konzentrieren. Dazu erstellt man eine  Datei

                              index.html 

Anmerkung: es kann auch ein anderer Name wie z.B. test.html sein, aber in der Standardkonfiguration sucht dieser automatisch nach der index.html

Eine Datei index.html mit einem bevorzugten Texteditor erstellen. Nachstehend wird nano verwendet:

nano /var/www/html/shop/public_html/index.html

In diese Datei ganz werden einfache HTML-Tags für Testzwecke verwendet. Siehe nachstehendes Beispiel:


07Index.jpg   


2.3.4.3 Virtual Host - Konfiguration

Virtuelle Hostdateien sind jene Dateien, welche die tatsächliche Konfiguration der virtuellen Hosts beschreiben und wie der Apache-Webserver auf verschiedene Domain-Anfragen reagieren soll. Apache wird mit einer Standarddatei für virtuelle Hosts mit dem Dateinamen  000-default.conf  ausgeliefert.

Diese Datei ist im Verzeichnis /etc/apache2/sites-available/    zu finden.

Am Besten ist die Standardkonfiguration zu kopieren:

sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/shop.conf

Somit ist sichergestellt, dass die zusätzlichen Informationen der Originaldatei erhalten bleiben

Die Kopie wurde mit nano editiert und angepasst (siehe ServerAdmin und DocumentRoot).

                          sudo nano /etc/apache2/sites-available/shop.conf

 

08Conf.jpg   

 

Erklärung [16] - Beispiel für ein Kursmanagementsystem:

<VirtualHost *:80>

    …..…..

        DocumentRoot /var/www/html/moodle/course

           1 ) <Directory /var/www/html/moodle/course>

             2) Options Indexes FollowSymLinks MultiViews

             3) AllowOverride All

             4) Order allow,deny

            5)  allow from all

             6) Require all granted

           </Directory>

……..

1)Der Container <Directory>  </Directory>  definiert eine Gruppe von Konfigurationsanweisungenfür ein bestimmtes Verzeichnis mit sämtlichen Unterverzeichnissen.

2)Optionen

2a) Wenn eine URL anfordert wird, die auf ein Verzeichnis verweist, und dort keine index.html vorhanden ist, kann mit dieser Option die Reihe von Indizierungsbefehlen verwendet werden, und es wird eine formatierte Liste zurückgegeben

2b) FollowSymLinks ist eine Direktive der Webserver-Konfiguration, die den Webserver anweist, so genannten symbolischen Links zu folgen. Wie zu erwarten, ist FollowSymLinks ein Akronym für Follow Symbolic Links. FollowSymLinks ist eine sehr wichtige Einstellung, die eine Rolle für die Sicherheit derWebsite spielt.

2c)  Die  beste Darstellung einer Ressource auf der Grundlage der vom Browser angegebenen Präferenzen für Medientyp, Sprachen, Zeichensatz und Kodierung auswählen.

3) Wenn diese Anweisung auf All gesetzt wird, dann ist jede Direktive in den .htaccess-Dateien erlaubt.

4)Die Reihenfolge allow,deny sagt Ihrem Webserver, dass die Allow-Regeln vor den Deny-Regeln verarbeitet werden. Wenn der Client nicht auf die Allow-Regel oder auf die Deny-Regel zutrifft, wird dem Client der Zugriff verweigert.

5) Der Apache liefert jede Datei ohne Einschränkung aus (Apache 2.x)

6) Der Apache liefert jede Datei ohne Einschränkung aus (Apache 2.4)

2.3.4.4 Virtual Host  -  Aktivieren der neuen Datei /ausschalten der alten Datei

Zuerst deaktivieren wir die „alte“ Config-Datei:

sudo a2dissite 000-default.conf

Nachdem nun die virtuelle Hostdatei erstellt wurde, muss diese aktiviert werden.. Der Apache-Server enthält einige Werkzeuge, mit denen dies gemacht wird.

Das Tool a2ensite wird verwendet, um eine Site zu aktivieren. Details dazu ist in den man pages im Terminal nachzulesen.

                                               man a2ensite

Anmerkung: man pages gibt es zu vielen Themen

Den folgenden Befehl verwenden, um die virtuellen Host-Site zu aktivieren:

sudo a2ensite shop.conf


09Enable.jpg   


Die Information weist darauf hin den Apache zu reloaden:

sudo systemctl reload apache2

Danach wird zu Sicherheit die Konfiguration getestet:

  sudo apache2ctl configtest

um   Syntax OK  zu erhalten.

Annahme: shop ist eine Domain. Damit diese im Webbrowser aufgerufen werden kann ist zu Testzwecken die Datei hosts zu editieren:

sudo nano /etc/hosts


10Hosts.jpg   


Hier wurde der Hostname und die Pseudo-Domain shop hinzugefügt

Einen Restart durchführen und danach den Status kontrollieren

sudo systemctl restart apache2

sudo systemctl status apache2


Am Webclient  die Pseudo-Domain shop eingeben, um zu sehen ob alles richtig eingegeben wurde und der Inhalt der Datei  index.html angezeigt wird.



11Browser.jpg   


2.4 'Installation von XAMPP unter Windows' 

XAMPP ist (subjektiv betrachtet) für eine Testumgebung im eigenen Netz dienlich, da es einen sehr einfachen Weg zum eigenen Apache-Webserver ermöglicht..

Betreffend der Installation ist es ratsam, zuerst den Antivieren-Scanner für einige Zeit deaktivieren. Es könnten Fehermeldungen bezüglich Antivirenprogrammen oder UAC (User Account Control) erscheinen, oder zur Vorsicht diese Dienste temporär deaktivieren bis die Installation abgeschlossen ist.

1)Die Installations-Applikation für Windows herunterladen -->  fhttps://www.apachefriends.org/de/download.html 

2) Selektieren und als Administrator mittels  Doppelklick starten
3) Am einfachsten ist es bei der Ausahl der Software-Komponenten alles zu belasse, also den Funktionsumfang mit allen verfügbaren Anwendungen (Web-Server, FTP-Server, Mail-Server) zu implementieren.

4) Auch das  Installationsverzeichnis  „C:\xampp“ und bestätigen

Anmerkung: Hinsichtlich Re-Installation das Verzeichnis löschen oder umbenennen
5) Sollten wärend der Installation, Berechtigungsabfragen des Betriebssystems erscheinen, die gewünschte Genehmigung erteilen.

Im Web sind zahlreiche Installationsanleitungen zu finden z.B.  https://www.ionos.at/digitalguide/server/tools/xampp-tutorial-so-erstellen-sie-ihren-lokalen-testserver/

6) Die Applikation zum Starten des  Controlpanel ist   C:\xampp\xampp-control.exe

13XAMPP.jpg 

In der Abbildung wurden Webserver und Datenbankmanagementsystem korrekt gestartet. Sollt sich links neben dem Modulname ein X befinden, einfach mittels Doppelklick nachinstallieren

7) In der Befehlszeile des Webbrowser    localhost eingeben und die Standardapplikation, das Dashboard von Achache Friends wird gestartet

[File:14XAMPPwin.jpg]] 

2.4.1  Konfiguration - Änderung

Sollte z.B.ein Port belegt sein und der Webserver startet nicht, kann dieser geändert werden .

Beispiel:

a) In der Zeile von apache auf „Config“ klicken  und die Option Apache(httpd.conf) auswählem

b) in der Konfig-Datei "Listen" suchen

Hier wurde   localhost der Port 80 zugeweisen und der lokalen Netzwerkkarte, für z.B. das Heimnetz der Port 81 

A merkung: Beim Aufruf muss Port 80 nicht angegeben werden.

[File:15XAMPPallg.jpg]] 

WICHTIG: Nach einer Konfigurationsänderung den Webserver stoppen und starten

3 Sichere Bereitstellung des Webserver

Die Sicherheitsarchitektur einer über das Internet (oder jedes andere nicht-vertrauenswürdige Netzwerk) erreichbaren Webinfrastruktur setzt sich aus verschiedenen funktionalen Komponenten zusammen, denn auch eine Webanwendung, die selbst keinerlei Schwachstellen besitzt, kann schnell von einem Angreifer kompromittiert werden, wenn die zugrunde liegende Plattform Sicherheitsmängel besitzt. Gleichzeitig lassen sich auch auf Plattformebene eine ganze Reihe weiterer Sicherheitsmechanismen implementieren, mit denen sich die darauf ausgeführten Anwendungen zusätzlich schützen lassen. [13]


Nachstehend eine mögliche allgemeine Architektur hinsichtlich Sicherheit:

Architekturempfehlung.jpg

Eine Web Application Firewall, betreffend der Umsetzung unterschiedlicher Sicherheitsfunktionen: z. B. Input Validation, Virtual Patching, Application Intrusion Detection System etc.

    • SSL/TLS-Gateway hinsichtlich der Terminierung der SSL/TLS-Verschlüsselung; oftmals Bestandteil einer Web Application Firewall, eines Webservers oder eines Loadbalancers
    • Access Gateway zur Authentifizierung und Zugriffskontrolle zur Absicherung interner Programme und zur Vorschaltung einer Mehrfaktorauthentifizierung
    • Vorgelagerter Frontend-Webserver zur Sicherstellung von HTTP-Compliance,

      URL-Accsess Control, HTTP-Headern setting, etc. [13]

3.1. SSL/TLS-Zertifikat 

TLS-Zertifikate (Transport Layer Security)-Zertifikate und SSL-Zertifikate (Secure Sockets Layer) sind unverzichtbar, um mithilfe von Verschlüsselung sichere Verbindungen zu einem Browser zu ermöglichen und dort Transaktionen abzusichern. TLS/SSL ist der Standard der Sicherheitstechnik, der im Hintergrund für die Absicherung Ihrer Online-Transaktionen und Anmeldevorgänge sorgt. Und so funktioniert er:

Für den Endanwender unsichtbar läuft ein Prozess namens „TLS/SSL-Handshake“ ab und erzeugt nahezu ohne Zeitverzug eine geschützte Verbindung zwischen Ihrem Webserver und dem Web-Browser, über den die Website aufgerufen wird. Bei Websites, die von einem TLS/SSL-Zertifikat geschützt sind, werden das Kürzel HTTPS und ein kleines Schloss-Symbol in der Adresszeile des Browsers angezeigt. TLS/SSL-Zertifikate dienen dazu, sowohl die Daten des Endanwenders bei der Übertragung zu schützen als auch die Identität des zur Website gehörenden Unternehmens zu überprüfen, damit der Anwender sicher sein kann, dass er auch wirklich die Website des legitimen Eigentümers besucht.

SSL TLS Ablauf.jpg 

Damit ein SSL-Zertifikat auf einer Webseite installiert werden kann muss es zunächst von einer Zertifizierungsstelle, dem Anbieter, validiert werden. Auf SSL.de bieten wir Ihnen viele verschiedene SSL-Zertifikate von verschiedenen Anbietern. Zum Beispiel sind  Comodo, Thawte, RapidSSL, GeoTrust  Symantec u.v.m. solche Zertifizierungsstellen (CA) bzw.freie**) wie Let’s Encrypt  https://letsencrypt.org/de/getting-started/

**) Jeder, der einen Domainnamen besitzt, erhält sichere Zertifikate kostenfrei.

Kategorien von SSL-Zertifikaten

*

Bei Domain-validierten SSL Zertifikaten (DV) prüft der Herausgeber nur, ob der Antragsteller die Domain besitzt. Beispielsweise sendet er eine Test-Mail, um zu schauen, ob die E-Mail-Adresse des Antragstellers mit der in der Whois-Datenbank eingetragenen E-Mail-Adresse übereinstimmt. Die Whois-Liste ist eine Datenbank, die einem Telefonbuch ähnelt. Sie enthält Informationen zu den existierenden Domains und ihren Inhabern. Hat die Webseite ein Domain-validiertes SSL-Zertifikat erhalten, erscheint in der Browserleiste ein Schloss.

*

Bei Organisation-validierten SSL Zertifikaten (OV) überprüft die ausstellende Organisation auch das Unternehmen, das die Domain besitzt. Dafür benötigt man in der Regel Dokumente wie den Handelsregisterauszug oder die Gewerbeanmeldung. 

*

Die Extended-Validation Zertifizierung (EV) ist die aufwändigste SSL-Zertifizierung und bestimmten Zertifizierungsstellen vorbehalten. Hier verifiziert der Herausgeber nicht nur das Unternehmen, sondern auch die Identität der Geschäftsführer. Auch prüft er, ob der Antragsteller befugt ist, das SSL-Zertifikat im Namen des Unternehmens zu beantragen.

Hauptzweck eines SSL-Zertifikats ist die Authentifizierung der Webseite. Dafür enthält es folgende Daten:

      Domain-Name der Webseite, für die das Zertifikat erstellt wurde, und wer sich hinter dem Namen verbirgt.

Namen und digitale Signatur der Organisation, die das Zertifikat erstellt hat.

Ausstellungs- und Verfalldatum des Zertifikats.

Public Key, der zur Webseite gehört, damit eine asymmetrisch verschlüsselte Verbindung (Public-Private-Key Verschlüsselung) aufgebaut werden kann.

Je nach Art des SSL-Zertifikats auch mit der Hauptdomain verknüpfte Subdomains und Informationen über das Unternehmen, dem die Webseite gehört.

3.2 dynDNS

Dynamic DNS (DDNS oder dynDNS) ist ein Dienst , der DNS-Einträge automatisch[RFC2136] aktualisieren kann, wenn sich eine IP-Adresse ändert. Domänennamen konvertieren Netzwerk-IP-Adressen in menschenlesbare Namen, um diese leichter erkennen und verwenden zu können. Die Informationen, die den Namen der IP-Adresse zuordnen, werden tabellarisch auf dem DNS-Server aufgezeichnet. Netzwerkadministratoren weisen IP-Adressen jedoch dynamisch zu und ändern diese häufig. Ein DDNS-Dienst aktualisiert die DNS-Servereinträge jedes Mal, wenn sich IP-Adressen ändern. Mit DDNS wird die Domänennamenverwaltung einfacher und effizienter. In der Vergangenheit waren IP-Adressen statisch und änderten sich selten. Aufgrund der Ausbreitung des Internets und der massiven Zunahme der Anzahl von Servern, intelligenten Sensoren und Endgeräten kam es jedoch zu einem Mangel an IP-Adressen. Um die Anzahl der IP-Adressen zu erhöhen, wurde ein neues System namens IPv6 eingeführt. Die Zuweisung statischer IP-Adressen war jedoch nicht mehr kosteneffizient. Stattdessen verwenden Netzwerkadministratoren das Dynamic Host Configuration Protocol (DHCP), um IP-Adressen dynamisch zuzuweisen.Die meisten  WLAN-Router bzw. DSL-Router bieten eine solche Option an. [31]

3.2.1 Vorteil - dynDNS

Mit Dynamic DNS kann man remote auf interne Netzwerkressourcen wie Dateiserver, Webserver oder Remotedesktopdienste zugreifen. So, der Vorteil, können z.B. Mitarbeiter über einen Domänennamen, der mit der wechselnden IP-Adresse verknüpft ist, außerhalb des Netzwerks ihrer Organisation auf diese Ressourcen zugreifen. Dies ist besonders nützlich für Organisationen mit Remote-Mitarbeitern, Zweigstellen oder Mitarbeitern, die unterwegs sind. Eine statischen IP-Adresse für das Hosting ist teuer bzw. ergibt für Testzwecke**) wenig Sinn. Startups in der Anfangsphase und kleine Unternehmen verwenden dynamisches DNS, um Dienste oder Anwendungen auf der internen Infrastruktur zu hosten. Damit kann man Websites, FTP-Server, Spieleserver oder andere Dienste hosten, die einen konsistenten und zugänglichen Domänennamen erfordern.

**) Z.B.. No-IP bietet sowohl kostenlose(2024) als auch kostenpflichtige Dienste an:  https://my.noip.com/


1. Allgemein

Die Skalierbarkeit und der Lastausgleich sind zwei entscheidende Aspekte in It-Systemen. Skalierbarkeit bezieht sich auf die Fähigkeit eines Systems, mit steigender Last oder Anforderungen umzugehen, ohne dass die Leistung beeinträchtigt wird. D.h. die IT-Infrastruktur ist ggf. flexibel anzupassen und zu erweitern, um mit dem Wachstum und den Anforderungen an die IT Schritt zu halten.Skalierbarkeit bezeichnet die Fähigkeit eines Systems, wachsende quantitative Anforderungen durch Hinzuügen von Ressourcen auszugleichen, ohne dasseine Änderung von Systemkomponenten notwendig wird. Zentrale Lösungen stoßen hier in der Regel schnell an ihre Grenzen( .z.B.Bestell- oder Buchungssysteme) [11]

Der Lastausgleich hingegen verteilt die Arbeitslast gleichmäßig auf mehrere Ressourcen, um die Leistung und Verfügbarkeit zu verbessern und Ausfälle zu vermeiden.

1.1 Skalierung

Skalierung von einem Serversystem ist notwendig, da der Server ein Bottleneck und Single Point of Failure ist. Ein Client kann bei Systemen mit mehreren Servern auf verschiedene Weisen an die Daten
kommen: [12]
• rekursiv --> Client fragt einen Server, dieser fragt rekursiv andere Server.etc., etc. bis der Zielserver erreicht ist, der Client erhält die Antwort vom befragten Server
• transitiv --> Client bekommt die Antwort direkt vom Zielserver
Server können klassifiziert werden als:
• Proxy --> Schnittstelle zwischen Client und anderen Servern, die die Anfragen cached, geeignet für sich wiederholende Anfragen
• Broker --> Teilt Clients einem Server entsprechend der geforderten Aufgaben zu
– Vorteil: Location/Replication transparency
– Nachteil: Single-Point-Of-Failure
• Trader --> wählt den passenden Server aus, falls mehrere Server denselben Service in unterschiedlicher Qualität anbieten
• Balancer --> Verteilt Workload gleichmäßig auf alle Server
• Agent --> Splittet komplexe Anfragen auf, sendet die simpleren Anfragen an andere Server und kombiniert die Antworten zu einer Antwort

1.1.1 Web-Caching

Web-Caching dient der Skalierbarkeit und bereitet geringe Latenz.Das definierende Merkmal aller Web-Caches ist, dass diese HTTP-Caching-Metadaten transparent als Read-Through-Caches interpretieren. Das bedeutet, dass bei einem Cache-Miss die Anfrage an den nächsten Cache oder den Ursprungsserver
weitergeleitet und dann die Antwort gemäß der bereitgestellten TTL zwischengespeichert wird. Web-Caches leiten immer Schreibanfragen weiter, da diese in Form von undurchsichtigen POST, PUT und DELETE-Anfragen kommen, deren Semantik implizite Eigenschaften einer REST/HTTP-API sind.

Globale Netze von Web-Caches können in CDNs auf Inter-Cluster Austausch hinsichtlich Geo-Replikation vertrauen. In der Praxis nutzen CDN-Anbieter die Tatsache, dass eine Cache-Suche nach einer URL gut zu einer Schlüssel-Wert-Schnittstelle passt. Dies ermöglicht das Skalieren von Cache-Clustern, indem Web-Caches als Proxy auf einem verteilten Key Value gespeichert bereitgestellt werden.[13

1.2 Loadbalancing (Lastenausgleich)

Ein Load Balancer verteilt die Arbeitslast Ihres Systems auf mehrere Einzelsysteme oder eine Gruppe von Systemen, um die Belastung eines einzelnen Systems zu verringern, was wiederum die Zuverlässigkeit, Effizienz und Verfügbarkeit Ihrer Unternehmensanwendung oder Website erhöht.

Er fungiert als Vermittler/Regler, der vor den Servern sitzt und Anfragen an alle Server weiterleitet, die in der Lage sind, diese Anfragen in einer Weise zu erfüllen, welche die Geschwindigkeit und die Kapazitätsauslastung maximieren und sicherstellen. Somit wird sichergestellt, dass kein einzelner Server überlastet wird, und die Performance beeinträchtigt werden könnte. 

Falls ein einzelner Server ausfällt, leitet der Load Balancer den Datenverkehr auf die verbleibenden Online-Server um. Wenn ein neuer Server zur Servergruppe hinzugefügt wird, beginnt der Load Balancer automatisch, Anfragen an ihn zu senden.

Load Balancer verwenden Algorithmen wie Round-Robin, Sticky Sessions und inhaltsbasiertes Routing, um den Datenverkehr zu verteilen. Dadurch wird sichergestellt, dass kein einzelner Server mit Anfragen überlastet wird, was zu einer verbesserten Leistung und Skalierbarkeit führt.

Die aufgaben des Load Balancer:


  1. a) Verteilt Client-Anfragen bzw.r die Netzwerklast effizient auf einen weiteren oder mehrere Server.
  2. b) Überwacht den Zustand, die Verfügbarkeit und die Ausfallzeiten der Server
  3. c) Sorgt für hohe Verfügbarkeit und Zuverlässigkeit, indem er Anfragen nur an Server sendet, die online sind.
  4. d) Bietet die Flexibilität, je nach Bedarf Server hinzuzufügen oder zu entfernen


Vorteile des Lastausgleichs:


  1. Verringerung der Arbeitslast auf einem einzelnen Server.
  2. Durch Gleichzeitigkeit wird eine größere Menge an Arbeit in der gleichen Zeit erledigt.
  3. Gesteigerte Leistung Ihrer Anwendung durch schnellere Reaktion.
  4. Kein einzelner Ausfallpunkt. In einer Umgebung mit Lastausgleich ist die Anwendung bei Ausfall eines Servers immer noch verfügbar und wird von den anderen Servern im Cluster bedient.
  5. Wenn ein geeigneter Lastausgleichsalgorithmus verwendet wird, führt dies zu einer optimalen und effizienten Nutzung der Ressourcen, da das Szenario, dass einige Serverressourcen mehr genutzt werden als andere, vermieden wird.
  6. Skalierbarkeit: Wir können die Anzahl der Server im laufenden Betrieb erhöhen oder verringern, ohne die Anwendung zu beeinträchtigen.
  7. Lastausgleich erhöht die Zuverlässigkeit Ihrer Unternehmensanwendung
  8. Erhöhte Sicherheit, da die physischen Server und IPs in bestimmten Fällen abstrakt sind.


Es gibt zwei Arten von Load Balancern, die unterschiedliche Planungsalgorithmen und Routing-Mechanismen implementieren.

Der Software Load - Balancer läuft auf virtuellen Maschinen (VMs) oder White-Box-Servern, meist als Application-Delivery-Controller-Funktion (ADC). ADCs bieten in der Regel zusätzliche Funktionen, darunter Caching, Komprimierung und Traffic Shaping. Der in Cloud-Umgebungen beliebte virtuelle Lastenausgleich bietet ein hohes Maß an Flexibilität. Er ermöglicht es den Benutzern beispielsweise, den Datenverkehr automatisch nach oben oder unten zu skalieren, um Verkehrsspitzen oder einen Rückgang der Netzwerkaktivität zu spiegeln.

Der Hardware - Load-Balancer ist ein Gerät mit spezieller und meist proprietär integrierter Software, welche zum Bewältigen großer Datenmengen des Anwendungsverkehrs ausgelegt ist. Diese Art des Load Balancer verfügt u.a. über eine Virtualisierungsfunktion und ermöglicht die Verwendung von Instanzen eines virtuellen Load Balancers.

2. Verwendung von Reverse Proxies und Content Delivery Networks (CDNs)

2.1 Reverse Proxy

Reverse Proxies fungieren als Vermittler zwischen Clients und Webservern, verbessern die Leistung von Websites durch Caching und bieten zusätzliche Sicherheit, indem diese die IP-Adresse des Ursprungs-Servers verbergen.

Ein Reverse Proxy ist ein Server, der sich zwischen das Internet und einen Webserver schaltet, Anfragen von Clients entgegennehmen und sie an den entsprechenden Server weiterleitet. Dies kann in verschiedenen Situationen nützlich sein, z. B. wenn man mehrere Webserver hat, die unterschiedliche Arten von Inhalten anbieten (z. B. statische Dateien gegenüber dynamischen Inhalten), oder wenn diese die SSL-Verschlüsselung vom Webserver auf den Reverse-Proxy verlagern wollen.

Einer der Hauptvorteile eines Reverse-Proxys besteht darin, dass er die Leistung einer Website verbessern kann, indem er häufig angeforderte Inhalte zwischenspeichert und die direkt ausliefert, ohne diese vom Webserver anfordern zu müssen. Dies kann die Belastung des Webservers erheblich verringern und die Antwortzeiten für die Kunden verbessern.

=== 2.1.1 Funktionsweise ===

Wenn ein Client eine Anfrage für den Zugriff auf eine Website sendet, durchläuft dieser zunächst den Reverse Proxy. Der Proxy prüft in seinem Zwischenspeicher, ob er den vom Client angeforderten Inhalt bereits hat. Ist dies der Fall, kann er den Inhalt direkt an den Client ausliefern. Ist dies nicht der Fall, leitet er die Anfrage an den Ursprungsserver weiter, um die Inhalte abzurufen. Sobald der Inhalt abgerufen wurde, speichert der Reverse-Proxy ihn im Zwischenspeicher, so dass künftige Anfragen schneller bedient werden können.

Reverse Proxys können auch dazu verwendet werden, den Datenverkehr auf mehrere Server zu verteilen. Dieser Prozess wird als Lastausgleich bezeichnet und ist ein wesentlicher Bestandteil der Netzwerkarchitektur.

Darüber hinaus kann ein Reverse-Proxy auch zusätzliche Sicherheit bieten, indem er die IP-Adresse des Ursprungs-Servers verbirgt und vor DDoS-Angriffen schützt. Indem er als Schutzschild zwischen dem Internet und dem Webserver fungiert, kann der Reverse-Proxy Angreifer daran hindern, direkt auf den Webserver zu zielen und möglicherweise sensible Daten zu kompromittieren.

2.2 Reverse-Proxy Funktionen versus Load-Balancer Funktionen

  • Hochverfügbarkeit sowie Skalierbarkeit

    Einer der Hauptvorteile von Load Balancern besteht darin, dass sie den Datenverkehr und die Ressourcen auf mehrere Server verteilen können, was die Skalierung bei Bedarf erleichtert. Dies ist besonders nützlich in Umgebungen, in denen ein hohes Verkehrsaufkommen zu bewältigen ist. Reverse Proxies hingegen sind nicht für eine einfache Skalierung ausgelegt, da sie den Datenverkehr im Allgemeinen an einen einzigen Server leiten. Sie können jedoch häufig angeforderte Inhalte im Cache speichern, um die Leistung zu verbessern.

One of the main benefits of load balancers is their ability to distribute traffic and resources across multiple servers, making it easier to scale up as needed. This is particularly useful in environments where there is a high volume of traffic that needs to be handled. Reverse proxies, on the other hand, are not designed for easy scaling since they generally direct traffic to a single server. However, they can still cache frequently requested content to improve performance.

  • SSL-Terminierung

    Sowohl Load Balancer als auch Reverse Proxies können die SSL-Terminierung durchführen, bei der SSL-verschlüsselter Datenverkehr entschlüsselt und an den entsprechenden Server weitergeleitet wird. In einer Load-Balancing-Umgebung kann die SSL-Terminierung auf dem Load Balancer durchgeführt werden, während in einer Reverse-Proxy-Umgebung die SSL-Terminierung in der Regel auf dem Proxy-Server selbst erfolgt.

  • Security

    Load Balancer und Reverse Proxys können beide zum Schutz vor DDoS-Angriffen beitragen, aber Reverse Proxys haben den zusätzlichen Vorteil, dass diese Anonymität bieten. Sie können nämlich die IP-Adresse des Ursprungs-Servers verbergen, indem diese den gesamten externen Datenverkehr zunächst an den Reverse-Proxy weiterleiten. Dadurch wird es für Angreifer schwieriger, den Ursprungsserver zu identifizieren.

  • Datenverkehr im Netz

    Nochmals die bereits erwähnten Fakten. Die Hauptfunktion eines Load Balancer darin, den Netzwerkverkehr gleichmäßig auf mehrere Server zu verteilen. Dies ist besonders in Umgebungen nützlich, in denen mehrere Server ein hohes Verkehrsaufkommen bewältigen müssen. Reverse Proxies hingegen sind darauf ausgelegt, Inhalte zwischenzuspeichern und diese effizient an die Clients zu liefern. Daher eignen sie sich besser für die Bearbeitung von Anfragen nach statischen Inhalten von einem einzigen Server.

2.3 Apache Webserver als Reverse Proxy

Der Apache HTTP Server bietet eine breite Palette von Modulen und Erweiterungen, die speziell für die Unterstützung verschiedener Proxy-Funktionen entwickelt wurden.

Mit dem Modul mod_proxy kann der Apache-Webserver als Reverse-Proxy fungieren, indem er Anfragen an einen anderen Server weiterleitet und die Antwort an den Client zurückgibt. Dies erweist sich als nützlich in Szenarien, in denen mehrere Webserver vorhanden sind und die Arbeitslast auf diese verteilt werden muss. Es verbessert die Leistung und baut eine Hochverfügbarkeitsarchitektur für die Web-Infrastruktur auf.

Apache mod_proxy besteht aus mehreren Modulen, von denen jedes seine eigene Funktionalität hat. Hier sind einige der wichtigsten Module:

    • mod_proxy: Stellt die Kernfunktionalität des Reverse-Proxys bereit und leitet Anfragen an einen anderen Server weiter.
    • mod_proxy_http: Bietet Proxy-Funktionalität für HTTP- und HTTPS-Protokolle.
    • mod_proxy_ftp: Bietet Proxy-Funktionen für das FTP-Protokoll.
    • mod_proxy_connect: Für SSL-verschlüsselte Verbindungen.
    • mod_proxy_ajp: Dient der Weiterleitung von Anfragen an AJP-fähige Anwendungsserver.
    • mod_proxy_wstunnel: Für die Verwendung von Web-Sockets
    • mod_proxy_balancer: Bietet Lastausgleichsfunktionen.
    • mod_cache: Unterstützt verschiedene Cache-Methoden.
    • mod_headers: Zur Änderung von HTTP-Header-Zeilen.
    • mod_deflate: Komprimiert HTTP-Antworten.

2.4 Content Delivery Network 

Ein Content Delivery Network (CDN) ist ein System von Servern, welches via  verschiedener Rechenzentren weltweit verteilt(vgl. Adrew. S Tanenbaum - Distributed Systwms) sind. EinProxy-Server-Netzwerk ist optimal, um die Reichweite von Webseiten zu erhöhen. Die Verwendung eines solchen Netzwerks bedeutet, dass ein Webserver in Verbund mit einigen/vielen Servern verbunden ist. Mit Hilfe eines Verteilungssystems können die statischen Inhalte des Webserver auf Replikationsserver übertragen werden. Ein Anforderungsroutingsystem bestimmt, welcher Replikationsserver im CDN am Besten dafür geeignet ist, um die Daten/Dateien rasch auszuliefern, wenn Benutzer auf bestimmte Inhalte Ihrer Website zugreifen. Je nach Anbieter unterscheiden sich CDNs in mehreren Punkten: Die Verteilung und Anzahl der Server sowie der Grad der Integration leistungsstarker Backbone-Netzwerke sind nur einige Beispiele dafür, wie sie sich unterscheiden können.

Der Hauptzweck eines CDN besteht darin, die Latenzzeit zu verringern und die Zeit zu minimieren, die es dauert, bis die Inhalte die Nutzer erreichen. Dies wird durch die Platzierung von Servern in mehreren Datenzentren auf der ganzen Welt erreicht, die sich strategisch in der Nähe der wichtigsten Internetaustauschpunkte befinden. Wenn ein Benutzer Inhalte anfordert, leitet das CDN die Anforderung an den Server weiter, der dem Benutzer geografisch am nächsten liegt, wodurch die Entfernung, die die Daten zurücklegen müssen, verringert und somit die Antwortzeiten verbessert werden. CDNs tragen auch dazu bei, die Last auf Webservern zu verteilen, indem sie Inhalte in ihrem Netzwerk zwischenspeichern und vervielfältigen. Wenn Inhalte angefordert werden, kann der CDN-Server, der dem Nutzer am nächsten ist, die zwischengespeicherte Version der Inhalte bereitstellen, anstatt diese jedes Mal vom Ursprungsserver abzurufen. Dadurch wird der Ursprungsserver entlastet und die Skalierbarkeit verbessert. Darüber hinaus bieten CDNs weitere Funktionen wie Lastausgleich, SSL/TLS-Terminierung, DDoS-Schutz und Sicherheitsmaßnahmen zum Schutz vor bösartigen Angriffen. Sie können die Bereitstellung von Inhalten optimieren, indem sie Dateien komprimieren, Code minifizieren und Techniken wie Bildoptimierung und Browser-Caching nutzen. Durch den Einsatz eines CDN können Websites und Anwendungen von einer verbesserten Leistung, schnelleren Seitenladezeiten, höherer Verfügbarkeit und besserer Skalierbarkeit profitieren. Sie sind besonders nützlich für Websites mit einem globalen Publikum oder solchen, die große Mengen an medienintensiven Inhalten bereitstellen. [16]

Der Originserver in einem CDN dient als zentrales Repository für die Originalinhalte und interagiert mit der CDN-Infrastruktur, um Inhalte bereitzustellen und zu aktualisieren. Er spielt eine wichtige Rolle bei der Bereitstellung von Inhalten, bei Caching-Richtlinien, bei der Ungültigkeitserklärung von Inhalten und bei der Handhabung der dynamischen Inhaltsgenerierung. Der Originserver arbeitet mit den Edge-Servern im CDN zusammen, um eine effiziente und zuverlässige Bereitstellung der Inhalte für die Endbenutzer zu gewährleisten.

2.4.1 Originserver in CDNs 

In einem Content-Delivery-Network (CDN) ist der Originserver, sprich der Ursprungsserver,  der zentrale Server, auf dem das Original oder die maßgebliche Kopie des Webinhalts gespeichert ist. Der Originserver spielt eine entscheidende Rolle bei der Bereitstellung von Inhalten und interagiert mit der CDN-Infrastruktur.

2.4.1.1 Aufgaben/Funktion des Origin 

Quelle der Inhalte: Der Originserver ist die Hauptquelle der Inhalte, die über das CDN verbreitet werden. Er speichert die Originaldateien, z. B. HTML-Seiten, Bilder, Videos, Skripte und andere Medieninhalte, aus denen eine Website oder Anwendung besteht.

Verteilung von Inhalten: Wenn ein CDN eine Inhaltsanforderung erhält, prüft es, ob der angeforderte Inhalt im Cache des Edge-Servers verfügbar ist, der dem Benutzer am nächsten ist. Wenn der Inhalt im Cache nicht verfügbar oder abgelaufen ist, holt das CDN den Inhalt vom Originserver ab.

Bereitstellung von Inhalten: Der Originserver ist dafür verantwortlich, dem CDN die erforderlichen Inhalte zur Verteilung bereitzustellen. Dazu gehört das Hochladen und Aktualisieren der Inhalte auf dem Originserver, sobald Änderungen oder Aktualisierungen auftreten. Die Anbieter von Inhalten interagieren in der Regel direkt mit dem Originserver, um ihre Inhalte zu verwalten.

Caching-Richtlinien: Der Originserver kann Caching-Richtlinien oder -Regeln angeben, die das CDN befolgen soll. Dazu gehören Informationen wie Cache-Kontroll-Header, Cache-Ablaufzeiten und Cache-Validierungsmechanismen. Mit Hilfe der Caching-Richtlinien wird festgelegt, wie lange der Inhalt im Cache der Edge-Server gespeichert werden kann, bevor er vom Originserver aktualisiert werden muss.

Inhaltsvalidierung: Wenn Inhalte auf dem Originserver geändert, aktualisiert oder gelöscht werden, kann der Originserver die Invalidierung der Inhalte im CDN auslösen. Dadurch wird sichergestellt, dass die zwischengespeicherten Kopien des Inhalts auf den Edge-Servern gelöscht und durch die aktualisierte Version ersetzt werden. Dynamisch

Generierung von Inhalten: CDNs eignen sich zwar hervorragend für die Bereitstellung statischer Inhalte, können aber auch dynamische, vom Originserver generierte Inhalte verarbeiten. Dazu gehören Inhalte, die auf der Grundlage von Benutzerinteraktionen oder Echtzeitdaten personalisiert werden. CDNs können mit dem Originserver zusammenarbeiten, um die Bereitstellung dynamischer Inhalte zu optimieren, indem sie Techniken wie Edge-Side Scripting (ESS) oder Dynamic Content Caching einsetzen.

2.4.2 EdgeServer in CDNs

In einem Content-Delivery-Network (CDN) bezieht sich ein Edge-Server auf die Server, die sich am Rande des Netzes befinden, näher an den Endnutzern. Diese Server spielen eine entscheidende Rolle bei der effizienten Bereitstellung von Inhalten und sind eine Schlüsselkomponente der CDN-Infrastruktur.==== 2.3.2.1 Aufgaben/Funktion des Edge: ====

Zweck von Edge-Servern: Der Hauptzweck von Edge-Servern besteht darin, zwischengespeicherte Kopien von Webinhalten zu speichern und den Endnutzern bereitzustellen. Durch die Platzierung von Servern an verschiedenen geografisch verteilten Standorten verringern CDNs die Entfernung zwischen den Inhalten und den Nutzern, wodurch die Latenzzeit minimiert und die Leistung verbessert wird.

Zwischenspeicherung von Inhalten: Edge-Server speichern häufig aufgerufene Inhalte vom Ursprungsserver im Cache. Wenn ein Benutzer Inhalte anfordert, prüft das CDN, ob der Inhalt im Cache des Edge-Servers verfügbar ist. Ist dies der Fall, kann der Edge-Server den Inhalt direkt an den Benutzer liefern und muss ihn nicht erst vom Ursprungsserver abrufen. Dieser Caching-Mechanismus entlastet den Ursprungsserver und verbessert die Antwortzeiten.

Routing: CDNs verwenden intelligente Routing-Algorithmen, um den besten Edge-Server für die Bearbeitung einer Benutzeranfrage zu ermitteln. Dabei werden Faktoren wie der geografische Standort des Benutzers, die Netzwerkbedingungen, die Serverauslastung und die Verfügbarkeit berücksichtigt. Ziel ist es, die Anfrage an den Edge-Server zu leiten, der den Inhalt am effizientesten bereitstellen kann, wodurch die Latenzzeit minimiert und die Leistung maximiert wird.

Lastausgleich: Edge-Server spielen auch eine Rolle beim Lastausgleich innerhalb der CDN-Infrastruktur. CDNs verteilen Benutzeranfragen auf mehrere Edge-Server, um die Ressourcennutzung zu optimieren und Skalierbarkeit zu gewährleisten. Dadurch wird verhindert, dass ein einzelner Server überlastet wird, und es wird sichergestellt, dass der Prozess der Inhaltsbereitstellung effizient und zuverlässig ist.

Handhabung dynamischer Inhalte: Während Edge-Server in erster Linie für die Zwischenspeicherung und Bereitstellung statischer Inhalte verwendet werden, unterstützen CDNs auch die Bereitstellung dynamischer Inhalte. Dynamische Inhalte beziehen sich auf Inhalte, die auf der Grundlage von benutzerspezifischen Parametern oder Echtzeitdaten generiert oder personalisiert werden. CDNs können Techniken wie Edge-Side Scripting (ESS) oder die Integration mit Ursprungsservern einsetzen, um die Bereitstellung dynamischer Inhalte effizient zu gestalten. 
Bereinigung und Ungültigkeit von Inhalten: CDNs bieten Mechanismen zur Verwaltung des Cache und zur Gewährleistung der Aktualität von Inhalten. Wenn Inhalte auf dem Ursprungsserver aktualisiert werden oder aus dem Cache entfernt werden müssen, bieten CDNs Methoden zur Bereinigung und Invalidierung des Caches an. Diese Mechanismen ermöglichen es Inhaltsanbietern, die Entfernung von im Cache gespeicherten Inhalten von Edge-Servern manuell auszulösen, um sicherzustellen, dass die Benutzer die aktuellsten Inhalte erhalten.
Zusätzliche Funktionen: Edge-Server in CDNs bieten oft zusätzliche Funktionen, um die Leistung und Sicherheit zu verbessern, z. B. SSL/TLS-Terminierung, DDoS-Schutz und Web Application Firewall (WAF)-Funktionen. Diese Funktionen tragen dazu bei, die CDN-Infrastruktur und die bereitgestellten Inhalte vor potenziellen Bedrohungen und Angriffen zu schützen. Edge-Server sind das Rückgrat von CDNs, die für die Bereitstellung von zwischengespeicherten Inhalten und die Optimierung der Bereitstellung von Inhalten für Endbenutzer verantwortlich sind. Durch die strategische Platzierung von Edge-Servern weltweit verbessern CDNs die Leistung, Verfügbarkeit und Skalierbarkeit der Bereitstellung von Webinhalten erheblich.

2.4.3 Routing in CDNs 

Die Weiterleitung von Inhalten ist ein wichtiger Aspekt von Content Delivery Networks (CDNs), der bestimmt, wie Benutzeranfragen nach Inhalten an die entsprechenden Edge-Server für eine effiziente Bereitstellung weitergeleitet werden. Content-Routing-Algorithmen helfen bei der Optimierung der Auswahl des am besten geeigneten Edge-Servers auf der Grundlage von Faktoren wie Nähe, Netzwerkbedingungen, Serverauslastung und Verfügbarkeit.

:Analyse der Anfrage: Wenn ein Benutzer eine Anfrage nach Inhalten stellt, analysiert die CDN-Infrastruktur die Anfrage, um relevante Informationen zu sammeln. Diese Informationen können den geografischen Standort des Nutzers, die IP-Adresse, den Browsertyp, das Gerät und andere Parameter umfassen, die den Prozess der Inhaltsbereitstellung beeinflussen können.
Intelligente Weiterleitung: CDN setzen intelligente Routing-Algorithmen ein, um den besten Edge-Server für die Bearbeitung der Benutzeranforderung zu ermitteln. Diese Algorithmen berücksichtigen verschiedene Faktoren, um eine fundierte Entscheidung zu treffen. Zum Beispiel: Proximity (Nähe): Das CDN versucht, die Anfrage an einen Edge-Server zu leiten, der dem Benutzer geografisch am nächsten liegt. Die Minimierung der physischen Entfernung zwischen dem Benutzer und dem Server trägt zur Verringerung der Latenzzeit und zur Verbesserung der Leistung bei.
Netzwerkbedingungen:
Das CDN berücksichtigt die Netzwerkbedingungen, wie z. B. Netzwerküberlastung, Paketverluste und Latenzmessungen, um einen Edge-Server mit der besten Netzwerkleistung für den Benutzer auszuwählen.

Load-Balancing: CDNs verteilen die Last auf mehrere Edge-Server, um eine effiziente Ressourcennutzung zu gewährleisten. Der Routing-Algorithmus berücksichtigt die aktuelle Last und Verfügbarkeit der Edge-Server und leitet die Anfrage an einen Server mit geringerer Last und höherer Kapazität weiter. Echtzeit-

Zeit-Überwachung: CDNs überwachen kontinuierlich die Leistung und Verfügbarkeit von Edge-Servern. Wenn ein bestimmter Edge-Server Probleme hat oder nicht mehr verfügbar ist, kann der Routing-Algorithmus die Anfragen dynamisch an andere geeignete Server umleiten.

Anycast-Routing: CDNs verwenden häufig Anycast-Routing, eine Technik, die es mehreren Edge-Servern ermöglicht, dieselbe IP-Adresse zu nutzen. Anycast ermöglicht die Weiterleitung von Anfragen an den nächstgelegenen Edge-Server auf der Grundlage der Netzwerktopologie. Wenn ein Benutzer eine Anfrage stellt, wählt die Routing-Infrastruktur den nächstgelegenen Anycast-Node aus und stellt so sicher, dass die Anfrage an den in Bezug auf die Netzwerkentfernung nächstgelegenen Edge-Server geleitet wird.

2.4.4 Caching

In einem Content Delivery Network (CDN) werden Caching-Algorithmen verwendet, um zu bestimmen, welche Inhalte in den Edge-Servern zwischengespeichert werden sollen und wie der Cache verwaltet werden soll. Diese Algorithmen spielen eine entscheidende Rolle bei der Optimierung der Cache-Nutzung, der Sicherstellung der Verfügbarkeit von häufig abgerufenen Inhalten und der Verbesserung der Gesamtleistung des CDN. Im Folgenden werden einige gängige Caching-Algorithmen vorgestellt, die in CDNs verwendet werden:´. Cache ist eine grundlegende Komponente von Content Delivery Networks (CDNs). Im Zusammenhang mit CDNs bezieht sich Caching auf den Prozess der Speicherung von Kopien von Webinhalten auf den Edge-Servern des CDN-Netzwerks.

Nachstehend einige Caching Algorithmen:

Least Recently Used (LRU)

Least Frequently Used (LFU)

First-In-First-Out (FIFO)

Random Replacement

Adaptive Replacement Cache (ARC)

Greedy Dual-Size Frequency (GDSF)

Multi-Level Caching

3. Grundlagen von Docker 

Docker ist eine zentrale Plattform für das Verpacken, Bereitstellen und Ausführen von Anwendungenund bedients sich des Containering. Containervirtualisierung bzw Containeringist eine Methode, um mehrere Instanzen eines Betriebssystems als Host isoliert voneinander den Kernel des Hostbetriebssystem nutzen zu lassen. Die Idee von Docker ist es, dass Entwickler auf einfache Weise Anwendungen entwickeln und die auf Container packen können, welche dann überall eingesetzt werden können. Die Container stellen sicher, dass unsere Anwendung in jeder Umgebung wie Entwicklung, Test oder Produktion funktioniert Docker ermöglicht es , Software einfach zu installieren und auszuführen, ohne sich um die Einrichtung oder Abhängigkeiten zu kümmern. Docker ist ein Dienst zur Verwaltung von Containern. Die Docker Container sind nicht für die Ausführung von typischen Client-Anwendungen wie Excel oder Word gedacht. In Dockercontainern laufen nur Server-Applikationen, welche über interfaces mit Protokollen interagieren/kommunizieren.[25] Dabei können Anwendungen mit verschiedenen Programmiersprachen, wie Java, PHP. Perl, Ruby, Python, Scala, etc. erstellen und ausführen (siehe das Beispiel unter 3.1.7.2).

Docker ist so konzipiert, dass es sowohl dem Entwickler als auch dem Systemadministrator nützt. Es gibt folgende Gründe für die Verwendung von Docker [25]
-  Docker ermöglicht die einfache Installation und Ausführung von Software, ohne dass wir uns um die Einrichtung oder Abhängigkeiten kümmern müssen.
-  Entwickler verwenden Docker, um maschinelle Probleme zu beseitigen, wenn sie gemeinsam mit Kollegen am Code arbeiten.
-  Betreiber verwenden Docker, um Anwendungen auf isolierten Containern auszuführen und zu verwalten, um die Rechendichte zu erhöhen
-  Unternehmen nutzen Docker zum sicheren Aufbau von agilen Software-Delivery-Pools und um neue Anwendungsfunktionen schneller und sicherer zu implementieren

Anmerkung: Da Webserver zu 75-80 auf Linux/Unix-Derivaten laufen[4], basieren ggf. darauf nachstehende Beispiele 

Die offizielle Website für Docker ist https://www.docker.com/. Die Website enthält alle Informationen und Dokumente über die Docker-Software und auch die Download-Links für verschiedene Betriebssysteme.

ABGRENZUNG zu  einer VM siehe Kapitel Docker Container in . 3.1.4.2

'

3.1 Die Architektur

Docker folgt der Client-Server-Architektur. Die Archıtektur besteht aus drei Teilen. [26]

1) Clıent: Docker stellt dem Client Command Lıne Interface (CLI) Tools zur Verfügung, um mit dem Docker-Daemon zu interagieren. Clıent kann Anwendungen erstellen, ausführen und stoppen. Clıent kann auch aus der Ferne mit dem  Dockerhost interagieren.
2) Host: Er enthält Contaıner, Images und Docker-Daemon. Er bietet eine vollständige Umgebung für die Ausführung und den Betrieb Ihrer Anwendung.
3) Regıstry: Es ist ein globales Reposıtory von Images.

Der Docker-Client kommuniziert mit dem Docker-Daemon, der  das Erstellen, Ausführen und Verteilen der Docker-Container übernimmt. Der Docker-Client und -Daemon können auf demgeichen System ausgeführt werden.Der Docker-Client und -Daemon kommunizieren über eine REST-API, über UNIX-Sockets oder eine Netzwerkschnittstelle. Ein weiterer Docker-Client ist Docker Compose, mit demmit Anwendungen gearbeitet werden können, die aus einer Folge  von Containern bestehen.


19Docker.jpg [27]=== 3.1.1 Der Docker-Daemon ===

Ein Daemon**) ist ein Hintergrundprozess, der anderen Anwendungen, den Clients, verschiedene Dienste zur Verfügung stellt. Der Docker-Daemon**) ( dockerd) wartet auf Docker-API-Anfragen und verwaltet Docker-Objekte wie Images, Container, Netzwerke und Volumes. Ein Daemon kann auch mit anderen Daemons kommunizieren, um Docker-Dienste zu verwalten.**) Daemon ist ein Begriff aus der Unix-Welt in der Windows-Wellt wird dieser Dienst bzw. Service genannt.

3.1.2 Der Docker-Client

Der Docker-Client ( docker) ist für viele Docker-Benutzer die primäre Methode zur Interaktion mit Docker. Wenn z.B. der Befehl  docker run verwendet wird, sendet der Client diese Befehle an dockerd, der  sie ausführt. Ein  docker Befehl verwendet die Docker-API. Der Docker-Client kann mit mehr als einem Daemon kommunizieren.

3.1.3 Docker-Registry

in der Docker-Registry werden die Docker-Images gespeichert. Docker Hub **)ist eine öffentliches Registry, das jeder verwenden kann,denn Docker sucht standardmäßig auf Docker Hub nach Images. Dort kann auch ein eigenes privates Register betrieben werden. Mittels der Befehle docker pull oder  docker run, ruft Docker die erforderlichen Images aus der konfigurierten Registrierung ab. Wird der  docker push Befehl verwenden, überträgt Docker das Image in die konfigurierte Registry.
** )Die offizielle Seite für Docker Hub ist - https://www.docker.com/communıty-edıtıon#/add_ons

=

3.1.4 Docker-Objekte
===

Wenn Docker verwendet wird , erstellt und verwendet man Images, Container, Netzwerke, Volumes, Plugins und andere Objekte. 

==

3.1.4.1 Docker-Image
====

Ein Image ist eine schreibgeschützte Vorlage mit Anweisungen zum Erstellen eines Docker-Containers. Häufig basiert ein Image auf einem anderen Image mit einigen zusätzlichen Anpassungen. Man kann beispielsweise ein Image erstellen, das auf dem ubuntu Image basiert, aber den Apache- Webserver und Ihre Anwendung sowie die Konfigurationsdetails installiert, die zum Ausführen Ihrer Anwendung erforderlich sind. Man kann die eigenen Images erstellen oder nur die von anderen erstellten und in einerr Registry veröffentlichten Images verwenden. Um ein eigenes Image zu erstellen, erstellt man ein Dockerfile mit einer einfachen Syntax zum Definieren der zum Erstellen und Ausführen des Images erforderlichen Schritte. Jede Anweisung in einem Dockerfile erstellt eine Ebene im Image. Wenn man das Dockerfile ändern und das Image neu erstellen, werden nur die geänderten Ebenen neu erstellt. Dies ist einer der Gründe, warum Images im Vergleich zu anderen Virtualisierungstechnologien so leicht, klein und schnell sind.
Docker-Images sind in sich geschlossene Vorlagen, die zur Erstellung von Containern verwendet werden. Sie nutzen ein mehrstufiges Dateisystem, um Daten effektiv zu speichern. Jede Schicht, die Anweisungen wie das Herunterladen von Softwarepaketen oder die Übertragung von Konfigurationsdateien enthält, steht für eine bestimmte Phase im Prozess der Image-Erstellung. Nur die aktualisierten Schichten müssen neu erstellt und ausgeliefert werden, so dass die Schichtung eine effektive Methode zur gemeinsamen Nutzung und Aktualisierung von Images darstellt.Die Grundlage für ein Docker-Image bildet eine Textdatei, das so genannte Dockerfile. In dieser Datei sind die Anweisungen für die Erstellung des Images Schicht für Schicht enthalten. In den meisten Fällen beginnt eine Anweisung mit einem Begriff wie „FROM“, um das Basis-Image zu identifizieren, bei dem es sich normalerweise um eine minimale Linux-Distribution handelt. Befehle wie „RUN“ werden dann verwendet, um bestimmte Operationen innerhalb einer Schicht auszuführen. Auf diese Weise kann die Umgebung innerhalb des Containers genau verwaltet werden[31][26].
Nachstehend einige Basis-Komponenten:
:Layer
Docker-Images bestehen aus mehreren Schichten. Jede Schicht bezeichnet eine Sammlung von Dateisystemänderungen. Jede Dockerfile-Anweisung fügt beim Erstellen eines Docker-Images eine Schicht auf der vorherigen hinzu. Einmal erstellte Schichten sind unveränderlich, was sie unveränderbar macht.
Basis-Image
Die Grundlage, auf der Ihr angepasstes Docker-Image aufgebaut wird, ist ein Basis-Image. In der Regel enthält es die minimale Laufzeitumgebung und das Betriebssystem, die für die Fertigstellung Ihrer Anwendung erforderlich sind.
Dockerfile
Dockerfile ist ein Textdokument mit einer Reihe von Anweisungen zur Erstellung eines Docker-Images. Diese Anweisungen beschreiben, wie das Basis-Image erstellt, Dateien und Verzeichnisse hinzugefügt, Abhängigkeiten installiert, Einstellungen angepasst und der Einstiegspunkt des Containers definiert wird.

Image-Registrierung

Docker-Images können entweder in öffentlichen oder privaten Registern gespeichert werden, z. B. Azure Container Registry (ACR), Google Container Registry (GCR), Amazon Elastic Container Registry (ECR) und Docker Hub.

Tagging

Ein Repository-Name und ein Tag bilden zusammen eine eindeutige Identifikation für Docker-Images. Tags werden verwendet, um zwischen verschiedenen Image-Versionen zu unterscheiden. Wenn kein Tag angegeben wird, verwendet Docker standardmäßig das neueste“ Tag.

Image Pulling und Pushing

Der Befehl docker pull wird verwendet um Docker-Images von der Registry auf ein lokales System herunterzuladen --> docker push , um Images von einem lokalen Rechner zu einer Registry zu pushen.

Layer-Caching

Zur Leistungsoptimierung verwendet Docker beim Erstellen von Images das Layer-Caching.

==

3.1.4.2 Docker Container
====

Docker-Container sind die leichtgewichtige Alternativen zur virtuellen Maschine. Sie ermöglichen es Entwicklern, die Anwendung mit all ihren Komponenten und Abhängigkeiten zu verpacken und als einzelnes Paket zu versenden. Der Vorteil der Verwendung eines Docker-Containers besteht darin, dass Sie keinen RAM- und Speicherplatz für die Anwendungen reservieren müssen. Es generiert automatisch Speicher und Platz entsprechend den Anforderungen der Anwendung. Nachstehend die Abgrenzung zur virtual machine (VM). Eine virtuelle Maschine ist eine Software, die es ermöglicht, andere Betriebssysteme (Windows, Linux ,etc. gleichzeitig auf unserem Rechner zu installieren und zu verwenden.

Ein Container ist eine ausführbare Instanz eines Images. Container können mithilfe der Docker-API oder CLI erstellt, gestartet, gestoppt, verschoben oder gelöscht werden. Er kann sich mit einem oder mehreren Netzwerken verbinden, Speicher an ihn anhängen oder sogar basierend auf dem aktuellen Status ein neues Image erstellen.Standardmäßig ist ein Container relativ gut von anderen Containern und seinem Hostcomputer isoliert und können steuern, wie isoliert das Netzwerk, der Speicher oder andere zugrunde liegende Subsysteme eines Containers von anderen Containern oder vom Hostcomputer sind. Ein Container wird durch sein Image sowie alle Konfigurationsoptionen definiert, die ihm beim Erstellen oder Starten zur Verfügung gestellt/angegeben werden. Wenn ein Container entfernt wird, entschwinden alle Änderungen an seinem Status, die nicht im permanenten Speicher gespeichert sind.

28vm container.jpg

Vorteile von Container: [35]
-- Container nutzen im Vergleich zu virtuellen Maschinen deutlich weniger Systemressourcen, da sie ohne vollständiges Betriebssystem auskommen.
-- Dank der Containerisierung lassen sich Anwendungen mühelos über verschiedeneBetriebssysteme und Hardwareumgebungen hinweg einsetzen.
-- Durch den Einsatz von Containern lassen sich Anwendungen schneller ausrollen,aktualisieren und skalieren.
-- Sie beschleunigen auch den Entwicklungsprozess, und durch die Portabilitätder Images können sie auf jedem Entwicklerrechner ausgeführt werden. 3.1.4.3 Docker-Container Ausführung

Container können in verschiedenen Modi betrieben werden und zwar als [29]

Backgroundcontainer - Dafür sind insbesonders Webserver und DB-Server geeignet, da diese über einen "Dauerloop" verfügen. Der vorteil ist, dass ein Programm im Container nich automatisch beendet wird, da socnst auch der Container gestoppt wird Interactivecontainer - Dieser eignet sich zum Testen, da man sich interactiv über das z.B. CLI mit einer Anwendung im Container verbinden kann.

Taskcontainer - Dieser enthält den Code mit sämtlichen Abhängigkeiten, der gekapselt ist und dazu verwendet wird, diesen code auszuführen, In lartext z.B. ein Shellscript befindet, mit ggf. vielen Paketabhängihkeiten, der eine Umgebung aufbaut. Nach der Ausführung wird dieser Container wieder beendet. Der Vorteil dieses Conainer ist, dass er sich gut zur Automatisierung eignet.

3.1.5 Docker-Desktop

Docker Desktop ist eine einfach zu installierende Anwendung für die Mac-, Windows- oder Linux-Umgebung, mit der containerisierte Anwendungen und Microservices erstellt und freigeben werden.
Docker Desktop umfasst:
Docker-Daemon ( dockerd),
den Docker-Client ( docker),
Docker Compose,
Docker Content Trust,
Kubernetes,
Credential Helper. 

3.1.6 Docker-Netzwerk

Zum Verinden richtet Docker standardmäig drei Neetzwerke ein:

BRIDGE --> es wirch auch manchmal als docker 0 bezeichnet. Darin wird jeder Container, falls nicht anders definiert, eingehängt.

HOST  --> ist der Host selbst, er wird direkt an die IP-Adresse gebunden

NONE --> ist eigentlich keine Netzwerkverbindung 3.1.7 Docker-File

Docker kann Images automatisch erstellen, indem es die Anweisungen aus einem Dockerfile liest. 
Ein Dockerfile ist ein Textdokument, das Befehle enthält, die  zum Zusammenstellen eines Image verwendet werden. Wir können jeden Befehl verwenden, der die Befehlszeile aufruft. Docker baut Images automatisch auf, indem es die Anweisungen aus der Docker-Datei liest. Der Befehl docker buıld wird verwendet, um ein Image aus der Docker-Datei zu erstellen.
Die Anweisungen unterscheiden nicht zwischen Groß- und Kleinschreibung, aber es müssen Konventionen befolgt werden, die die Verwendung von Großbuchstaben empfehlen. Docker führt die Anweisungen der Docke rfıle in der Reihenfolge von oben nach unten aus. Die erste Anweisung muss FROM sein, um das Basis-Image zu spezifizieren. Eine Anweisung, die mit # beginnt, wird wie ein Kommentar(das kennen wir bereits von einigen Programmiersprachen) behandelt. Wir können die Anweisungen RUN, CMD, FROM, EXPOSE, ENV usw. im Dockerfıle verwenden.

3.1.7.1  Docker-File Referenz

Diese gibt einen Überblick über die Befehle und Anweisungen [30]

3.1.7.1  Docker-File Referenz

Diese gibt einen Überblick über die Befehle und Anweisungen [30]
Nachstehend ein paar Befehle damit 3.1.7.2 leichter zur Hand geht.

Der Befehl    sudo docker ps  -a     listet die Container auf

      26docker ps.jpg 


Anmerkung: ein Container kann Aufgrund der CONTAINER ID  oder eines NAMENS (hier hat das System einige selbst  via Zufallsgenerator vergeben) gelöscht werden.

3.1.7.2  Docker-File - ein Beispiel für PHP
Nachstehend ein fiktiver Ablauf wie eine PHP-Anwendung unter Verwendung von Docker ausführt werden könnte.
1) Ein Verzeichnis im Standardordner (z.B. /var/www/html/shop/public_html )erstellen, um die Dateien zu organisieren, indem folgender Befehl verwendet wird.
 mkdır public_html  
2) In diesem eine Datei**) index.php erstellen mit z.B. nachstehendem Inhalt.
     <?php
     $count = 1;
$x = "Student";
While ($count < 6 ) {           echo "Hello $x $count  \n" ; 

           $count++;

}
?> 
 

3) In diesem das Docker-File erstellen mit dem Namen  dockerfile
FROM php:8.2-apache
COPY . /var/www/html/shop/public_html/
CMD [ "php", "./index.php"]

4) Das Docker-Image erstellen:
  sudo docker buıld -t mein_image  '''.'''     <--Achtung dieser Punkt ist wichtig 
 In der Ausgabe ist ersichtlich, dass automatisch die die Datei dockerfile gesucht und verarbeitet wird.  27docker image.jpg 
5) Das Docker-Image aufrufen:
  sudo docker run -d  --name mein_name mein_image
6) Anmerkung: der Container wurde erstellt. Die index.php im Webbrowser zu öffnen wurde in diesem Beispiel nicht gelöst

Einfache Scripte können auch ohne ein Dockerfile ausgeführt werden    docker run -it --rm --name dummy_php_demo  -v "$PWD":/var/www/html/shop/public_html -w /var/www/html/shop/public_html php:8.2-cli php index.php

Anmerkung: der Parameter  --rm löscht den Container wieder
**) Es kann auch jeder andere Dateiname sein, jedoch wird diese automatisch vom Browser gesucht

3.1.8 Docker-Hub

Docker Hub ist ein cloudbasierter Repository-Dienst, der von Docker angeboten wird und eine Fülle von Funktionen bietet[31]:

Centralized Repository − Es ermöglicht die Suche, den Zugriff und die gemeinsame Nutzung von containerisierten Anwendungen und Diensten. 
Vast Library of Images −  Es bietet Zugriff auf eine riesige Bibliothek von vorgefertigten Docker-Images. Dazu gehören beliebte Webserver, Datenbanken, Programmiersprachen und Frameworks sowie andere Software und Dienste. 
Open Collaboration − Es fördert eine Umgebung der offenen Zusammenarbeit. Es ermöglicht Entwicklern, ihre eigenen Docker-Images mit der Community zu teilen. 
Automation Tools − Es bietet Tools für die Automatisierung von Build, Test und Bereitstellung von Docker-Images, u.a. Funktionen wie die Integration mit CI/CD-Pipelines für reibungslose kontinuierliche Integrations- und Bereitstellungsabläufe. Darüber hinaus bietet es Unterstützung für automatisierte Builds, die automatisch gestartet werden, sobald Änderungen an einem Repository vorgenommen werden.
Versioning & Tagging − Es ermöglicht die Versionierung und das Tagging von Docker-Images. Dies vereinfacht die Verwaltung und Verfolgung der verschiedenen Iterationen eines Dienstes oder einer Anwendung im Laufe der Zeit. Dies macht es einfacher, bei Bedarf auf frühere Versionen zurückzugreifen, und garantiert Konsistenz und Reproduzierbarkeit in verschiedenen Umgebungen.
Access Control & Permissions − verfügt über einige leistungsstarke Funktionen zur Verwaltung von Zugriffskontrolle und Berechtigungen. Damit kann man regeln, wer Docker-Images anzeigen, bearbeiten und freigeben darf. Dies ist vor allem für Teams von Vorteil, die an vertraulichen oder proprietären Anwendungen arbeiten, da so die Sicherheit und Integrität von containerisierten Bereitstellungen gewährleistet werden kann.
Scalability & Performance − Dieser Cloud-basierter Dienst, ermöglicht eine leistungsstarke Infrastruktur und Skalierbarkeit für das Hosting und die Verteilung von Docker-Images.

Integration - Docker Ecosystem − Es bietet eine einheitliche Plattform für die Entwicklung, den Start und die Überwachung von containerisierten Anwendungen von der Entwicklung bis zur Produktion. Dies geschieht durch die nahtlose Integration in das größere Docker-Ökosystem, das Docker Engine, Docker Compose und Docker Swarm umfasst.

Die offizielle Webseite von  Docker-Hub  https://www.docker.com/communıty-edıtıon#/add_ons

'

3.1.9 Docker-Compose

In Docker Compose stellt einige grundlegende Konzepte vor. Dazu gehören die Architektur einer in YAML geschriebenen Docker Compose-Datei, Dienste, Netzwerke, Volumes und Umgebungsvariablen. Es ist ein Werkzeug, um die Dienste unserer Anwendung zu konfigurieren. und für die Entwicklung, den Test und die Inszenierung von Umgebungen. Es stellt die folgenden Befehle für die Verwaltung des gesamten Lebenszyklus unserer Anwendung zur Verfügung: 

 Starten, Stoppen und Wiederherstellen von Diensten 
 Anzeige des Status laufender Dienste 
 Streamen der Protokollausgabe von laufenden Diensten
 Ausführen eines einmaligen Befehls auf einem Dienst

Anmerkung: Hinsichtlich eines konstrktivistischen Ansatzes, gibt es im Web gibt es Anleitungen dazu. So z.B. Ubuntu 22.04 u. Docker  --> https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-on-ubuntu-22-04

4. Kubernetes

Kubernetes oder kurz k8s, wurde von Google-Ingenieuren auf der Grundlage der Erfahrungen entwickelt, diese beim jahrelangen Betrieb von Containern in großem Maßstab gesammelt haben. Es wurde der Community als Open-Source-Projekt zur Verfügung gestellt und ist heute die Standardplattform für die Bereitstellung und Verwaltung von Cloud-nativen Anwendungen. Es läuft in jeder Cloud und in jedem Rechenzentrum vor Ort und abstrahiert die zugrunde liegende Infrastruktur. Dies ermöglicht den Aufbau hybrider Clouds sowie die Migration in, aus und zwischen verschiedenen Clouds. Es steht unter der Apache 2.0-Lizenz als Open Source zur Verfügung und wird von der Cloud Native Computing Foundation (CNCF) betrieben und verwaltet. Kubernetes ist ein Orchestrator für containerisierte, cloud-native Microservices-Anwendungen. Ein Orchestrator ist ein System oder eine Plattform, die Anwendungen bereitstellt und dynamisch auf Änderungen reagiert. Um eine Microservices-Anwendung zu erstellen, muss jede Funktion als eigene kleine Anwendung entworfen, entwickelt, bereitstellt und verwaltet werden. Diese kleinen Anwendungen werden als Microservice bezeichnet.[28]. Es begann als einfaches Container-Orchestrierungstool, hatsich aber zu einer Cloud-nativen Plattform entwickelt.

Kubernetes ist der "key enabler" für:

Hybride Cloud

Multi-Cloud

Cloud-Migrationen

Kubernetes ist sowohl  Cluster, als auch Orchestrator. Bei beiden Typen kann es sich um physische Server, virtuelle Maschinen oder Cloud-Instanzen handeln, und beide können auf ARM und AMD64/x86-64 laufen. Control-Plane-Knoten müssen Linux sein, Worker-Knoten können jedoch Linux oder Windows sein.

4.1 Kubernetes und Docker

Alle frühen Versionen von Kubernetes wurden mit Docker ausgeliefert und verwendeten es als Laufzeitumgebung. Das Kubernetes-Projekt hat die Container-Laufzeitschnittstelle (CRI) entwickelt, um die Laufzeitschicht anpassbar zu machen. Mit Kubernetes 1.24 wurde die Unterstützung für Docker als Laufzeitumgebung endgültig abgeschafft, da sie aufgebläht und für die Anforderungen von Kubernetes zu umfangreich war. Seitdem werden die meisten neuen Kubernetes-Cluster mit containerd (ausgesprochen "container dee") als Standard-Laufzeitumgebung ausgeliefert. Glücklicherweise handelt es sich bei containerd um eine abgespeckte Version von Docker, die für Kubernetes optimiert wurde und von Docker containerisierte Anwendungen vollständig unterstützt. Tatsächlich arbeiten Docker, containerd und Kubernetes alle mit Images und Containern, die die Standards der Open Container Initiative (OCI) implementieren.Ubuntu ist die Referenzplattform für Kubernetes in allen wichtigen öffentlichen Clouds.

4.2 Kubernetes ein OS ? 

Kubernetes ist die De-facto-Plattform für Cloud-native Anwendungen, und es wird manchmal "das Betriebssystem der Cloud" genannt. Das liegt daran, dass Kubernetes die Unterschiede zwischen Cloud-Plattformen auf die gleiche Weise abstrahiert, wie Betriebssysteme wie Linux und Windows die Unterschiede zwischen Servern abstrahieren:

 -- Linux und Windows abstrahieren Serverressourcen und planen Anwendungsprozesse
 -- Kubernetes abstrahiert Cloud-Ressourcen und plant Anwendungs-Microservices.

4.2 Kubernetes - allgemeine Fuktionen

Die Bereitstellung von Kubernetes umfasst Cluster , die Bausteine der Kubernetes-Architektur. Cluster bestehen aus Knoten, von denen jeder einen einzelnen Compute-Host darstellt, entweder eine physische Maschine (Bare-Metal-Server) oder eine VM.

Kubernetes plant und automatisiert containerbezogene Aufgaben während des gesamten Anwendungslebenszyklus:

Einsatz -- eine bestimmte Anzahl von Containern auf einem bestimmten Host wird bereitgestellt .
Rollouts -- eine Änderung an einer Bereitstellung und/oder initiieren, anhalten, fortsetzen oder rückgängig machen dieser
Diensterkennung -- einen Container automatisch dem Internet oder anderen Containern zugänglich machen, indem es einen DNS- Namen oder eine IP verwendet
Memoryverwaltung -- damit bei Bedarf dauerhafter lokaler oder Cloud-Speicher für Ihre Container bereitgestellt wird.
Loadbalanceing -- basierend auf der CPU-Auslastung oder benutzerdefinierten Metriken
Speicherbereitstellung -- damit bei Bedarf dauerhafter lokaler oder Cloud-Speicher für Ihre Container bereitgestellt wird.
Automatische Skalierung -- bei Verkehrsspitzen kann die automatische Skalierung nach Bedarf neue Cluster hochfahren, um die zusätzliche Arbeitslast zu bewältigen.
Selbstheilung für hohe Verfügbarkeit -- wenn ein Container ausfällt, kann dieser neu gestartetn oder ersetzt werden, um Ausfallzeiten zu vermeiden. Container werden heruntergefahren, welche die Integritätsprüfungsanforderungen nicht erfüllen.

4.3 Kubernetes - Technologien

Nachstehend einige Technologien von Kubernetes:

Control-Plane-Knoten und Worker-Knoten 
Paketierung von Anwendungen 
Das deklarative Modell und der gewünschte Zustand 
Pods 
Deployments Dienste
Control-Plane-Knoten implementieren die Kubernetes-Intelligenz, und jeder Cluster benötigt mindestens einen. Für hohe Verfügbarkeit (HA) sollten es jedoch zumindest drei sein. Jeder Steuerebenenknoten führt jeden Steuerebenendienst aus. Dazu gehören der API-Server, der Scheduler und die Controller, die Cloud-native Funktionen wie Selbstheilung, automatische Skalierung und Rollouts implementieren. Worker Nodes dienen der Ausführung von Benutzeranwendungen.
4.3.1. Kubernetes -  Cluster
Ein Kubernetes-Cluster besteht aus einem oder mehreren Knoten, der CPU, dem Speicher und andere Ressourcen für die Nutzung durch Anwendungen. Man Aackt die anwendungen zusammen und gibt diese an den Cluster (Kubernetes). Der Cluster besteht aus einem oder mehreren Mastern und einer Reihe von Knoten. Die Master, manchmal auch Head oder Head Nodes genannt, sind für den Cluster zuständig. Das bedeutet, dass sie Entscheidungen über die Zeitplanung treffen, die Überwachung durchführen, Änderungen implementieren, auf Ereignisse reagieren und vieles mehr. Aus diesem Grund bezeichnen wir die Master oft als die Steuerungsebene (control plane). Die Knoten, auf denen die Anwendungsdienste laufen, werden manchmal auch als Datenebene (data plane) bezeichnet. Jeder Knoten hat eine Berichtslinie zurück zu den Mastern und beobachtet ständig, ob neue Arbeitsaufträge vorliegen.

4.3.2. Kubernetes - Control Plane

Die Steuerebene ist eine Sammlung von Systemdiensten, die das Herzstück von Kubernetes bilden. Sie stellt die API bereit, plant Aufgaben, implementiert die Selbstheilung, verwaltet Skalierungsvorgänge und vieles mehr. Bei den einfachsten Konfigurationen wird nur ein einziger Control-Plane-Knoten ausgeführt, der sich am besten für Labore und Tests eignet. Wie bereits erwähnt, sollten jedoch in Produktionsumgebungen drei oder besser fünf Control-Plane-Knoten betreiben und diese für eine hohe Verfügbarkeit über Verfügbarkeitszonen verteilen,

Datei:21Kubernetes controlplane.jpg [28]

Obige Abbildung zeigt eine generische Kubernetes-Architektur mit einer Steuerungsebene auf der linken Seite, die aus API-Modul, Cloud-Controller-Modul, Controller-Manager und dem Scheduler besteht. Die Steuerebene bietet die globalen Operationen für die Kubernetes-Architektur, wie Scheduling, Skalierung und Steuerung von Pods. Auf der rechten Seite befinden sich drei Worker-Nodes, die aus einem Kubelet 3 und einem Proxy-Modul bestehen. Diese stellen den Pods, die die containerisierte Anwendung enthalten, Funktionen und Netzwerkfähigkeiten zur Verfügung. Ein Worker Node kann mehrere Pods gleichzeitig verwalten. Ein Pod kann mehrere Container beherbergen.

20Kub Cluster.jpg [28]
4.3.2.1 Kubernetes - API Server

Der API-Server ist das Frontend von Kubernetes. Alle Anfragen zur Änderung und Abfrage des Zustands des Clusters laufen über ihn. Selbst die internen Dienste der Steuerungsebene kommunizieren über den API-Server miteinander. Er stellt eine RESTful-API über HTTPS bereit, und alle Anfragen unterliegen einer Authentifizierung und Autorisierung. 
Beispielhaft Schritte für das Bereitstellen oder Aktualisieren einer Anwendung: 

Beschreiben der Anforderungen in einer YAML-Konfigurationsdatei**)
Übergabe der Konfigurationsdatei an den API-Server 
Die Anfrage wird authentifiziert und autorisiert 
Die Aktualisierungen werden im Clusterspeicher aufbewahrt. 
Die Aktualisierungen werden für den Cluster geplant.
**) ein textbasiertes Dateiformat zur Datenserialisierung [99]

 

4.3.3. Kubernetes - Cluster Store
Der Clusterspeicher enthält den gewünschten Status aller Anwendungen und Clusterkomponenten und ist der einzige zustandsabhängige Teil der Steuerebene. Er basiert auf der verteilten Datenbank etcd, (In Kubernetes verwaltet etcd die Konfigurationsdaten, Statusdaten und Metadaten) und die meisten Kubernetes-Cluster führen eine etcd-Replik auf jedem Knoten der Steuerebene für HA aus. Große Cluster, die eine hohe Änderungsrate aufweisen, können jedoch einen separaten etcd-Cluster betreiben, um die Leistung zu verbessern. Zu beachten ist dass ein hochverfügbarer Clusterspeicher kein Ersatz für Backup und Wiederherstellung ist. Man benötigt nach wie vor geeignete Möglichkeiten zur Wiederherstellung des Clusterspeichers, wenn etwas schief läuft. Was die Verfügbarkeit betrifft, so bevorzugt etcd eine ungerade Anzahl von Replikaten, um Split-Brain-Zustände zu vermeiden. Dies ist der Fall, wenn bei den Replikaten Kommunikationsprobleme auftritt und man nicht sicher sein können, ob diese ein Quorum (eine Mehrheit) haben.
  4.3.4. Kubernetes - Controllers
Kubernetes verwendet Controller, um einen Großteil der Cluster-Intelligenz zu implementieren. Sie laufen alle auf der Steuerebene, und einige der gängigsten sind:
Der Deployment-Controller
Der StatefulSet-Controller
Der ReplicaSet-Controller
Es gibt noch weitere Controller, sie alle laufen jedoch als Überwachungsschleifen im Hintergrund und gleichen den beobachteten Zustand mit dem gewünschten Zustand ab. Die Controller stellen sicher, dass der Cluster das ausführt, was von ihm verlangt wird. Wennbeispielsweise drei Replikate einer Anwendung anfgeordert, sorgt ein Controller dafür, dass drei gesunde Replikate ausgeführt werden, und ergreift geeignete Maßnahmen, wenn dies nicht der Fall ist. Kubernetes verfügt auch über einen Controller-Manager, der für das Erzeugen und Verwalten der einzelnen Controller zuständig ist.
4.3.4.1 Kubernetes - Cloud Controller Manager
Diese Komponente ähnelt in ihrer Funktion dem Controller-Manager-Link. Diese stellt eine Verbindung zur API eines Cloud-Anbieters her und trennt die Komponenten, die mit dieser Cloud-Plattform interagieren, von denen, die nur innerhalb des Clusters interagieren. 
4.3.5. Kubernetes - Scheduler
Der Scheduler überwacht den API-Server auf neue Arbeitsaufgaben und weist diese dem gesunden Arbeitsknoten zu. Er implementiert den folgenden Prozess: Überwachung des API-Servers auf neue Aufgaben Identifizierung fähiger Knoten Zuweisung von Aufgaben an Knoten Die Identifizierung fähiger Knoten umfasst Prädikatsprüfungen, Filterung und einen Ranking-Algorithmus. Geprüft werden Taints (also eine Kennzeichnung), Affinitäts- und Anti-Affinitätsregeln, die Verfügbarkeit von Netzwerkports sowie die verfügbare CPU und der verfügbare Speicher. Knoten, die nicht in der Lage sind, die Aufgaben auszuführen, werden ignoriert, und die verbleibenden werden anhand von Faktoren wie der Tatsache, ob sie bereits über das erforderliche Image verfügen, der Menge an verfügbarem CPU- und Arbeitsspeicher und der Anzahl der derzeit ausgeführten Aufgaben eingestuft. Jeder Knoten ist Punkte wert, und die Knoten mit den meisten Punkten werden für die Ausführung der Aufgaben ausgewählt. Der Scheduler markiert Aufgaben als ausstehend, wenn er keinen geeigneten Knoten finden kann.
 Datei:22Kubernetes control.jpg [28]
4.3.6. Kubernetes - Worker Node
Worker-Knoten dienen der Ausführung von Benutzeranwendungen und Worker Nodes sind für die Bereitstellung, Ausführung und Verwaltung von containerisierten Anwendungen zuständig:
Komponenten sind:
Kubelet: Kubelet ist ein Software-Agent, der Aufträge vom Master-Knoten empfängt und ausführt und dazu beiträgt, dass Container in einem Pod laufen. 
Kube-Proxy: Der Kube-Proxy wird auf jedem Knoten eines Clusters installiert und verwaltet die Netzwerkregeln auf dem Host und überwacht Änderungen an Diensten und Pods. 
Runtime Jeder Arbeitsknoten hat eine oder mehrere runtime für die Ausführung von Aufgaben.

 23Kubernetes worker.jpg  [28]

Das Kubelet ist der wichtigste Kubernetes-Agent und übernimmt die gesamte Kommunikation mit dem Cluster. Es führt die folgenden Hauptaufgaben aus: Überwacht den API-Server auf neue Aufgaben Weist die entsprechende Laufzeit an, Aufgaben auszuführen Meldet den Status von Aufgaben an den API-Server Wenn eine Aufgabe nicht ausgeführt werden kann, meldet das Kubelet das Problem an den API-Server und überlässt der Steuerungsebene die Entscheidung, welche Maßnahmen zu ergreifen sind. Auf jedem Worker Node läuft ein Kube-Proxy-Dienst, der die Vernetzung des Clusters implementiert und den Datenverkehr zu den auf dem Knoten laufenden Aufgaben ausgleicht. Die meisten neuen Kubernetes-Cluster installieren die Containerd-Runtime(Laufzeitumgebung) und verwenden diese zur Ausführung von Aufgaben. Diese Aufgaben umfassen:
Abrufen von Container-Images
Verwalten von Lebenszyklusoperationen(Starten und Stoppen von Containern)
Auf jedem Arbeitsknoten läuft ein Kube-Proxy-Dienst, der die Vernetzung des Clusters implementiert und den Datenverkehr zu den auf dem Knoten laufenden Aufgaben ausgleicht.

=

4.3.7. Kubernetes - Applikationen ===

Kubernetes führt Container und VMs, aus. Allerdings müssen die alle in Pods verpackt werden, Sobald die in einem Pod verpackt sind, übergeben diese die Anwendung an Kubernetes, und Kubernetes führt sie aus. Dazu gehört auch die komplexe Logistik der Auswahl geeigneter Knoten, das Verbinden von Netzwerken, das Anhängen von Volumes und vieles mehr. Man kann sogar Anwendungen abfragen und Änderungen vornehmen. Das Vorgehensmodell ist an sich trivial
1.eine Anwendung in einer bevorzugten Sprache schreiben
2."containerisieren"
3. bergebenan eine Registry
4. verpacken in einen Pod (meist ein Controller-Objekt wie z. B. ein Deployment)
5. an Kubernetes übergeben
4.3.8. Kubernetes - Config Maps

Um einen Container in unterschiedlichen Umgebungen deployenstellt Kobernetes ein Tool(ConfigMap)  zur Verfügung. Mithilfe der ConfigMap werden die Konfigurationen der Anwendungen mit Kubernetes umgesetzt und dadurch entkoppeln man die Konfiguration und das Container-Image. Eine ConfigMap ist ein Kubernetes-API-Objekt, das einfach eine Liste von Schlüssel/Wert-Paaren enthält. Die Werte können von kurzen Zeichenfolgen bis zu großen Blöcken strukturierten Textes reichen, die Sie normalerweise in einer Anwendungskonfigurationsdatei finden. Pods können auf einen oder mehrere dieser Schlüssel/Wert-Einträge in der ConfigMap verweisen. Ein Pod kann auf mehrere ConfigMaps verweisen, und mehrere Pods können dieselbe ConfigMap verwenden.[35]
Unabhängig davon, wie eine Anwendung Konfigurationszuordnungen verwendet, kann man die Konfiguration durch Speichern der Konfiguration in einem separaten Objekt statt im Pod für verschiedene Umgebungen getrennt halten.
 29configmap.jpg   Konfigurationszuordnung zum Entkoppeln der Konfiguration vom Pod

=

4.3.9. Kubernetes - Pod ===

Der Kubernetes Pod ist die kleinste Einheit für die Planung ist in der VMware-Welt die virtuelle Maschine (VM). In der Docker-Welt ist es der Container. In Kubernetes ist es der Pod. Ja, Kubernetes führt Container, VMs, Wasm-Anwendungen und mehr aus. Aber sie alle müssen in Pods verpackt werden. Pods und Container In den einfachsten Konfigurationen wird ein einzelner Container pro Pod ausgeführt, weshalb wir die Begriffe Pod und Container manchmal synonym verwenden. Es gibt jedoch leistungsstarke Anwendungsfälle für Pods mit mehreren Containern, darunter: Service Meshes Hilfsdienste, die App-Umgebungen initialisieren Apps mit eng gekoppelten Hilfsfunktionen
Die Vorteile eines einzelnen Containers pro Pod sind[35]:
-- flexiblere Deployments
-- granularere Skalierung
-- größere Entkopplung

Die Vorteile von mehreren Containern pro Pod sind:
- eine schnelle Kommunikation zwischen Containern
- eine bessere Trennung der Aufgaben
- eine Weiterentwicklung der einzelnen Container unabhängig voneinander
 
Pods können einem Hauptanwendungscontainer und ggf. einen Sidecar haben. Sidecar **) ist ein Jargon für einen Hilfscontainer, der im selben Pod wie der Hauptanwendungscontainer läuft und diesem Dienste zur Verfügung stellt. Alle Container in einem Pod werden immer auf demselben Knoten geplant. Dies liegt daran, dass Pods eine gemeinsam genutzte Ausführungsumgebung sind und Speicher, Netzwerke und Volumes nicht ohne Weiteres auf verschiedene Knoten aufgeteilt werden können. Das bedeutet, dass Kubernetes einen Pod immer nur dann als ausgeführt markiert, wenn alle seine Container gestartet sind. Wenn ein Pod beispielsweise aus zwei Containern besteht und nur einer gestartet ist, ist der Pod nicht bereit.

**)  wird oft für Monitoring und/oder Logging verwendet


 30pod.jpg   Pod - Aufbau [35]

Dieser Pod verfügt über zwei Container sowie 2 Volumes und einen Pause.

4.3.9.1 Pod - Ablauf

Der Pod startet zuerst den Pause-Container und initialisiert die IP sowie den Namespace und die cgroups und hält diese, bis der Pod terminiert wird. Jeder weitere Container innerhalb des Pods kann sich auf die initialisierten Ressourcen verlassen und den über die IP eingehenden Traffic erhalten.
Der Vorteil des Pause Container ist, dass selbst wenn die Anwendungscontainer neu gestartet werdendie Ip weiterhin bestehen bleibt. Der Pause-Container bleibt hidden und wird am CLI nicht angezeigt. Dieser läuft jedoch auf dem Node, und  ist aber  über die Container Runtime zu sehen. Auch die Volumes können von beiden Containern verwendet werden. Sie greifen ggf. gleichzeitig darauf zu  um z.B. einen Datenaustausch vorzunehmen. Davei ist es wichtigm dass es zu keinen Konflikten kommt, denn diese werden von Kubernetes nicht verhindert oder überwacht.TIPPzur Implementierung : ein Container für r/w und er Andere ist read-only. Da Kubernetes nur das Pod-Objekt managt, werden natürlich alle Container innerhalb eines Pods auf dem gleichen Node gestartet. Nur so können die Container innerhalb eines Pods auch die Ressourcen wie Netzwerk und Storage miteinander teilen.

4.3.10 Kubernetes Deployment

Wenn Kubernetes mit Pods arbeitet, werden  diese fast immer über übergeordnete Controller wie Deployments, StatefulSets(für die Verwaltung von zustandsbehafteten Anwendungen)   und DaemonSets(um einen Pod auf jedem Node im Cluster auszuführen). bereitgestellt. Diese laufen alle auf der Steuerungsebene und arbeiten als Hintergrundüberwachungsschleifen, die den beobachteten Zustand mit dem gewünschten Zustand abgleichen. Deployments fügen zustandslosen Anwendungen Selbstheilung, Skalierung, rollende Updates und versionierte Rollbacks hinzu. Das Deployment ist dabei das oberste Objekt, verwaltet ein ReplicaSet und beauftragt das ReplicaSet damit, die Pods zu verwalten und zu überwachen.

Das Deployment: [35]
- verwaltet den Lebenszyklus von Pods und ReplicaSets.

      - ReplicaSets erstellen, überwachen und aufräumen.

- eine neue Version von Pods ausrollen, indem es ein neues ReplicaSet erzeugt.

- ermöglicht kontrollierte Aktualisierungen durch Rolling Updates.
- ermöglicht Rollbacks zu früheren Versionen.


Das ReplicaSet **)
- stellt sicher, dass die spezifizierte Anzahl von Pods läuft.
- überwacht die Pods und tauscht fehlerhafte aus.
Beide Objekte kontrollieren immer den aktuellen Zustand im Hinblick auf den gewünschten Zustand. Ist etwas nicht so wie gewünscht, dann versuchen die Objekte, den Zustand wiederherzustellen.

**) ist ein Schlüsselobjekt für die Stabilität

 31deploy.jpg  Deployment & ReplicaSet  [35]

Ein ReplicaSet gewährleistet, dass immer eine bestimmte Anzahl von Pods im Containerslaufen.

Anmerkung: Kubernetes empfiehlt, das ReplicaSet nie ohne Deployment zu verwenden, da die zusätzlichen Funktionen das Betreiben einer Anwendung wesentlich vereinfacht.[36]

5 Anwendungsbeispiel

Die Hardwareanforderungen eines »echten« Kubernetes-Clusters bemessen sich natürlich an der Anzahl der Container, jedoch kann dies z.B. mit Einplatinencomputer, wie dem z.B. Raspberry Pi, Zum Testen realisiert werden. Dazu reichen  zwei Stück Raspberry Pi 4, 4 GB Memory.

Eine Anleitung  hinsichtlich Ubuntu und Raspberry Pi  liefert z.B. dieser Link -->   https://ubuntu.com/tutorials/how-to-kubernetes-cluster-on-raspberry-pi#1-overview

Eine leichtgewichtige Kubernetes Variante  liefert dieser Link -->  https://docs.k3s.io/       Der setzt aber wesentlich mehr an Vorwissen voraus





1. Allgemein

HTTP ermöglicht es, Ressourcen als zwischenspeicherbar zu deklarieren. Diese gelten für eine statisch zugewiesene Lebensdauer, die als Time-to-Live (TTL) bezeichnet wird, als frisch. Jeder Cache in der Anfrage/Antwort-Kette zwischen Client und Server wird ein zwischengespeichertes Objekt bereitstellen, ohne den
Ursprungsserver zu kontaktieren. Die Update-Strategie des HTTP-Caching-Modells ist rein explorationsbasiert,also ein ablaufbasierendes Modell: Sobald eine TTL ausgeliefert wurde, kann die betreffende Ressource nicht invalidiert werden, bevor die TTL abgelaufen
(expired) ist.[13] Je näher ein Web-Cache anm Netzwerk-Edge-Knoten ist, desto mehr verringert sich die Netzwerklatenz.

In mobilen Netzwerken ist die Auswirkung der HTTP-Anfragenlatenz noch gravierender. Zusätzliche Latenz wird durch die mobile Netzwerkinfrastruktur verursacht .Mit den älteren Mobilfunkstandards 2G und 3G sind Latenzen zwischen 100 ms (HSPA) und 750 ms (GPRS) üblich.

Anmerkung: 2G/3G wird von den Mobilfunkbetreibern in Österreich noch immer als Backup verwendet !

2. Caching-Strategien 

Mehrere Faktoren veranlassen dem z.B. Administrator, einen Cache zum System hinzuzufügen. Häufig beginnt dies mit einer Beobachtung der Latenz oder Effizienz ( dies kann z.B. mittels eines Network Analyzer erfolgen) einer Abhängigkeit bei einer bestimmten Anforderungsrate. Dies kann beispielsweise der Fall sein, wenn festgestellt wird , dass eine Abhängigkeit möglicherweise gedrosselt wird oder auf andere Weise nicht in der Lage ist, mit der erwarteten Last Schritt zu halten.

2.1. Arten von Caches

Einige der schwierigsten Details zur Cache-Implementierung sind die Auswahl der richtigen Cache-Größe, Ablaufrichtlinie und Bereinigungsrichtlinie. Die Bereinigungsrichtlinie bestimmt, wie lange ein Element im Cache aufbewahrt werden soll. Die gängigste Richtlinie verwendet einen absoluten zeitbasierten Ablauf (d. h. sie ordnet jedem Objekt beim Laden eine TTL (Time to Live) zu). Die TTL wird basierend auf den Clientanforderungen ausgewählt, z. B. wie tolerant der Client gegenüber veralteten Daten ist und wie statisch die Daten sind, da sich langsam ändernde Daten aggressiver zwischengespeichert werden können. Die ideale Cachegröße basiert auf einem Modell des erwarteten Anforderungsvolumens und der Verteilung der zwischengespeicherten Objekte auf diese Anforderungen. Daraus schätzen wir eine Cachegröße, die bei diesen Verkehrsmustern eine hohe Cachetrefferquote gewährleistet. Die Bereinigungsrichtlinie steuert, wie Elemente aus dem Cache entfernt werden, wenn die Kapazität erreicht ist. Die am häufigsten angewendete Bereinigungsrichtlinie ist LRU (Least Recently Used).

Dabei werden verschiedene Arten von Caches unterschieden. Das hängt von Ihrer Position im Netzwerk ab:


Client-Cache. Ein Cache kann direkt in die Anwendung als Teil des Browsers, der mobilen App oder einer HTTP-Bibliothek eingebettet sein. Client-Caches haben die geringste Latenz, werden jedoch nicht zwischen Clients geteilt und sind eher begrenzt in der Größe.

Forward-Proxy-Cache. Forward-Proxy-Caches werden in Netzwerken als gemeinsame Web-Caches für alle Clients in diesem Netzwerk platziert. Da die sehr nahe an der Anwendung sind, erreichen sie eine erhebliche Verringerung der Netzwerklatenz. Forward-Proxy-Caches können entweder als explizite Proxies konfiguriert werden, indem den Clients Konfigurationsinformationen über Protokolle wie PAC und WPAD bereitgestellt werden oder indem ausgehende, unverschlüsselte TCP-Verbindungen transparent abgefangen werden.

Web-Proxy-Cache. Internetdienstanbieter (Internet Service Providers, ISPs) setzen Web-Proxy-Caches in ihren Netzwerken ein. Neben der Beschleunigung des HTTP-Verkehrs für Endbenutzer reduziert dies auch die Transitgebühren an Internet-Austauschpunkten. Wie Client- und Forward-Proxy-Caches basieren
Web-Proxy-Caches rein auf Expirationen.

Content-Delivery-Network (CDN)-Cache. CDNs bieten ein verteiltes Netzwerk von Web-Caches, das vom Backend gesteuert werden kann. CDN-Caches  sind darauf ausgelegt, skalierbar und multi-tenant zu sein und können massive Mengen an zwischengespeicherten Daten speichern. Wie Reverse-Proxy-
Caches und Server-Caches basieren CDN-Caches in der Regel auf Ungültigkeitsdaten.

Die in einem Cache gespeicherten Daten können je nach Art und Zweck des Cachings Dateien oder Dateifragmente (z. B. HTML-Dateien, Skripts, Bilder, Dokumente usw.), Datenbankvorgänge oder -datensätze, API-Aufrufe, DNS-Datensätze usw. umfassen. Ein Cache kann in Form von Hardware oder Software vorliegen.

= 3. Komprimierung von Ressourcen und Minimierung von HTTP-Anfragen =

Die Minimierung von HTTP-Anfragen ist entscheidend für die Verbesserung der Leistung und die Verkürzung der Seitenladezeiten. Jeder HTTP-Request verursacht zusätzlichen Aufwand und erhöht die Loadtime einer Webseite. Nachstehend einige Möglichkeiten mit welchem HTTP-Requests reduziert werden können:
Eine gute Strategie ist, Dateien zusammen zu fassen. Im Klartext heißt dies mehrere z.B. CSS-Dateien zu einer Datei kombinieren. Der Vorteil besteht darin, dass die Anzahl der Anfragen, die zum Abrufen von Ressourcen erforderlich sind reduziert wird. dies gelingt. falls z.B. CSS-Sprites verwendet werden um , um mehrere Bilder zu einem einzigen Bild zu kreiren um so die Anfragen zu reduzieren.
Auch das reduzieren von Characters in den Dateien bringt Erfolge, d.h. z.B. CSS-, JavaScript- und HTML-Dateien, um unnötige Zeichen, Kommentare und Leerzeichen zu evermindern, da kleinere Dateien werden schneller geladen werden. Dabei helfen Tools wie, CSS-Optimizer, ist ein recht typisches Online-Werkzeug zur Komprimierung. Es gibt aber viele Andere Tools die den Code automatisch minimieren.
Content Delivery Network (CDN), dienen dazu, um statische Assets wie Bilder, Skripts und Stylesheets global auf mehrere Server zu verteilen. Dies reduziert die Distanz zwischen User und Server und verbessert die Ladezeiten. Ein wichtiger Aspekt betrifft natürlich das Browser-Caching für statische Ressourcen. Sobald eine Ressource heruntergeladen wurde, wird sie lokal auf dem Gerät des Benutzers zwischengespeichert, wodurch die Notwendigkeit nachfolgender Requests reduziert wird. Des Weiteren, falls noch im Einsatz, ist es unerläßlich den Server auf HTTP/2 zu migriere. Daturch können mehrere Dateien parallel über einen einzigen Kanal angefordert werden können, und so mehrerer eAnforderungen reduziert. Auch Lazy Loading für Bilder und Videos sollte implementiert werden. Zunächst nur den Kontent laden, der für den Benutzer sichtbar ist, das Laden anderer Ressourcen erfolgt erst, wenn diese angezeigt werden sollen..
Wichtig ist auch die Verwendung von responsive Images, somit stellt man mehrere Größen für unterschiedliche Bildschirmauflösungen und Geräte bereit. Dadurch wird sichergestellt, dass die User nur die entsprechende Bildgröße herunterladen. Auch die Verwendung von Skripten und Widgets von Drittanbietern(Third-Party-Products), die zusätzliche HTTP-Anforderungen erfordern ist zu überdenken.  Nur das verwenden, was für die Funktionalität  der Web.Page unbedingt erforderlich ist.
Die Optimierung der Schriftarteni, Scriftgröße sind auch ein Mosaikstein,um Requests hinsichtlich der Fonts zu reduzieren, außerdem sollten nr websichere Schriftarten verwendet werden.
Vermeiden Sie Weiterleitungen: Auch unnötige Redirects sollten vermieden werden, denn jede Weiterleitung generiert einen zusätzlichen HTTP-Request. Auch die Priorisierung wichtiger Ressourcen sollten  im oberen Seitenbereich (CSS, JavaScript) definiert werden bzw. diese inline oder asynchron bereitstellen, damit eine  schnelle anfängliche Seitendarstellung zu ermöglichen. Auch die Verwendung von  GZIP für die Komprimierung auf dem Server, um textbasierte Ressourcen zu verkleinern, bevor diese an den Web-Browser gesandt werden, reduziert die Dateigröße bzw. beschleunigt Downloads und ist eine weitere Strategie um die Anzahl der HTTP-Anfragen derr Website erheblich zu reduzierenm was zu einer besseren Usability führt.

4. Optimierung von Ladezeiten und Responsiveness

Ein wichtiger Faktor jeder Website ist selbstverständlich der Content. Insbesondere für Suchm aschinen, aber auch für die User Experience, sind eine Reihe verschiedener technischer Optimierungsmaßnahmen relevant.Bei der Nutzung einer Website ist es ausschlaggebend, dass die Ladezeiten für die relevanten Inhalte gering sind. Die Performance-Optimierung hat mit der verwendeten Bandbreite zu tun. Die Vorteile liegen auf der Hand: Je weniger Daten zwischen Client
und Server ausgetauscht werden, desto

 - schneller sind die Daten übertragen,
 - weniger Bandbreitenkosten entstehen auf dem Server bzw. der Client/Server-Architektur
 - ggf. entstehen weniger monetäre Kosten (z.B. mobiler Datenzugriff im Ausland)

Beim Design einer Webseiteist es ausschlaggebend, dass die Ladezeiten für die relevanten Inhalte gering sind und auch responsive Webdesign gehört mittlerweile zu den Standards in der Gestaltung von Websites, ganz gleich ob bei der Umsetzung von Onlineshops, News-Blogs oder Unternehmensprofilen.== 4.1 Möglichkeiten ==

Folgende Punkte sollten beachtet werden, um eine Webseite zu optimieren[31]: Hosting: Beim Hosting ist auf die notwendige Bandbreite, um alle Nutzendenanfragen zu verarbeiten, zu achten. (Server im Inland bzw ein Content Delivery Network (CDN) für die Zielgruppe im Ausland)
HTML, CSS und JavaScript: Je mehr Code gelesen und umgewandelt werden muss, desto länger dauert das Laden Ihrer Website.Daher separate Dateien für CSS und JavaScript verwenden und den Code komprimieren. Entfernen von überflüssigen Code., wie z. B. Leerzeichen zwischen den Zeilen.
Images und externe Inhalte: Mit jedem hinzugefügten Bild oder Foto erhöht sich die Ladezeit der Website. Ggf. möglichst wenige Elemente von externen Seiten laden und Bilder mithilfe von Tools zu komprimieren. Auch SVG-Icons (skalierbare Vektorgrafiken) oder das effiziente Bildformat WebP **) wirken sich positiv auf die Ladezeit aus.
Caching: Den Browser der Besuchendennutzen ( Reverse-Proxy-Server oder Cache-Software wie memcached als Cache. **) Google entwickelte das WebP-Format EinerStudie der Aberdeen Group zur Folge, die leider nicht mehr Online ist,ergab ,dass eine Sekunde Verzögerung in der Ladezeit einer Seite: : 7% weniger Konversionen,
11% weniger Page Views
16% weniger Zufriedenheit entspricht.  Anmerkung: Die durchschnittliche Website-Ladezeit liegt auf Desktop-Geräten bei 2,5 Sekunden und auf Mobiltelefonen bei 8,6 Sekunden (s.www.statista.de) Jede Datei, die zum Rendern und Ausführen einer Webseite benötigt wird, z. B. HTML, CSS, JavaScript, Bilder und Schriftarten, erfordert eine separate HTTP-Anfrage. Je mehr Anfragen gestellt werden, desto länger dauert es, bis die Seite geladen ist. Performance Monitoring der Web-Seite bzw. eine regelmäßige Leistungsüberwachung sind wichtig um Probleme zu erkennen. Es gibt einige Tools, mit denen die Ressourcen der Website optimiert werden könnenwie z.B. die die kostenlose Google Search Console bzw. PageSpeed Insights idas Website Speed Test Tool oder GTmetrix die kostenloste alternative dazu. === 4.1.1.Performanceverlust vermeiden ===

Diese gilt es zu vermeiden, dabei helfen mitunter auch Kleinigkeiten.

URL:

Wenn eine URL ohne den abschließenden Schrägstrich aufgerufen wird , sucht der Webserver nach einer Datei mit diesem Namen. Wenn es keine Datei mit diesem Namen findet, wird es wie ein Verzeichnis behandelt und die Standarddatei in diesem Verzeichnis gesucht. Mit anderen Worten: Wenn man den abschließenden Schrägstrich weglässtn, zwingt man den Server, eine unnötige Umleitung vorzunehmen. Auch wenn es sofort zu sein scheint, dauert es etwas länger, und wie wir bereits festgestellt haben, zählt jedes bisschen. 

Daher die URLs so anzeigen : https://shop.at/ (mit Schrägstrich)

Fehlende Komprimierung:

Je mehr die Dateigröße ohne Qualitätseinbußen reduziert werden kann, desto besser ist die Leistung derWebsite . Eines  stabilstes und zuverlässiges Komprimierungsframeworks ist z.B.Gzip oder Brotli, aber auch andere Methoden können die Dateigröße reduzieren.

404-Fehler:

Diese gilt es zu vermeiden, falls auf eine Seite zugegriffen wird, die e gelöscht oder verschoben wurde

HTTP-Anfragen:

JavaScript- und CSS-Dateien gehören zu den größten Dateien auf einer Website. Sie zählen auch als einzelne HTTP-Anfragen. Fünf JS-Dateien und fünf CSS-Dateien würden also insgesamt 10 HTTP-Anfragen erfordern. 

Website-Builder:

ISind Tools, um schnell eine Website zu erstellen und anzupassen, jedoch kann es zu komplexen Problemen und langsamen Ladezeiten führen helfen. 

Unnötiger Code:

Wie schon weiter oben angesprochen den Code um:

*Leerzeichen, Zeilenumbrüche, Kommentare und zusätzliche Semikolons *unbenutzte Funktionen und Variablen *Langschrift-CSS-Selektoren, die auch in Kurzschrift vorliegen könntem

 erleichtern.

DNS-Speed

Je länger Ider Domain Name Server (DNS) braucht, um zu antworten, desto länger ist die Zeit bis zum ersten Byte (TTFB) und desto langsamer lädt die Website.

Asynchrones laden

Die Dateien und Funktionen aufder Website werden standardmäßig synchron geladen, das bedeutet, dass diese in der Reihenfolge geladen werden, wie sie auf der Seite erscheinen werden. Das hat zur Folge, dass Elemente dann erst geladen werden, wenn das unmittelbar vorherige Skript oder der Dienst vollständig geladen wurde und dies die Ladezeiten für die Webpage verlängert.

Font/Schriftart

Websichere Font verkürzen die Ladezeiten und verbessern den Pagespeed einer Webseite.

Expires-Header 

Diese ermöglichen dem Browser, aktuelle Ressourcen aus dem Cache bereitzustellen, das die Serverlast und die Ladezeit reduziert und diese verhindern, dass der Browser einem Visitor veraltete Ressourcen bereitstellt., was die Benutzererfahrung beeinträchtigen könnte. 

Plugin 

Diese können leistungsmindernd sein. Plugin, auch Add-on oder Extensions genannt,  bieten zwar nützliche Funktionen zur Verwaltung der Website an, können sich aber auch negativ auf die Performance auswirken, insbesondere wenn sie zum Laden einer großen Menge an Assets oder zum Ausführen großer Datenbankabfragen verwendet werden. 

Optimieren von Bildern

JPG eignet sich hervorragend für fotografische Bilder, während GIF oder PNG am besten für Bilder mit großen einfarbigen Flächen geeignet sind. 8-Bit-PNG-Dateien sind für Bilder ohne Alphakanal (transparenter Hintergrund) und 24-Bit-PNG-Dateien sind für Bilder mit Alphakanal. Anmerkung: Wenn ein Bild auf der Website mit einer Breite von 800 Pixeln angezeigt wird, hat die Verwendung eines 1600 Pixel breiten Bildes keinen Vorteil.

Optimieren von Videos

MP4 ist in den meisten Fällen am besten geeignet, da es die kleinste Dateigröße hat. Die optimale Größe auf der Grundlage der Bildschirmgröße für den Webseitenbesucher bereitstellen. Eliminieren der Audiospur, wenn ein Hintergrundvideo als Gestaltungselement verwendet wird und die Länge des Videos reduzieren ist vorteilhaft.

CMS

 Ein CMS (Content Management System) kann die Geschwindigkeit einer Website beeinflussen. Für ein CMS wie WordPress oder Moodle ist es wichtig, einen Server mit ausreichenden Ressourcen zu verwenden, der für das CMS richtig konfiguriert wurde.

Lazy Loading

Bei der Verwendung von Lazy Loading werden Bilder nur dann geladen, wenn sie auch benötigt werden, z. B. wenn der User auf der Seite nach unten scrollt.

DOM(Document Object Model)

Beim DOM geht es darum, wie die Browser HTML in Objekte umwandeln. Es gibt eine bestimmte Struktur, die aus mehreren Knoten besteht. Jeder Knoten stellt ein Objekt dar. Je größer diese Struktur( daher klein halten und ggf.auf Spielereien verzichten) ist, desto größer ist das DOM und desto länger dauert es, bis eine Seite geladen ist. 

     25DOM.jpg   [34]

4.1.1.1 CSS  Kurzschrift- und Langschrift Selektoren

In CSS gibt es sogenannte Kurz- und Langschreibeigenschaften. Kurzschreibeigenschaften sind, wie der Name schon sagt, Kurzversionen für einen Satz von Langschreibeigenschaften. Die gebräuchlichsten sind wahrscheinlich paddingund margin. Anstatt jede Richtungsauffüllung separat festzulegen

Anstatt lang,

.class {
  padding-top: 1px;
  padding-right: 12px;
  padding-bottom: 3px;
  padding-left: 4px;
}
nun die kurze Version damit  alle Werte mit einer einzigen Eigenschaft vorhanden sind

.class {
  padding: 1px 2px 3px 4px;
}

4.1.1.2 Validatoren

Die Trennung von Inhalt und Design ist die Basis für einen guten Quellcode. Werden dazu noch die Webstandards eingehalten, ist man auf einem guten Weg. Webstandards sind technische Spezifikationen, die von Organisationen wie dem W3C (World Wide Web Consortium, w3.org) entwickelt werden. 

Um Quellcode in Bezug auf die Webstandards zu überprüfen, gibt es vom W3C die Validatoren. Diese melden bei falschem Code Fehler oder auch Warnungen.
HTML Markup Validation Service: validator.w3.org
CSS Validation Service:         jigsaw.w3.org/css-validator

  4.2 Caching-Tools

Nachstehend zwei Caching-Tolls aus dem Open-Source Bereich.

Apache Ignite ist s ein kostenloses und quelloffenes, horizontal skalierbares verteiltes In-Memory-Schlüsselwertspeicher-, Cache- und Multimodell-Datenbanksystem, das leistungsstarke Verarbeitungs-APIs für die Berechnung verteilter Daten bietet. Es ist auch ein In-Memory-Datenraster, das entweder im Speicher oder mit nativer Ignite-Persistenz verwendet werden kann. Es läuft auf UNIX-ähnlichen Systemen wie Linux und auch auf Windows . Es bietet mehrstufigen Speicher, vollständige SQL-Unterstützung und ACID- Transaktionen (Atomicity, Consistency, Isolation, Durability) (nur auf Schlüsselwert-API-Ebene unterstützt) über mehrere Clusterknoten hinweg, gemeinsam genutzte Verarbeitung und maschinelles Lernen. Es unterstützt die automatische Integration mit beliebigen Datenbanken von Drittanbietern, einschließlich aller RDBMS (wie MySQL, PostgreSQL, Oracle Database usw.) oder NoSQL-Speicher. Ignite unterstützt auch die Sicherheit, indem es die Authentifizierung auf dem Server aktivieret  und den Clients Benutzeranmeldeinformationen bereitstellen können. Es gibt auch Unterstützung für SSL-Socket-Kommunikation, um eine sichere Verbindung zwischen allen Ignite-Knoten bereitzustellen.[32]

Memcached ist ein kostenloses und quelloffenes, einfaches, aber leistungsstarkes, verteiltes Speicherobjekt-Caching-System. Es ist ein In-Memory-Schlüsselwertspeicher für kleine Datenmengen wie Ergebnisse von Datenbankaufrufen, API-Aufrufen oder Seitendarstellungen. Es läuft auf Unix-ähnlichen Betriebssystemen wie Linux und OS X sowie auf Microsoft Windows. Als Entwicklertool ist es dazu gedacht, die Geschwindigkeit dynamischer Webanwendungen zu steigern, indem es Inhalte zwischenspeichert (standardmäßig ein Least Recently Used ( LRU )-Cache) und so die Datenbanklast auf der Festplatte reduziert: Damit fungiert es als Kurzzeitspeicher für Anwendungen. Es bietet eine API für die gängigsten Programmiersprachen an. Memcached unterstützt als einzigen Datentyp Zeichenfolgen. Es verfügt über eine Client-Server-Architektur, bei der die Hälfte der Logik auf der Client- und die andere Hälfte auf der Serverseite stattfindet. Wichtig ist, dass Clients wissen, wie ein Element ausgewählet, auf welchen Server geschrieben oder von welchem gelesen wird. Außerdem weiß der Client sehr genau, was zu tun ist, wenn er keine Verbindung zu einem Server herstellen kann. Obwohl es sich um ein verteiltes Caching-System handelt und somit Clustering unterstützt, sind die Memcached-Server voneinander getrennt (d. h. sie wissen nichts voneinander). Das bedeutet, dass es keine Replikationsunterstützung wie z.B. im Caching-Tool Redis gibt.


= 1. Allgemein =

Damit z.B. ein Webserver und somit der Webauftritt den bestmöglichen Ausfallsicherheit und Scutz hat, ist es von Vorteil sämtliche Dienste und Anwendungen in einem Cluster auf mehreren Servern redundant bereitzustellen. Sollte es zu einem Ausfall kommen, wird dieser automatisch vom System erkannt und innerhalb von Sekunden behoben. Gleichzeitig werden die Dienste automatisch von einem anderen Server im Cluster übernommen. Um dies zu bewerkstelligen wird auch auf Web-Hoster, also externe bzw. sogar verteilte Systeme zurückgegriffen. Bezogen auf gesamte IT-Infrastrukturen bedeutet dies, dass sowohl Netzwerkdienste als auch Ressourcen( Server, Software) für die Nutzenden praktisch jederzeit erreichbar und uneingeschränkt nutzbar sind. Dies gilt unabhängig von geplanten Wartungsarbeiten und möglichen Störungen.

Die Definintion von Hochverfügbarkeit seitens der IEEE **) lautet : “High Availability (HA for short) refers to the availability of resources in a computer system, in the wake of component failures in the system.”  

**) Institute of Electrical and Electronics Engineers

1.1. Definition Hochverfügbarkeit

Hochverfügbarkeit (High Availability, kurz HA) bezieht sich auf die Verfügbarkeit von Ressourcen in einem Computersystem nach dem Ausfall von Komponenten im System. Dies kann auf unterschiedliche Weise erreicht werden, wobei das gesamte Spektrum von Lösungen, die kundenspezifische und redundante Hardware verwenden, um die Verfügbarkeit zu gewährleisten, bis hin zu Lösungen reicht, die Softwarelösungen unter Verwendung von Standard-Hardwarekomponenten anbieten. Die erstgenannten Lösungen bieten ein höheres Maß an Verfügbarkeit, sind aber deutlich teurer als die letztgenannten. Dies hat dazu geführt, dass die letztere Klasse immer beliebter wird, da fast alle Hersteller von Computersystemen verschiedene HA-Produkte anbieten. In der Regel überleben diese Produkte einzelne Fehlerpunkte im System,
1.1.1 Abgrenzung
Nachstehend eine Auflistung und Kurzbestreibung verwandter Terminologien aus sicht der IEEE [15]
Kontinuierliche Verfügbarkeit:

Dies bedeutet, dass der Dienst ohne Unterbrechung und ohne zeitliche Unterbrechung zur Verfügung steht. Dies stellt einen idealen Zustand dar und wird im Allgemeinen verwendet, um ein hohes Verfügbarkeitsniveau zu bezeichnen, bei dem nur eine sehr geringe Menge an Ausfallzeiten zulässig ist. Hochverfügbarkeit bedeutet nicht ständige Erreichbarkeit.

Fehlertoleranz:

Dies ist ein Mittel, um ein sehr hohes Maß an Verfügbarkeit zu erreichen. Ein fehlertolerantes System ist in der Lage, den Betrieb trotz eines Hardware- oder Softwarefehlers fortzusetzen, und zeichnet sich durch Redundanz in der Hardware aus, einschließlich CPU, Speicher und I/0-Subsysteme. Hohe Verfügbarkeit ist nicht gleichbedeutend mit Fehlertoleranz.

Single Point of Failure (SPOF):

Eine Hardware- oder Softwarekomponente, deren Ausfall den Verlust des Dienstes zur Folge hat; solche Komponenten sind nicht durch redundante Komponenten abgesichert.
Ausfallsicherung (fail over):
Wenn eine Komponente in einem HA-System ausfällt und dies zu einem Dienstverlust führt, wird der Dienst durch das HA-System auf einer anderen Komponente im System gestartet. Diese Übertragung eines Dienstes nach einem Ausfall im System wird als Failover bezeichnet.


1.1.2 Ungeplante Betriebsunterbrechungen

Ungeplante Betriebsunterbrecungen  können nach folgenden Ursachen klassifiziert werden:
a) Benutzerfehler: Sind wahrscheinlich die häufigste Ursache ungeplanter Betriebsunterbrechungen. Vorgehensweisen werden nicht ordnungsgemäß eingehalten, Warnungen werden missachtet, möglicherweise fehlt es an der richtigen Ausbildung, oder es gibt ganz einfach Kommunikationsprobleme
    und Missverständnisse zwischen Benutzergruppen. Dies alles kann zu ungeplanten Betriebsunterbrechungen führen, die Auswirkungen auf den Geschäftsbetrieb haben.
b) Softwareprobleme: Komplexe Anwendungs-, Betriebssystem-, Middleware- oder Datenbankabläufe können zu ungeplanten Betriebsunterbrechungen führen. Jeder Geschäftsbetrieb ist anders strukturiert, und Interaktionsprobleme zwischen verschiedenen Softwarekomponenten können Probleme
    verursachen.
c) Hardwarefehler:Mechanische Einheiten fallen irgendwann aus. Elektrische Bauteile sind Umgebungseinflüssen wie Hitze, Feuchtigkeit und elektrostatischer Entladung ausgesetzt, was zum vorzeitigen Ausfall führen kann. Kabel können beschädigt und Verbindungen getrennt werden.
d) Umgebungsbedingte Einflüsse: Stromausfälle, Netzausfälle und Klimatisierung können dazu führen, dass ein einzelnes System ausfällt. Es können redundante Messungen durchgeführt werden, um einige dieser Einflüsse zu 
    verringern, aber die Möglichkeiten sind begrenzt.
1.2 Berechnungen

Als Verfügbarkeit wird jenee Wahrscheinlichkeit bezeichnet, wo das System bzw, die geramte IT-Infrastruktur  innerhalb eines spezifizierten Zeitraums (hoch)verfügbar ist. Als Verfügbarkeit gilt das Verhältnis aus ungeplanten/fehlerbedingter Ausfallzeit und gesamter Produktionszeit eines Systems

Als Berechnung dafür kann folgende Formel heran gezogen werden:

                   

        Verfügbarkeit.jpg  [99]

Ein IT-System oder eine System-Komponente gilt ab 99,9 %  bzw. nach AEC-2 als „hochverfügbar“ (siehe Pkt. 1.2.1).

1.2.1 Klassifikation

Die HRG, also die Harvard research Grout  teilt Hochverfügbarkeit in ihrer Availability Environment Classification (AEC) 0-5 in 6 Klassen [14] ein:

HRG-Klasse Bezeichnung Erklärung
AEC-0 Conventional Funktion kann unterbrochen werden, Datenintegrität ist nicht essentiell.
AEC-1 Highly Reliable Funktion kann unterbrochen werden, Datenintegrität muss jedoch gewährleistet sein.
AEC-2 High Availability Funktion darf nur innerhalb festgelegter Zeiten oder zur Hauptbetriebszeit minimal unterbrochen werden.
AEC-3 Fault Resilient Funktion muss innerhalb festgelegter Zeiten oder während der Hauptbetriebszeit ununterbrochen aufrechterhalten werden.
AEC-4 Fault Tolerant Funktion muss ununterbrochen aufrechterhalten werden, 24*7-Betrieb (24 Stunden, 7 Tage die Woche) muss gewährleistet sein.
AEC-5 Disaster Tolerant Funktion muss unter allen Umständen verfügbar sein.

In der Praxis werden SLA 's, also die Vereinbarung, zwischen einem Dienstleistungsunternehmen und einem Kunden getroffen, in der alle zu erbringenden Dienstleistungen sowie die Kunden- und Kommunikationserwartungen und Erfolgskennzahlen, also die Verfügbarkeit in % festgelegt sind.

1.3 Skalierung versus Verfügbarkeit

=== 1.3.1 Vertikale Skalierung ===

Das bedeutet man vergrößert z.B. die Rechenleistung bzw. fügt Ressourcen hinzu, ohne die Verfügbarkeit oder Betriebszeit zu erhöhen.  Angenommen, es mögen mehr Benutzer, mehr Datenverkehr und mehr Last für die Webanwendung zur Verfügung gestellt werden. D.h. es könnten auch alle Daten von einem einzelnen kleinen Server auf einen größeren Server mit mehr Arbeitsspeicher, mehr CPUs und schnellerem Speicherplatz kopiert werden.  Hinsichtlich virtueller Server diesen anhalten, ihm mehr Ressourcen zuweisen und ihn wieder starten.  Läuft der Server in der Cloud einfach den Instance-Typ zu einem mit mehr Ressourcen ändern. Dies nennt man vertikale Skalierung oder Skalierung nach oben. 

=== 1.3.2 Horizontale Skalierung ===

Eine andere Möglichkeit der Skalierung besteht darin, weitere Server hinzuzufügen, die manchmal auch als Knoten bezeichnet werden.  Dies wird als horizontale Skalierung oder Skalierung nach außen bezeichnet. Für eine horizontale Skalierung müssen im Vorfeld ein wenig Arbeit geleistet werden um ein entsprechendes Design zu entwickeln.  Wenn z.B.  von einem Webserver auf zwei Webserver umstiegen wird muss eine Möglichkeit gefunden werden, um den Datenverkehr an den zusätzlichen Knoten zu leiten und die Last vorzugsweise auf die beiden Server zu verteilen, detto  einen dritten oder vierten Server.  Da nun mehrere Server zur Verfügung stehen, welche die dieselbe Funktion erfüllen, und einer von ihnen ausfällt, ist der Dienst im schlimmsten Fall beeinträchtigt.

=== 1.3.3 High Availability ===

Die Hochverfügbarkeit bezieht sich ja auf die Fähigkeit eines Systems, einen unterbrechungsfreien Betrieb und Zugriff zu gewährleisten und Hauptmerkmale sind Minimierung von Ausfallzeiten, Redundanz zur Bewältigung von Hardwareausfällen sowie Mechanismen zur Fehlertoleranz.

In Bezug auf einen Webserver bedeutet dies, ein hochverfügbarer Webdienst stellt durch Load Balancing und redundante Server sicher, dass diser auch bei Serverausfällen erreichbar bleibt. Kleinere Websites, die auf einfachen Strukturen aufbauen und keine ausufernde Seitenzahl aufweisen kommen ohne Datenbank aus, aber sobald es ein Content Management System(CMS) oder Learn Management System(LMS) handelt ist einDatenbankmanagementsystem(DBMS) involviert. Auch dieses benötigt einen hohen Durchsatz bezogen auf das Daten- oder Transaktionsvolumen, welches das System innerhalb eines bestimmten Zeitraums verarbeiten kann. Die Effizienz der Datenübertragung durch das System, wird durch optimierte Datenverarbeitung, minimierte Latenzzeit bei der Datenübertragung.und effiziente Nutzung der Systemressourcen sichergestellt.

Zusammenfassend bedeutet das:

  • Bei der Hochverfügbarkeit liegt der Schwerpunkt auf der Minimierung von Ausfallzeiten und der Gewährleistung der ständigen Erreichbarkeit.
  • Hohe Skalierbarkeit bezieht sich auf die Fähigkeit eines Systems, eine erhöhte Last durch zusätzliche Ressourcen zu bewältigen.
  • Hoher Durchsatz misst die Effizienz der Datenübertragung durch ein System

==== 1.3.3.1 Hochverfügbarkeit von Daten ====

Die Hochverfügbarkeit von Daten wird durch eine Datensicherung gewährleistet, die eine strukturierte,regelmäßige Sicherung der Daten im Regelbetrieb und eine mögliche Wiederherstellung der Daten nach eingetretenem Verlust (z. B. nach einem Web-Serverausfall) vorsieht.

Zur gesamtheitlichen Betrachtung der Datensicherung im Sinne einer Hochverfügbarkeit müssen folgende Schritte berücksichtigt werden: [21]

  • die Datensicherungs- und Wiederherstellungsstrategie muss konzipiert und definiert werden,
  • für deren Umsetzung ein entsprechender operativer Prozess entwickelt, dokumentiert und gelebt werden,
  • die Technologie zur Datensicherung spezifiziert, ausgewählt, beschafft und betriebsbereit sein
  • die zuständigen Mitarbeiter die erforderliche Expertise hinsichtlich der Technologie haben, fachlich fortgebildet werden und Kenntnis über den Datensicherungs bzw. Wiederherstellungsprozess besitzen.

2. Implementierung von Hochverfügbarkeitslösungen und Failover-Strategien

Der primäre Mechanismus zur Aufrechterhaltung einer hohen Systemverfügbarkeit wird als Failover bezeichnet. Bei diesem Ansatz wird ein ausgefallenes Primärsystem durch ein Backup-System ersetzt, d. h. die Verarbeitung wird auf das Backup-System verlagert. Viele HA-Konfigurationen bieten auch Mechanismen für Disaster Recovery, d. h. die Wiederherstellung der Systemverfügbarkeit, wenn die Failover-Mechanismen nicht in der Lage waren, das System verfügbar zu halten.

Wenn jedoch keine Failover-Strategie vorhanden ist, kann ein Ausfall zu erheblichen Ausfallzeiten führen, je nach Ursache des Ausfalls und Ihrer Fähigkeit, diesen zu isolieren und zu beheben. Für viele Anwendungen, die nicht geschäftskritisch sind, kann dieses Risiko akzeptabel sein.

2.1. Hochverfügbarkeit und Failover

Hochverfügbarkeit und Failover sind entscheidende Konzepte für Unternehmen, die darauf angewiesen sind, dass die Softwaresysteme unterbrechungsfrei und zuverlässig laufen.

Hochverfügbarkeit ist der  kontinuierlichen Betrieb eines Systems mit minimalsten Ausfallzeiten, selbst bei unerwarteten Ereignissen oder Ausfällen.

Failover ist der Wechsels zu einem Backup-System, wenn das Primärsystem aufgrund eines Fehlers, einer Wartung oder eines anderen Ereignisses, das eine Unterbrechung verursacht hat, nicht verfügbar ist.

2.2. Failover-Cluster

Ein gängiger Ansatz zur Erreichung von HA ist der Failover-Cluster, bei dem das primäre Produktionssystem durch ein (in der Regel identisches) Standby-System mit gemeinsamem Speicher und einer Cluster-IP-Adresse, die dem aktiven Mitglied folgt, ergänzt wird. Im Falle eines Ausfalls des Produktionssystems übernimmt das Standby-System die Arbeitslast der Produktion und übernimmt die Programme und Dienste, die zuvor auf dem ausgefallenen Primärsystem liefen. Damit der Failover automatisiert und ohne Eingriff eines Administrators erfolgen kann, ist der Einsatz einer Cluster-Manager-Software oder eines Loadbalancers erforderlich. Weiterer Vorteil eines Failover-Clusters ist die Möglichkeit, ein System zu Wartungszwecken bewusst außer Betrieb nehmen zu können. Der Standby-Server muss für die Dauer der Wiederherstellung des ausgefallenen Primärsystems in der Lage sein, die normale Produktionsauslastung zu bewältigen. Optional kann der Standby-Server zum Primärserver werden, wobei der ausgefallene Primärserver zum Standby-Server wird, sobald er wiederhergestellt ist.

16Standby.jpg

2.3. Cluster mit zwei Knoten

Um die HA-Cluster-Technologie einsetzen zu können, muss die Anwendung folgende Voraussetzungen erfüllen:[21]

Es muss eine relativ einfache Möglichkeit geben, die Anwendung zu starten, zu stoppen, den Stopp zu erzwingen und den Status der Anwendung zu überprüfen
Die Anwendung muss in der Lage sein, gemeinsam genutzte Speicher wie NAS/SAN zu nutzen.
Die Anwendung muss so viel wie möglich von ihrem Zustand auf einem permanenten gemeinsamen Speicher speichern
Es muss möglich sein, die Anwendung auf einem anderen Knoten mit dem letzten Zustand vor dem Ausfall neu zu starten, indem der gespeicherte Zustand aus dem gemeinsamen Speicher verwendet wird.
Die Anwendung darf im Falle eines Absturzes keine Daten beschädigen oder vom gespeicherten Zustand neu starten.

Anmerkung: iv u. v sind nicht immer leicht zu realisieren

Hochverfügbarkeits-Cluster (HA-Cluster), auch als Failover-Cluster bekannt, sind Gruppen von Computern, die Serveranwendungen unterstützen, die mit einem Minimum an Nichtverfügbarkeit zuverlässig genutzt werden können.  Das Prinzip besteht darin, redundante Computer in Gruppen oder Clustern zusammenzufassen, die einen kontinuierlichen Service bieten. Wenn es kein Clustering gibt und ein Server, auf dem eine bestimmte Anwendung läuft, abstürzt, ist die Anwendung nicht verfügbar, bis der abgestürzte Server repariert ist. HA-Clustering beseitigt diese Situation, indem Hardware-/Softwarefehler erkannt werden und die Anwendung sofort auf einem anderen System neu gestartet wird, ohne dass ein administrativer Eingriff erforderlich ist. Als Teil dieses Prozesses kann die Clustering-Software den Knoten konfigurieren, bevor die Anwendung auf ihm gestartet wird. HA-Cluster werden häufig für kritische Datenbanken verwendet.

HA-Cluster-Implementierungen versuchen, Redundanz in einen Cluster einzubauen, um einzelne Ausfallpunkte zu eliminieren, einschließlich mehrerer Netzwerkverbindungen und Datenspeicherung, die redundant über Storage Area Networks (SAN) erfolgt. HA-Cluster verwenden eine private Heartbeatverbindung (so nennt man  eine Netzwerkverbindung zwischen zwei (oder mehr) Rechnern in einem Cluster,)die zur Überwachung der Gesundheit und des Status jedes Knotens im Cluster verwendet wird.

.

17Cluster.jpg

Cluster-Konfigurationen können in folgende Kategorien eingeteilt werden:[21]

  • Aktiv/aktiv

    Der für den ausgefallenen Knoten bestimmte Datenverkehr wird entweder an einen vorhandenen Knoten weitergeleitet oder die Last auf die verbleibenden Knoten verteilt. Dies ist normalerweise nur möglich, wenn die Knoten eine homogene Softwarekonfiguration verwenden.

  • Aktiv/passiv

    Stellt eine vollständig redundante Instanz jedes Knotens bereit, die nur dann online geschaltet wird, wenn der zugehörige primäre Knoten ausfällt Diese Konfiguration erfordert normalerweise die meiste zusätzliche Hardware.

  • N+1

    Stellt einen einzelnen zusätzlichen Knoten bereit, der online geschaltet wird, um die Rolle des ausgefallenen Knotens zu übernehmen. Im Fall einer heterogenen Softwarekonfiguration auf jedem primären Knoten muss der zusätzliche Knoten universell in der Lage sein, alle Rollen der primären Knoten zu übernehmen, für die er verantwortlich ist. Dies bezieht sich normalerweise auf Cluster, auf denen mehrere Dienste gleichzeitig ausgeführt werden; im Fall eines einzelnen Dienstes degeneriert dies zu aktiv/passiv.

  • N+M

    In Fällen, in denen ein einzelner Cluster viele Dienste verwaltet, bietet ein einziger dedizierter Failover-Knoten möglicherweise nicht genügend Redundanz. In solchen Fällen sind mehr als ein (M) Standby-Server enthalten und verfügbar. Die Anzahl der Standby-Server ist ein Kompromiss zwischen Kosten und Zuverlässigkeitsanforderungen.

  • N-zu-1

    Ermöglicht, dass der Failover-Standby-Knoten vorübergehend zum aktiven Knoten wird, bis der ursprüngliche Knoten wiederhergestellt oder wieder online gebracht werden kann. An diesem Punkt muss ein Failover der Dienste oder Instanzen auf ihn durchgeführt werden, um die Hochverfügbarkeit wiederherzustellen.

  • N-zu-N

    Eine Kombination aus Aktiv/Aktiv- und N+M-Clustern. N-zu-N-Cluster verteilen die Dienste, Instanzen oder Verbindungen des ausgefallenen Knotens auf die verbleibenden aktiven Knoten. Dadurch entfällt (wie bei Aktiv/Aktiv) die Notwendigkeit eines Standby-Knotens, allerdings entsteht auf allen aktiven Knoten ein Bedarf an zusätzlicher Kapazität.

= 3. Überwachung und Automatisierung zur schnellen Wiederherstellung von Diensten =

Überwachungs- und Protokollierungsfunktionen zur Erkennung von und Reaktion auf Sicherheitsvorfälle sein unerlässlich. Die Echtzeitüberwachung von Verkehrsmustern, Serverprotokollen und Sicherheitsereignissen ermöglicht eine schnelle Identifizierung verdächtiger Aktivitäten. Die Analyse von Protokolldaten hilft bei der Untersuchung von Vorfällen, der Forensik und bei proaktiven Sicherheitsmaßnahme.

Wichtig ist der Aufbau und Verwaltung eines robusten Disaster-Recovery-Systems (DR), das Verfügbarkeit und Leistung innerhalb der gewünschten Durchlaufzeiten bietet. Die Automatisierung der wichtigsten DR-Prozesse - einschließlich Replikation, Workflows und Failover-reduziert Betriebsrisiken drastisch und erhöht die Effizienz, während erweiterte Dashboards und die rechtzeitige Verfügbarkeit sensibler Daten helfen, das Recovery Point (RPO) und die Wiederherstellungszeit (RTO) zu verbessern.

== 3.1. Monitoring ==

Monitoring von z.B. Servern und Diensten sind in einer modernen IT-Infrastruktur unerlässlich. Modernes Netzwerkmanagement ist der Prozess der Verwaltung und des Managements von Computernetzwerken . Bereitgestellte Diensten, Fehleranalyse, Leistungsmanagement sowie Aufrechterhaltung der Servicequalität sind die Aufgaben . Netzwerkadmin bedienen sich dafür einer Netzwerkmanagementsoftware, um diese Aufgaben zu bewerkstelligen.

Mit dieser Funktion kann die Netzwerkverwaltungssoftware das Netzwerk auf Probleme überwachen und Verbesserungsvorschläge machen. Die Software kann die Geräte regelmäßig abfragen oder sich selbst registrieren, um Warnmeldungen von Netzwerkgeräten zu erhalten. Ein Mechanismus, mit dem Netzwerkgeräte freiwillig Informationen über sich selbst weitergeben, ist das Senden eines SNMP-Trap [19]**).Die Überwachung deckt Fehler im Netz auf, z. B. ausgefallene oder falsch konfigurierte Knoten, Leistungsengpässe, böswillige Akteure, Eindringlinge usw.

**) Simple Network Management Protocol zum Sammeln und Organisieren von Informationen über verwaltete Geräte in IP-Netzwerken und zum Ändern dieser Informationen, um das Geräteverhalten(Dienste) zu ändern.

Networkmanagement u. Monitoringsysteme:

  • Zabbix
  • Nagios
  • PRTG
  • Icinga
  • uvm.

18 Zabbix.jpg

=== 3.2.1 Recovery Point Objective ===

Recovery Point Objective (RPO) ist der maximal akzeptable Datenverlust nach einem ungeplanten Datenverlustvorfall, ausgedrückt als Zeitdauer. Dies wird im Allgemeinen als der Zeitpunkt vor dem Ereignis angesehen, zu dem Daten erfolgreich wiederhergestellt werden können – also die Zeit, die seit der letzten zuverlässigen Sicherung vergangen ist.

=== 3.2.2 Recovery Time Objective ===

Recovery Time Objective (RTO) ist die maximal akzeptable Zeitspanne für die Wiederherstellung eines Netzwerks oder einer Anwendung und die Wiedererlangung des Datenzugriffs nach einer ungeplanten Unterbrechung. Umsatzeinbußen und das Ausmaß, in dem ein unterbrochener Prozess die Geschäftskontinuität beeinträchtigt, können sich beide auf das RTO auswirken.

=== 3.2.3  Recovery as a Service ===

Recovery as a Service ( RaaS ), [1] seltener auch Disaster Recovery as a Service ( DRaaS ) genannt, ist eine Möglichkeit , Anwendungen und Dienste via Cloud-Computing zu schützen. Dabei unterscheidet sich RaaS von Cloud-basierten Backup-Diensten, indem es Daten schützt und bei Bedarf Standby-Rechenkapazität bereitstellt, um eine schnellere Wiederherstellung von Diensten und Anwendungen zu ermöglichen.   Je nach Art des Geschäfts und des betreffenden Prozesses oder Systems kann dieser Zeitraum stark variieren.

=== 3.2.4 Online-Backup ===

Cloud-Backup, auch Online-Backup oder Remote-Backup genannt , ist eine Strategie zum Senden einer Kopie einer physischen oder virtuellen Datei oder Datenbank an einen sekundären, externen Standort zur Sicherung im Falle eines Geräteausfalls.

=== 3.2.5. Planung – Automatisiertes Recovery ===

Hinsichtlich einer Automatisierung für ein Back-up und Disaster Recovery, sind Voraussetzungen und Strategien zu treffen. Die Sicherungsintervalle sind u. a. abhängig von der Risikobewertung eines Datenverlustes. Eine Beschreibung des Wiederanlaufs sollte vorhanden sein, die neben anderen Anforderungen eine regelmäßige Datensicherung und Auslagerung an einen sicheren Ort beinhaltet, alle relevanten Daten umfasst sowie Verfahren für reguläre und protokollierte Tests enthält.[20]

== 3.2 Recovery ==

Die Recovery befasst sich mit dem Wiederherstellen von Daten nach aufgetretenen schweren Fehlern. Diese Fehler lassen sich grob in zwei Klassen einteilen, in Hardware- und Softwarefehler.

Hardware Fehler: Stromausfall, Wackelkontakte, Festplattenausfall, Arbeitsspeicherausfall, Netzausfall, Brand sowie Feuer und Löschwasser.

Software Fehler: Fehler z.B. in der Datenbanksoftware, im Betriebssystem, im Anwendungsprogramm, in der Übertragungssoftware Eine gewisse Vorsorge wird ein Datenbankadministrator dadurch treffen, dass er die Hard- und Software auch nach dem Gesichtspunkt der Zuverlässigkeit auswählt. Dies minimiert die Ausfallrate, ganz verhindert wird sie dadurch jedoch nicht. Die grundsätzliche Forderung im Fehlerfall ist, dass keine Daten verlorengehen, dass eine Rekonstruktion aller Daten also immer möglich ist, und dass dabei die Datenbank-Integrität und -Konsistenz erhalten bleibt.

Prinzipiell wird daher ein Administrator mehrstufig vorgehen: Er wird mindestens einmal pro Woche eine Komplettsicherung und täglich eine Differenzsicherung des Datenbestandes vornehmen. Weiter werden alle Änderungen in der Datenbank protokolliert. Dieses „elektronische Logbuch“ heißt Logdatei oder Logfile.

== 3.3 Verteilte Systeme(Datenbanken) ==

Der Hauptgrund für die Verteilung liegt in der schnellen Verfügbarkeit. Daten ausschließlich zentral zu halten, kann bei extrem vielen Zugriffen schnell zum Engpass werden. Weltweit operierende Unternehmen sind ebenfalls dezentral aufgebaut. Es existieren meist mehrere Fabriken, Werke oder Zweigstellen. Aber auch bei kleineren Firmen gibt es Unternehmensbereiche, Abteilungen oder zumindest verschiedene Projekte. Daraus folgt direkt, dass bereits die anfallenden Daten verteilt sind. Es ist quasi ein Schritt zurück, diese verteilten Daten zentral zusammenzufassen. Und wir fragen uns, ob dies im Zeitalter der Vernetzung überhaupt noch notwendig ist. Ein wichtiger Vorteil dezentraler Datenhaltung liegt darin, dass häufig lokal zugegriffen wird.

Ein weiterer Vorteil der Verteilung von Daten liegt in der Ausfallsicherheit. Setzen wir voraus, dass das verteilte System keinen zentralen Server besitzt, so wird der Ausfall eines beliebigen Rechners das Netz nicht vollständig lahmlegen. Im Gegenteil, bis auf die Daten des einen Rechners bleiben alle weiteren zugreifbar. Damit wird eine hohe Ausfallsicherheit garantiert. Hier liegt andererseits die Achillesferse zentraler Systeme. Der Ausfall des zentralen Datenbankservers legt das gesamte System lahm. Ein weiterer Vorteil liegt in der optimalen Verteilung auf hunderte von Systemen. So können tausende parallele Abfragen auf verschiedene Rechner und Datenbanken gelenkt werden. Die Antwortzeiten bleiben niedrig.

Wird in diesen Systemen auch viel geändert, so ist es äußerst schwer, die über alle Systeme verteilten Daten konsistent zu halten. Dieser enorm hohe Kommunikationsaufwand führt dazu, dass sich die Vor- und Nachteile letztendlich gegenseitig aufheben. [19]

3.4 Wiederherstellung im Notfall

Um Hochverfügbarkeit sicher zu stellen ist ein Disaster Recovery-Plan auch notwenig. Dieser bezieht sich auf einen strukturierten, dokumentierten Ansatz mit Anweisungen zur Reaktion auf ungeplante Vorfälle.

  • Virtualisiertes DRP: Mit der Virtualisierung kann DR auf effiziente und unkomplizierte Weise implementiert werden. In einer virtualisierten Umgebung können sofort neue Instanzen von virtuellen Maschinen (VMs) erstellt und die Wiederherstellung von Anwendungen mit hoher Verfügbarkeit bereitstellen. Darüber hinaus erleichtert es das Testen. Der Plan muss Validierungsfunktionen enthalten, um sicherzustellen, dass Anwendungen im DR-Modus schneller ausgeführt werden und innerhalb von RTO und RPO zum normalen Betrieb zurückkehren können.
  • Netzwerk-DRP: Die Erstellung eines Plans zur Wiederherstellung eines Netzwerks wird durch die zunehmende Komplexität des Netzwerks kompliziert. Ergo ist es wichtig, das Wiederherstellungsverfahren Schritt für Schritt detailliert zu beschreiben, es korrekt zu testen und es auf dem neuesten Stand zu halten. Unter einem Netzwerk-DRP sind Daten netzwerkspezifisch. Zum Beispiel in Bezug auf Leistung und Netzwerk.
  • Cloud DRP: Ein Cloud basierter Ansatz kann von der Dateisicherung/Datensicherung bis zum vollständigen Replikationsprozess reichen. Cloud DRP ist zeit-, raum- und kosteneffizient. Die Wartung erfordert jedoch Geschicklichkeit und ordnungsgemäße Verwaltung. Der Administrator muss den Standort des physischen und des virtuellen Servers kennen. Außerdem muss der Plan auch Sicherheitsprobleme hinsichtlich der Cloud berücksichtigen.
  • DRP für Rechenzentren: Dieser Plan konzentriert sich auf die Rechenzentrumsanlage und deren Infrastruktur. Ein Schlüsselelement in dieser DRP ist eine Bewertung des operationellen Risikos, da dies die erforderlichen Schlüsselkomponenten wie Gebäudestandort, Sicherheit, Büroräume sowie Stromversorgungssysteme und Schutz analysiert. Es muss sich auch mit einem breiteren Spektrum möglicher Szenarien befassen.

     [23]

4 Tools

Administratoren bedienen sich mehrerer Möglichkeiten um eine rasche Wiederherstellung von Diensten und Geräten zu ermöglichen. Eine Möglichkeit sind zugekaufte Tools, welche die sämtliche Komponenten komplexer Umgebungen koordinieren und ordnungsgemäß herunterfahren können. In dessen Konfiguration sind alle Systeme (Virtualisierungshosts, SAN-Systeme etc.) hinterlegt, die in der grafischen Benutzeroberfläche zu Ausführungsplänen kombiniert werden können.

Eine weitere Möglichkeit ist selbst entwickelte Skripts und Applikationen.


[1] http://info.cern.ch/hypertext/WWW/TheProject.html

[2] https://datatracker.ietf.org/doc/html/rfc2616

[3] https://www.netcraft.com/

[4] https://de.statista.com/statistik/daten/studie/181588/umfrage/marktanteil-der-meistgenutzten-webserver/

[5] Nancy J. Yeager;Robert E. McGrath. Web Server Technology; Morgan Kaufman Publishers 1996

[6] P. Mandl, Grundkurs Betriebssysteme; Springer Verlag 2020

[7] https://truelist.co/blog/linux-statistics/

[8] P. Bühler, P. Schlaich, D. Sinner, Webtechnologien, Springer Verlag 2018

[9] https://www.apachefriends.org/de/index.html

[10] J.Nehmer, Computer verstehen , Springer Verlag 2023

[11] A. Schill, T. Springer, Verteilte Systeme, Springer Verlag 2012

[12] A.S. Tanenbaum, Distributed Sytems, Paerson 2003

[13] F. Gessert et. al., Schnelles und Skalierbares Cloud-datenmanagement, Springer 2024

[14] https://paperzz.com/doc/7849377/hrg---harvard-research-group

[15] http://www.ieeetfcc.org/high-availability.html 

[16] S.Wolfgarten, Apache Server 2.0, Addison Wesley, 2004 

[17] D.Diaw, Content Delivery Network, Kindle 2023

[18] J. Cannon, High Availability for the LAMP Stack, Kindle 2020

[19] E.Schicker, Datenbanken und SQL, Springer 2014

[20] ISO 22393:2023 Guidelines for planning recovery and renewal

[21] U. Lohmann, Architekturen der Verwaltungsdigitalisierung, Springer 2021

[22] M. Juhas, et al., Increase the Efficiency, Reliability and Safety of the Centre of Data Collection Management and Their Evaluation Using Cluster Solutions, International Journal of Computer, Vol:8, No:6, 2014

[23] https://www.veritas.com//information-center/disaster-recovery-guide 

[24] https://letsencrypt.org/de/getting-started/

[25] H. Hopp, Docker für Einsteiger, BMU-Verlag 2021

[26] Ch. Leornardo, Docker: Docker for the absolute Beginner Kindle 2021

[27] https://docs.docker.com/guides/docker-overview/

[28] N. Poulton,The Kubernetes Book: Kindle 2024

[29] F. Geisler, B. Kettner, Docker , Wiley Verlag, 2019

[30] https://docs.docker.com/reference/dockerfile/

[31] R. Follmann, Der PC als Medienzentrale, Springer Nature 2020

[32] https://www.tecmint.com/open-source-caching-tools-for-linux/

[33] https://memcached.org/

[34] https://web.dev/articles/critical-rendering-path/constructing-the-object-model

[35] K.Welter, Kubernetes - Das Praxisbuch für Entwickler, Rheinwerk 2024

[36] https://kubernetes.io/

[99] https://de.wikipedia.org/