2.1 Moderne Produkte
Moderne Produkte nennt man kaum noch Programme. Ein modernes Produkt kann Dutzende von Programmen, Hunderte von Internet-Services und eine Menge von APIs umfassen, die von einem Cloud-Datenzentrum bereitgestellt werden (auch Rechenzentren genannt), in dem es bereitgestellt wird.
Viele moderne Produkte (wenn nicht alle) funktionieren nach der Client-Server-Paradigma. Das bedeutet, dass sich auf deinem Gerät (Telefon, Laptop, Computer) ein Programm befindet, das für die Kommunikation mit dem Benutzer (dir) zuständig ist, während die kritische Funktionalität auf einem entfernten Server liegt, wo all das Wichtige passiert.
Manchmal kann dein Client mit mehreren unabhängigen Servern kommunizieren, oder der Server eines Produkts kann einen Server eines anderen Produkts ansprechen. Es entsteht ein globales Netzwerk aus Clients und Servern, die alle zusammenarbeiten.
Deswegen könnte es besser sein, das moderne Anwendungsmodell als Client-Internet-Server-Paradigma zu beschreiben. Es gibt einfach zu viele verschiedene komplexe Kommunikationswege. Sogar sogenannte „intelligente Kommunikationskanäle“ sind entstanden, die selbstständig entscheiden, wem und wann deine Anfrage gesendet wird.
2.2 Clients
Client-Programme lassen sich grob in 4 Kategorien einteilen:
- Desktop-Client — ein Programm, das auf einem Computer läuft.
- Mobile-Client — eine App für iOS oder Android.
- Web-Client — eine Website/Webanwendung, die im Browser läuft.
- Server-Client — eine Anwendung, die auf einem anderen Server läuft.
Und jede von ihnen kann wiederum weiter unterteilt werden. Zum Beispiel, ein Web-Client — das ist eine Website oder Webanwendung, was bedeutet, dass es aus einem Browser und einer Website besteht, die darin geladen wird. Browser sind auch nicht alle gleich und können unterschiedlich arbeiten.
Aber selbst wenn wir den am weitesten verbreiteten Browser nehmen, bleibt immer noch die Website, die darin geladen wird. Eine Website besteht normalerweise aus drei Dingen:
- HTML
- CSS
- JavaScript
"Nichts einfacher als das," sagst du. Nur schreiben heute niemand Websites einfach nur in HTML und JavaScript. Zur Entwicklung von Websites werden jetzt nicht nur Bibliotheken, sondern vollständige Frameworks genutzt, wie React, Angular oder Vue. Und es sind auch nicht mehr nur Websites, sondern vollständige Webanwendungen mit ihren eigenen Builds, Tests und Paradigmen.
Reines CSS wird auch nicht mehr verwendet. Es gibt bereits CSS-Präprozessoren, die bei der Generierung helfen, und ganze CSS-Frameworks. Sogar für E-Mail gibt es spezielle CSS-Frameworks, damit deine Mail sowohl im Browser als auch in den meisten E-Mail-Clients gut aussieht.
Auch mit reinem JavaScript schreibt kaum noch jemand – alle großen Webanwendungen werden in TypeScript erstellt, das dann in JavaScript kompiliert wird. Na, du verstehst schon...
2.3 Internet und Infrastruktur
Die Kommunikation zwischen Client und Server – was könnte einfacher sein? Doch auch in ihren Beziehungen hat sich schon alles geändert.
Dein Produkt wird höchstwahrscheinlich in einem der modernen Rechenzentren platziert. Viele Unternehmen weltweit bieten verschiedene Hosting-Services für deine Produkte an, sei es auf ihren Servern oder auf deinen eigenen physischen Servern. Jeder Wunsch für dein Geld.
Ein physischer Server ist nicht mehr physisch. Alle modernen Rechenzentren bieten die Miete von virtuellen Servern an. Ein virtueller Server ist eine Art virtueller Computer, und auf einem physischen Server können Dutzende von ihnen sein. Aber es ist praktisch in Bezug auf Server-Upgrade. Wenn du mehr Speicher benötigst, kannst du ihn deinem virtuellen Server in wenigen Minuten hinzufügen.
Aber auch dieser Ansatz ist bereits veraltet, jetzt ist der Umzug in die Cloud in Mode – das bedeutet, dass dein Produkt nicht nur auf einem virtuellen Server im Rechenzentrum bereitgestellt wird, sondern aktiv eine große Infrastruktur und eine Vielzahl von Services dieser Rechenzentren nutzt.
Du brauchst einen Server für die Speicherung von Backups – dafür gibt es eine fertige und bequeme Infrastruktur in der Cloud. Du benötigst eine Datenbank mit 99.9999999% Zuverlässigkeit? Die gibt es auch. Kafka, RabbitMQ, NoSQL? Alles schon da und leicht einzurichten. Du musst nur zahlen.
Und diese Rechenzentren und Clouds werden Teil deines Produkts. Zum Beispiel hat Amazon zahlreiche Rechenzentren weltweit, deshalb bieten sie einen CDN-Service an: Dein öffentlicher Inhalt wird in allen Amazon-Rechenzentren zwischengespeichert, und deine Nutzer weltweit werden ihn schneller erhalten.
Oder der Zugriff auf die API deiner Anwendung kann durch den Amazon Gateway API-Service geleitet werden, der eine sehr flexible Konfiguration der Arbeit mit deinen Services ermöglicht. Man kann die Last auf verschiedene Services verteilen, DDoS-Angriffe abwehren, das Hochladen von Dateien automatisieren, intelligentes Caching konfigurieren, und vieles mehr.
Somit entstehen zwischen der Client-Anwendung und deinen Services viele „intelligente Kommunikationen“, die konfiguriert werden können und sollten. Auch wenn du das nie persönlich machen wirst, solltest du wissen, dass sie existieren und einen großen Einfluss auf die Arbeit deines Programms haben können.
Und wir haben noch nicht einmal Themen wie Router, 5G-Masten, Satelliten und Internetkabel auf dem Grund des Ozeans angesprochen. Du sendest einen Video-Stream von deinem Server zu deinem Client, und es kommt zu Störungen, weil der Client eine schlechte Verbindung hat und die Verbindung ständig abbricht. Rate mal, wer dieses Problem lösen wird?
2.4 Server
Unter dem Begriff „Server“ können sich völlig unterschiedliche Konzepte verbergen. Es wird nützlich für dich sein, die häufigsten davon zu kennen.
Physischer ServerEin physischer Server ist Hardware, die einen separaten Computer mit Ressourcen (Prozessor, Speicher, Speicherplatz) darstellt, der zur Datenverarbeitung und zum Betrieb verschiedener Softwareanwendungen verwendet wird. Diese Server werden in Rechenzentren installiert, wo sie Kapazitäten für das Hosting von Websites, Anwendungen, Datenbanken und anderen Diensten bereitstellen.
Virtueller ServerEin virtueller Server ist ein software-emulierter Server, der in einer physischen Serverumgebung läuft. Mithilfe von Virtualisierungstechnologien kann ein physischer Server in mehrere isolierte virtuelle Server aufgeteilt werden, die jeweils ihr eigenes Betriebssystem haben und unabhängig neu gestartet und konfiguriert werden können.
Programm-Server (z. B. Nginx)Ein Programm-Server, wie etwa Nginx, ist ein Server-Softwarepaket, das zur Verarbeitung von Anfragen an Webressourcen eingesetzt wird. Nginx ist als Webserver weit verbreitet, kann aber auch als Mail-Proxy-Server und Reverse-Proxy-Server in Microservices-Architekturen sowie als Load Balancer fungieren.
Datenbank-ServerEin Datenbank-Server ist ein spezialisierter Server, der zur Verwaltung von Datenbanken und zur Verarbeitung von Anfragen an diese verwendet wird. Er bietet zentralisierte Datenspeicherung und -verarbeitung und gewährt Datenzugriff über ein Netzwerk. Datenbank-Server unterstützen die Transaktionsverarbeitung, die Suche und Änderung von Daten und gewährleisten dabei die Zuverlässigkeit und Sicherheit der Informationsspeicherung. Beispiele für Datenbank-Server sind MySQL, PostgreSQL, Oracle Database und Microsoft SQL Server.
Und irgendwo in einem Rechenzentrum wird auf einem der virtuellen Server dein Projekt in Python und Django laufen. Es wird mit der Datenbank arbeiten, Anfragen von NginX erhalten und seine Aktionsprotokolle in Splank senden.
Aber dank deines Codes werden Millionen von Nutzern deines Produkts glücklich sein. Sie werden das Produkt nutzen, dafür zahlen, und in einem solchen Fall wird auch der Besitzer des Produkts glücklich sein. Die Aktien des Unternehmens werden steigen, du wirst Aktien-Boni erhalten und auch glücklich sein. Es ist doch wie ein Kreislauf des Glücks in der Natur :)
GO TO FULL VERSION