Webserver Infrastructures - Gesamt: Unterschied zwischen den Versionen
(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
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:
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:
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.
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:
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.
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-OpenSSL, Apache 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
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
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.
Aktualisieren des System
Ein Terminal öffnen
Folgenden Befehl im Terminal eingeben, damit das System aktuell wird:
sudo apt update && sudo apt upgrade -y
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 Dienststart
- startet den Webserverstop
- stoppt den Serverrestart
- startet den Server neu, bestehende Verbindungen auf den Server werden gekapptreload
- lädt die Konfigurationsdateien neu, ohne dass Verbindungen getrennt werdenstatus
- gibt den aktuellen Status des Server-Dienstes ausIm 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.
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. M für die ALT-Taste.
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.
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.
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:
- 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:
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
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
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
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.
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
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:
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.
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:
- a) Verteilt Client-Anfragen bzw.r die Netzwerklast effizient auf einen weiteren oder mehrere Server.
- b) Überwacht den Zustand, die Verfügbarkeit und die Ausfallzeiten der Server
- c) Sorgt für hohe Verfügbarkeit und Zuverlässigkeit, indem er Anfragen nur an Server sendet, die online sind.
- d) Bietet die Flexibilität, je nach Bedarf Server hinzuzufügen oder zu entfernen
Vorteile des Lastausgleichs:
- Verringerung der Arbeitslast auf einem einzelnen Server.
- Durch Gleichzeitigkeit wird eine größere Menge an Arbeit in der gleichen Zeit erledigt.
- Gesteigerte Leistung Ihrer Anwendung durch schnellere Reaktion.
- 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.
- 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.
- Skalierbarkeit: Wir können die Anzahl der Server im laufenden Betrieb erhöhen oder verringern, ohne die Anwendung zu beeinträchtigen.
- Lastausgleich erhöht die Zuverlässigkeit Ihrer Unternehmensanwendung
- 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.
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.
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).
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.
[27]=== 3.1.1 Der Docker-Daemon ===
3.1.2 Der Docker-Client
3.1.3 Docker-Registry
=
3.1.4 Docker-Objekte
===
==
3.1.4.1 Docker-Image
====
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
====
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.
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
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 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.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]$count++;
}3) In diesem das Docker-File erstellen mit dem Namen dockerfile
COPY . /var/www/html/shop/public_html/
CMD [ "php", "./index.php"]

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 wieder3.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.
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
- Starten, Stoppen und Wiederherstellen von Diensten
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
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.
[28]
4.3.2.1 Kubernetes - API Server
4.3.3. Kubernetes - Cluster Store
- Abrufen von Container-Images
- Verwalten von Lebenszyklusoperationen(Starten und Stoppen von Containern)
=
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
- 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.9. Kubernetes - Pod ===
**) wird oft für Monitoring und/oder Logging verwendet
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
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 =
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)
- - schneller sind die Daten übertragen,
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 ==
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önntemerleichtern.
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.
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
4.1.1.2 Validatoren
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
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
1.1.2 Ungeplante Betriebsunterbrechungen
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
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
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:
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.
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.
.
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.
=== 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
[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/
[34] https://web.dev/articles/critical-rendering-path/constructing-the-object-model
[35] K.Welter, Kubernetes - Das Praxisbuch für Entwickler, Rheinwerk 2024