Die Datenbank, das unbekannte Wesen Teil II

Verbindung, die keine ist

Einer der Gründe, warum das Internet so groß werden konnte, ist der Aufbau des Internets und der Verkehr zwischen den Klienten und den Servern. Es wird zwischen beiden nur zum Zeitpunkt der Datenübertragung eine Verbindung definiert. Danach weiß weder der Server noch der Client etwas von seinem jeweiligen Partner. Das Internet ist eigentlich verbindungslos.

Vergleichen Sie das mit einer Telefonverbindung, in der nach jedem gesprochenen Satz der antwortende Teilnehmer wieder die Nummer des Telefonpartners wählen muss. Umständlich, sagen Sie? Nun, wenn alle Verbindungen zwischen dem Browser und dem jeweiligen Server gehalten werden müssten, würde wohl das Internet nicht funktionieren. Geschichtlich gesehen wurde das Internet ja eigentlich nur zum Austausch von Nachrichten benötigt. Der Client ruft beim Server eine Nachricht ab und fertig. Anschießend kennt weder der Server den Client noch umgekehrt. Das ist das Wesen des Internets, und dies müssen Sie als Programmierer von Internetanwendungen sich auch immer vergegenwärtigen.

Wenn Sie schon einen eigenen Webserver betreiben, schauen Sie sich doch mal die Log-Datei des Servers bei Ihrem Hoster an. Das sehen Sie nur HTTP-Befehle wir GET und POST! Mit GET wird eine Seite vom Server abgeholt, der Browser bereitet sie auf und stellt sie dar. Beim POST wird die Verbindung zum Server aufgenommen und dem Server eine Nachricht gesendet, dies vor allem, wenn Sie auf einen Button für ein Formular drücken. Mehr passiert eigentlich nicht.

Was erhält der Server? Er erhält – vereinfacht ausgedrückt – die IP-Adresse des Klienten und die zu übermittelnde Seite. Jetzt ist es an dem Server, die Seite zu suchen und dem Klienten zu übertragen, oder einen Fehler zu melden. Danach ist alles Tabula Rasa!

Ein Blog oder eine Verkaufssoftware läuft nun auf dem Server. Durch den Anstoß des Klienten „Gib mir die Seite xyz“ kommt nun der Server an die Reihe und sucht die Seite. Beim Blog ist diese Seite jetzt aber keine HTML-Seite sondern ein PHP-Programm. Dessen Aufgabe ist es nun, die Seite aus der Datenbank zusammen zu stellen und dem Klienten zu senden.

Der Server & das Betriebssystem

Der Server läuft unter der Kontrolle des Betriebssystems, da er ein „Unter“-Programm des Betriebssystems ist. Obwohl die meisten Server unter dem Betriebssystem LINUX laufen, ist der Anstoß des Servers nichts anderes als das Starten eines Programms in Windows mit der Maus: Es wird eine .exe angestoßen.

Das Betriebssystem hat einen Anschluss nach draußen in das Netz. Vergleichen Sie das mit Ihrer „Fritz-Box“ die Ihrem Windows Nachrichten vom Netz übermittelt.

Ein Betriebssystem läuft, damit es quasi parallel laufen kann – vereinfacht – nur 100 Millisekunden für einen Auftraggeber, nach dieser Zeit, wendet es sich anderen Aufgaben zu, bis es wieder bei Ihrem Auftrag vorbei kommt. Die Aufträge aus der Fritz-Box werden in einer Warteschlange dem sog. Port gesammelt und nacheinander abgearbeitet. [In echt läuft das alles eventgesteuert, ein Event oder eine Nachricht steht an und nach einer gewissen Zeit kommt das Betriebssystem vorbei und behandelt den Event]

Es kommt also ein Auftrag durch das Netz! Das Betriebssystem speichert diesen Auftrag zunächst einmal in einer Warteschlange. Dann irgendwann kommt der Auftrag in der Warteschlange nach vorne und das Betriebssystem schaut sich den Auftrag an. „Ok, Server starten und ihm die Daten übergeben“ sagt das Betriebssystem. Jetzt nimmt das Betriebssystem den Auftrag mit den gelieferten Daten und speichert ihn im Hauptspeicher. Innerhalb dieser Zeitspanne, nimmt das Betriebssystem keine anderen Aufträge entgegen. Es schottet sich ab, bis die Speicherung erledigt ist.

Nun haben wir einen Auftrag für den Server! Beim nächsten Mal startet das Betriebssystem den Server und dieser holt sich – auch geschützt – seine Daten aus dem Hauptspeicher. Man nennt dieses Absperren auch Serialisierung. Nur ein Prozess darf zu diesem Zeitpunkt bestimmte Programme durchlaufen. Alle anderen müssen warten, bis zur Freigabe.

Warum das alles? Stellen Sie sich vor, tausende Anfragen und Aufträge liegen vor. das Betriebssystem würde nicht sperren, dann würde das gleiche Coding für viele Aufträge laufen. Es würde Chaos herrschen. Im einen Auftrag heißt es, zeige die Seite x und im anderen die Seite y! Gerade wenn das Betriebssystem die Adresse x für den Auftrag x geschrieben hat, kommt das Coding für Auftrag y und schreibt y an die Stelle. Jetzt macht das Betriebssystem weiter und will dem Server sagen: Starte mit den Daten von der Hauptspeicheradresse x, wo ja jetzt schon y steht. Die falsche Seite würde geliefert werden.

Mit derartigen Serialisierungen schützt sich das System vor Überschreibern! Diese Serialisierung kommt im Betriebssystem bei fast allen Programmen vor. Hiermit werden immer gleiche Abfolgen von Rechneranweisungen realisiert. Bei modernen Mehrprozessorsystemen wird die Serialisierungen mit sog. Semaphoren durchgeführt.
Diesen Begriff werden wir später noch ein paar Mal begegnen. Ein Semaphor stellt sich meist eine ganze Zahl dar, die angibt dass ein Programm nun für andere gesperrt ist. Verlässt das Programm das geschützte Coding, wird der Semaphor wieder auf 0 gesetzt und damit der geschützte Raum freigegeben.

Durch diese Maßnahmen im Betriebssystem wird also gewährleistet, dass das Serverprogramm die richtigen Daten erhält. Er, der Server, weiß nun durch den Startaufruf und einer übergebenen Adresse, wo seine Daten stehen. Doch das Betriebssystem schläft ja nicht, sondern macht sich bereit den nächsten Auftrag zu erledigen. Wenn die Daten für den 2. Auftrag gesichert gespeichert sind, ruft es erneut das Serverprogramm, jetzt aber mit einer anderen Adresse auf, nämlich wo dessen Daten stehen. Es läuft also das gleiche Programm – der Server – ein zweites Mal los. Man spricht hier auch von einer 2. Instanz des Serverprogrammes

Jetzt rennen 2 Serverprogramme im Rechner, jeder mit einem anderen Auftrag.

Kompliziert genug! Glaube ich ja! Es würde zu weit führen, derartiges noch genauer ausführen zu wollen. Denn dann müsste ich das alles noch mit Prozessen erklären.
[Für diejenigen, die es genauer haben wollen, ja die Instanzen des Servers laufen in Prozessen und/oder Threads ab]

Eigentlich wollen Sie ja wissen was mit der Datenbank ist, oder? Dahin sind wir noch gar nicht gekommen. Trotzdem ist es wichtig zu verstehen, dass das Betriebssystem alle diese Prozesse steuert, auch später die Datenbank. Auch die Datenbank ist ein Programm, dass unter dem Betriebssystem läuft, aber meist abgetrennt von dem Serverprogramm in einem eigenen Prozess! Auch wieder wie die Internetverbindung über einen eigenen Port für den Datentransfer!

Alles was in unserer vereinfachten Darstellung im Betriebssystem abläuft, läuft ähnlich auch in der Datenbank und im Server ab. Denn nehmen Sie Ihren Blog, der ja mit index.php als Startprogramm beginnt, hier läuft Coding das zu der aufzurufenden Seite gehört. Wenn der Server alles aus seinem Datenbereich gelesen hat, wird er das PHP-Programm starten und dieses wird die weitere Logik übernehmen.

Dem PHP-Programm ist auch die Aufgabe übertragen, die Datenbank anzuschließen und zu öffnen. Dazu kommen wir dann das nächste Mal.

Wenn Sie bis hierher Verständnisschwierigkeiten hatten, ich bestimmte Begriffe noch genauer erklären soll, dann schreiben Sie mir dies bitte in einem Kommentar, damit die anderen – die sich nicht trauen – auch etwas davon haben.

Bis demnächst
Bernd Klüppelberg

Hier noch alle Links auf die Artitkelserie (soweit sie veröffentlicht ist):
Die Datenbank, das unbekannte Wesen Teil I
Die Datenbank, das unbekannte Wesen Teil II
Die Datenbank, das unbekannte Wesen Teil III
Die Datenbank, das unbekannte Wesen Teil IV
Die Datenbank, das unbekannte Wesen Teil v
Die Datenbank, das unbekannte Wesen Teil VI

Bisher gibt es keinen Kommentar. Schreiben Sie einen Kommentar!

Schreibe einen Kommentar