11.1 Moderne Produkte
Moderne Produkte werden schon längst nicht mehr als Programme bezeichnet. Ein modernes Produkt kann aus Dutzenden von Programmen, Hunderten von Internet-Services und einer Menge von APIs bestehen, die ihm von der Cloud eines Rechenzentrums bereitgestellt werden, in dem das Produkt gehostet ist.
Viele moderne Produkte (wenn nicht alle) arbeiten nach der Client-Server-Paradigma. Dabei befindet sich auf deinem Gerät (Telefon, Laptop, Computer) ein Programm, das für die Kommunikation mit dem Benutzer (also dir) zuständig ist, während die gesamte kritische Funktionalität auf einem entfernten Server liegt, wo alles Wichtige passiert.
Manchmal kann dein Client mit mehreren unabhängigen Servern kommunizieren, oder der Server eines Produkts kann sich an den Server eines anderen Produkts wenden. So entsteht ein gewisses globales Netzwerk aus Clients und Servern, die alle miteinander arbeiten.
Daher könnte das moderne Anwendungsmodell besser als Client-Internet-Server-Paradigma beschrieben werden. Es gibt einfach zu viele verschiedene komplexe Kommunikationswege. Es gibt sogar sogenannte „intelligente Kommunikationskanäle“, die selbst entscheiden, an wen deine Anfrage gesendet werden soll und wann.
11.2 Clients
Programme-Clients lassen sich grob in 4 Kategorien unterteilen:
- Desktop-Client — ein Programm, das auf einem Computer läuft
- Mobile-Client — eine Anwendung für iOS oder Android
- Web-Client — eine Website/Web-Anwendung, die im Browser läuft
- Server-Client — eine Anwendung, die auf einem anderen Server ausgeführt wird
Und jede dieser Kategorien kann weiter unterteilt werden. Ein Web-Client zum Beispiel ist eine Website oder eine Web-Anwendung, und das bedeutet, dass sie besteht aus einem Browser und der Website, die darin geladen wird. Auch Browser sind nicht alle gleich und können unterschiedlich funktionieren.
Aber selbst wenn wir den am weitesten verbreiteten Browser nehmen, bleibt noch die Website, die darin geladen wird. Eine Website besteht normalerweise aus drei Dingen:
- HTML
- CSS
- JavaScript
Ihr sagt vielleicht, nichts ist einfacher, aber niemand schreibt Websites einfach nur mit HTML und JavaScript mehr. Jetzt werden für die Entwicklung von Websites nicht nur Bibliotheken verwendet, sondern vollwertige Frameworks wie React, Angular oder Vue. Und es sind jetzt keine Websites mehr, sondern vollwertige Web-Anwendungen. Mit ihren eigenen Builds, Tests und Paradigmen.
Auch einfacher CSS wird jetzt von niemandem mehr verwendet: Es gibt schon CSS-Präprozessoren, die dabei helfen, ihn zu generieren, und sogar ganze CSS-Frameworks. Herrgott, es gibt sogar CSS-Frameworks für E-Mail, damit dein Brief schön aussieht, egal ob es im Browser oder in den meisten E-Mail-Clients betrachtet wird.
Auch in JavaScript programmiert niemand mehr: alle großen Web-Anwendungen werden in TypeScript geschrieben, das dann in JavaScript kompiliert wird. Ihr versteht schon…
11.3 Internet und Infrastruktur
Kommunikation zwischen Client und Server — was könnte einfacher sein? Aber auch hier hat sich schon alles geändert.
Erstens wird dein Produkt höchstwahrscheinlich in einem der modernen Rechenzentren gehostet. Viele Unternehmen auf der ganzen Welt bieten verschiedene Hosting-Dienste für deine Produkte sowohl auf ihren Servern als auch auf deinen physischen Servern an. Jeder Wunsch wird erfüllt, gegen Bezahlung, versteht sich.
Ein physischer Server ist nun nicht mehr physisch. Alle modernen Rechenzentren bieten dir die Miete von virtuellen Servern an. Es ist eine Art virtueller Computer, und auf einem physischen Server kann es Dutzende davon geben. Dafür ist es bequem, was das Upgrade des Servers betrifft. Wenn du mehr Speicher benötigst, kannst du ihn deinem virtuellen Server in ein paar Minuten hinzufügen.
Aber auch dieser Ansatz ist schon veraltet. Jetzt ist es angesagt, in die Cloud zu ziehen — das bedeutet, dass dein Produkt nicht einfach auf einem virtuellen Server im Rechenzentrum gehostet wird, sondern aktiv eine große Auswahl an Infrastruktur und Diensten dieser Rechenzentren nutzt.
Du brauchst einen Server zum Speichern von Backups: dafür gibt es eine ganze bequeme Infrastruktur in der Cloud. Du brauchst eine Datenbank mit 99.9999999% Zuverlässigkeit? Die gibt es auch. Kafka, RabbitMQ, NoSQL? Alles gibt es schon und es ist einfach zu konfigurieren. Man muss nur zahlen.
Diese Rechenzentren und Clouds werden allmählich Teil deines Produkts. Zum Beispiel hat Amazon eine Menge Rechenzentren auf der ganzen Welt, deshalb bieten sie einen CDN-Dienst an: dein öffentlicher Inhalt wird in allen Amazon-Rechenzentren gecacht, und deine Benutzer auf der ganzen Welt werden ihn schneller erhalten.
Oder die Anfrage an das API deiner Anwendung kann durch den Amazon Gateway API-Dienst geleitet werden, der eine sehr flexible Konfiguration mit deinen Diensten ermöglicht. Man kann die Last auf verschiedene Dienste verteilen, DDoS-Angriffe abwehren, Datei-Uploads automatisieren, intelligentes Caching einrichten und vieles mehr.
So entsteht zwischen der Client-Anwendung und deinen Diensten eine Menge „intelligenter Kommunikation“, die konfiguriert werden kann und muss. Selbst wenn du das nie persönlich machen wirst, solltest du wissen, dass sie existieren und die Arbeit deines Programms erheblich beeinflussen können.
Und dabei haben wir noch nicht einmal Themen wie Router, 5G-Basisstationen, Satelliten und Internetkabel am Meeresboden angesprochen. Du sendest einen Videostream von deinem Server an deinen Client, und es hakt, weil der Client eine schlechte Verbindung hat und die Verbindung ständig abbricht. Rate mal, wer dieses Problem lösen wird?
11.4 Server
Der Begriff Server bezieht sich auf viele ziemlich unterschiedliche Konzepte, daher ist es nützlich für dich, über die beliebtesten zu wissen.
Physischer Server
Ein physischer Server ist Hardware, die einen einzelnen Computer mit Ressourcen (Prozessor, Speicher, Speicherplatz) darstellt, der zur Datenverarbeitung und für den Betrieb verschiedener Softwareanwendungen genutzt wird. Diese Server werden in Rechenzentren installiert, wo sie Rechenleistung für das Hosting von Websites, Anwendungen, Datenbanken und anderen Diensten bereitstellen.
Virtueller Server
Ein virtueller Server ist ein software-emulierter Server, der in einer physischen Serverumgebung arbeitet. Mit Virtualisierungstechnologien kann ein physischer Server in mehrere isolierte virtuelle Server aufgeteilt werden, von denen jeder sein eigenes Betriebssystem hat und unabhängig neu gestartet und konfiguriert werden kann.
Server-Programm (Beispiel Nginx)
Ein Server-Programm, wie Nginx, ist eine Server-Software, die zur Bearbeitung von Anfragen an Web-Ressourcen verwendet wird. Nginx ist bekannt als Webserver, der auch Funktionen als Mail-Proxy-Server und Reverse-Proxy-Server in Microservice-Architekturen und als Load Balancer erfüllen kann.
Datenbankserver
Ein Datenbankserver ist ein spezialisierter Server, der zur Verwaltung von Datenbanken und zur Bearbeitung von Anfragen an diese genutzt wird. Er bietet zentralisierte Datenspeicherung und -verarbeitung, indem er über das Netzwerk Zugriff auf die Daten bereitstellt. Datenbankserver unterstützen die Bearbeitung von Transaktionen, Suche und Datenänderung und bieten dabei Zuverlässigkeit und Sicherheit der Informationsspeicherung. Beispiele für Datenbankserver sind MySQL, PostgreSQL, Oracle Database und Microsoft SQL Server.
Und irgendwo in einem Rechenzentrum wird auf einem der virtuellen Server dein Projekt auf React und Node.js laufen, das mit einer Datenbank arbeitet, Anfragen von Nginx empfängt und Log-Daten seiner Aktionen an Splunk sendet.
Aber dank deinem Code werden Millionen von Nutzern deines Produkts glücklich sein. Sie werden das Produkt nutzen, dafür bezahlen, und dann wird auch der Eigentümer des Produkts glücklich sein. Die Aktien des Unternehmens werden steigen, du wirst Aktienboni erhalten und auch glücklich sein. Ein richtiger Kreislauf des Glücks in der Natur :)
GO TO FULL VERSION