Definition

Software-Stack

Ein Software-Stack ist eine Sammlung unabhängiger Komponenten, die zusammenarbeiten, um die Ausführung einer Anwendung zu unterstützen. Die Komponenten, zu denen ein Betriebssystem, Architekturschichten, Protokolle, Laufzeitumgebungen, Datenbanken und Funktionsaufrufe gehören können, sind in einer Hierarchie übereinander gestapelt. In der Regel interagieren die untergeordneten Komponenten in der Hierarchie mit der Hardware, während die übergeordneten Komponenten in der Hierarchie bestimmte Aufgaben und Dienste für den Endbenutzer ausführen. Die Komponenten kommunizieren direkt mit der Anwendung über eine Reihe komplexer Anweisungen, die den Stack durchlaufen.

Abbildung 1: Software-Stacks können vielfältig und komplex sein. In der Regel bauen sie auf Infrastrukturressourcen mit unterstützenden Komponenten wie Bibliotheken und Laufzeiten, Middleware und der Anwendung selbst auf.
Abbildung 1: Software-Stacks können vielfältig und komplex sein. In der Regel bauen sie auf Infrastrukturressourcen mit unterstützenden Komponenten wie Bibliotheken und Laufzeiten, Middleware und der Anwendung selbst auf.

Teile eines Software-Stacks

Software-Stacks können je nach gewünschter Anwendungsfunktionalität einfach oder kompliziert sein und Komponenten und Dienste von unternehmenseigenen Ressourcen, Drittanbietern (zum Beispiel SaaS-Anbietern) oder von einem Cloud-Anbieter enthalten. Es gibt keinen grundlegenden Standard für die Komponenten und Dienste, die in einem Software-Stack enthalten sein müssen, außer dass ihre Merkmale und Funktionen die Entwicklung, Bereitstellung und den Betrieb einer Anwendung unterstützen.

Je nach gewünschter Anwendung könnte es sich dabei um ein Minimum handeln: ein Betriebssystem, eine Datenbank, Tools zur Unterstützung einer Programmiersprache und die Anwendung. Weitere Komponenten, die Teil eines komplizierteren Software-Stacks sein können, sind abstrahierte physische Ressourcen und Virtualisierung, Zeitplanung und Orchestrierung, Datenbanken, Datenverarbeitung, Netzwerke, Sicherheit, Benutzeroberfläche und mehr.

Software-Stack vs. Technologie-Stack

Die einfachste Unterscheidung zwischen einem Software-Stack und einem Technologie-Stack ist bereits in den Namen enthalten. Ein Software-Stack umfasst nur die Software-Komponenten, die für die Ausführung einer Anwendung erforderlich sind, wobei es sich bei einigen Komponenten um Virtualisierung oder abstrahierte physische Hardwareressourcen handeln kann. Ein Technologie-Stack umfasst sowohl Software- als auch Hardwarekomponenten der IT-Infrastruktur.

Ein vollständiger Technologie-Stack umfasst alle Aspekte der IT-Infrastruktur, die für die Bereitstellung und Verwaltung von Anwendungen und Diensten erforderlich sind: Hardware- und Softwarekomponenten, Datenbanken, Middleware, Speicher und Netzwerke. In der modernen Unternehmens-IT macht Software immer mehr von diesen Stacks aus.

Es gibt viele Arten von Technologie-Stacks. Einige sind so aufgebaut, dass sie ein technologisches Produkt oder einen Dienst liefern, während andere einen Geschäftszweck unterstützen. Beispiele hierfür sind:

  • ein Server-Stack, der die Hardware, das Betriebssystem und unterstützende Software wie Laufzeitumgebungen, Datenbanksoftware und Software für verschiedene Webdienste umfasst
  • ein Storage-Stack, zu dem Server und Serversoftware, Virtualisierungs- und Netzwerkkomponenten gehören
  • einen Cloud-Infrastruktur-Stack, der eine abstrahierte Infrastruktur (physische und virtualisierte Hardwareressourcen), eine Plattforminfrastruktur (Anwendungsserver und Datenbanken), Anwendungen und Dienste umfasst. In diesem Stack kann eine breite Palette von granulareren Diensten und Funktionen hinzugefügt werden, wie maschinelles Lernen, Sicherheit und Überwachung
  • ein Marketing-Stack, der eine E-Mail-Plattform, ein Content-Management-System, Software für das Kundenbeziehungsmanagement sowie Analyse- und Tracking-Tools umfasst
Abbildung 2: Dies ist der Technologie-Stack, der das Docker-Container-Hosting-Modell repräsentiert.
Abbildung 2: Dies ist der Technologie-Stack, der das Docker-Container-Hosting-Modell repräsentiert.

Beispiele für Software-Stacks

Viele Software-Stack-Komponenten werden so häufig ausgewählt, dass sie sich durch ihre Namen oder ein Akronym, das ihre Kernkomponenten repräsentiert, eingebürgert haben. Im Folgenden finden Sie einige Beispiele für gängige Software-Stacks in Unternehmen.

LAMP (Linux, Apache, MySQL, PHP): Dies ist ein bekannter Software-Stack für die Webentwicklung. Die unterste Schicht der Stack-Hierarchie ist das Linux-Betriebssystem, das mit dem Apache-Webserver verbunden ist. Die oberste Schicht der Hierarchie ist die Skriptsprache - in diesem Fall PHP. (Das „P“ kann auch für die Programmiersprachen Python oder Perl stehen.) LAMP-Stacks sind beliebt, weil die Komponenten alle quelloffen sind und der Stack auf handelsüblicher Hardware laufen kann. Im Gegensatz zu monolithischen Software-Stacks, die oft eng gekoppelt sind und oft für ein bestimmtes Betriebssystem entwickelt wurden, ist ein LAMP-Stack lose gekoppelt. Das bedeutet einfach, dass die Komponenten zwar ursprünglich nicht für die Zusammenarbeit konzipiert waren, sich aber als komplementär erwiesen haben und häufig zusammen verwendet werden. Heute sind die LAMP-Komponenten in fast allen Linux-Distributionen enthalten. Entwickler können MySQL gegen PostgreSQL austauschen, um einen LAPP-Stack zu erstellen. Ein LEAP-Stack (Linux, Eucalyptus, AppScale, Python) ist eine weitere Variante dieses Open-Source-Software-Stacks für die cloudbasierte Entwicklung und Bereitstellung von Diensten.

MEAN (MongoDB, Express, Angular, Node.js): Dieser Stack von Entwicklungs-Tools hilft dabei, die Sprachbarrieren zu beseitigen, die bei der Softwareentwicklung häufig auftreten. Die Grundlage eines MEAN-Stacks ist MongoDB, ein NoSQL-Datenspeicher für Dokumente. Der HTTP-Server ist Express und Angular ist das Framework für Frontend-JavaScript. Die oberste Schicht des Stacks ist Node, eine Plattform für serverseitiges Scripting. Beachten Sie, dass MEAN nicht auf ein bestimmtes Betriebssystem angewiesen ist, was den Entwicklern mehr Flexibilität bietet; außerdem verwendet es JavaScript, eine allgegenwärtige Programmiersprache. Entwickler können Ember anstelle von Angular verwenden, wodurch ein MEEN-Stack entsteht, oder Vue.js als Frontend-Entwicklungs-Framework in einem MEVN-Stack verwenden.

Apache CloudStack: Große Unternehmenskunden und Service-Provider nutzen diesen Open-Source-Cloud-Management-Stack, um Infrastructure as a Service (IaaS) anzubieten. CloudStack bietet Entwicklern mehrere Schichten von optionalen Diensten sowie Unterstützung für eine Vielzahl von Hypervisoren und Anwendungsprogrammschnittstellen (APIs).

BHCS/BCHS (OpenBSD, C, httpd, SQLite): Diese Sammlung von Open-Source-Tools für Webanwendungen basiert auf dem OpenBSD-Betriebssystem und dem Webserver httpd und ist in der Programmiersprache C geschrieben.

GLASS (GemStone, Linux, Apache, Smalltalk, Seaside): Dieser Stack für die Entwicklung von Webanwendungen verwendet die Programmiersprache Smalltalk, GemStone als Datenbank und Anwendungsserver und Seaside als Web-Framework.

Understanding a Software Stack

Software-Stacks können komplex werden, da Unternehmen zunehmend Container, verteilte Architekturen und Verbindungen zu Cloud-Plattformen und -Diensten nutzen. Das Softwarekonfigurationsmanagement kann zur Stärkung und Standardisierung der Softwareentwicklung, zur Verbesserung der Berichterstattung und des Änderungsmanagements sowie zur Zuweisung von Ressourcen für Entwicklungsprojekte eingesetzt werden.

Vorteile und Herausforderungen von Software-Stacks

Wenn Stack-Komponenten über offene und standardisierte Protokolle und Anwendungsprogrammschnittstellen (API) kommunizieren, werden die Komponenten mit anderen Komponenten, die dieselben APIs verwenden, austauschbar. So kann eine virtuelle Maschine (VM), auf der Linux läuft, auf dem Windows-Betriebssystem laufen und von einem LAMP-Stack zu einem virtuellen WAMP-Stack wechseln. Wenn ein Stack jedoch lose gekoppelt ist, kann es eine Herausforderung sein, die Leistung zu optimieren. Jede Komponente muss einzeln analysiert und abgestimmt werden, was sehr spezielle Fähigkeiten erfordert.

Frontend, Backend und komplette Software-Stacks

In Stellenausschreibungen für Software-Stack-Entwickler wird häufig nach Bewerbern mit Erfahrung in bestimmten Schichten eines bestimmten Software-Stacks gefragt. In einer Stellenausschreibung für einen Frontend-Entwickler werden beispielsweise Kenntnisse in HTML5, Cascading Style Sheets (CSS), Asynchronous JavaScript and XML (AJAX) und JavaScript Object Notation (JSON) verlangt.

Für eine Stelle als Backend-LAMP-Entwickler hingegen sind möglicherweise serverseitige Skripting-Kenntnisse wie PHP erforderlich, aber auch Kenntnisse in objektorientierter Programmierung (OOP), in der Optimierung einer Datenbank für schreibintensive Anwendungen oder in der Erstellung von RESTful-APIs. Zu den Programmiersprachen, die typischerweise in Backend-Software-Stacks verwendet werden, gehören Python, Ruby und C++.

In einer Stellenausschreibung für einen Full-Stack-Entwickler wird in der Regel erwartet, dass der Bewerber für alles verantwortlich ist, vom Patchen des Betriebssystems bis hin zur Umsetzung der Wireframe-Entwürfe eines User-Experience-Teams (UX) in Code. Diese Art von Job kann sehr anspruchsvoll sein, da der Kandidat mit jeder Schicht des Stacks vertraut sein muss.

Diese Definition wurde zuletzt im August 2022 aktualisiert

Erfahren Sie mehr über Data-Center-Betrieb