5 Wege zu einer nachhaltigeren Software-Architektur
Von Markus Eisele*
Wenn Unternehmen sich ernsthaft mit ökologischer Nachhaltigkeit beschäftigen, reicht es nicht aus, nur die Geschäftsreisen zu reduzieren oder im Büro entsprechende Maßnahmen umzusetzen. Auch die Software hat einen großen Einfluss darauf, wie viele CO₂-Emissionen anfallen. Kernstück einer nachhaltigen Architektur ist dabei immer die Verringerung des Ressourcenverbrauchs. In der IT geht es darum, den Energiebedarf – die größte Stellschraube in diesem Zusammenhang – deutlich zu reduzieren. Immerhin werden anstatt sauberer Stromquellen nach wie vor oft günstigere fossile Brennstoffe genutzt. Die Branche arbeitet bereits mit Hochdruck daran, die Umweltbilanz bei der Herstellung und dem Betrieb zu verbessern. Bei den Hyperscalern beispielsweise hat Azure 2020 seinen Leitfaden für nachhaltige Architektur veröffentlicht, Ende 2021 hat AWS den Punkt Sustainability zu den Säulen seines Well-Architected Framework hinzugefügt.
Natürlich sollten beziehungsweise müssen sich auch die Kunden Gedanken darüber machen, welche Auswirkungen ihre IT-Infrastruktur – allen voran die Software-Architektur – auf die globale Erwärmung und den Klimawandel hat und mit welchen Maßnahmen sie die CO₂-Bilanz verbessern können. Dafür gibt es fünf Bereiche:
- Datendesign, -nutzung und -speicherung
Zunächst einmal sollten Unternehmen die Datenspeicherung und -nutzung auf ein absolutes Minimum reduzieren. Erreichen lässt sich dieses Ziel, indem Richtlinien für die Datenklassifizierung eingeführt werden. Dabei wird festgelegt, welche Daten wie lange und wofür gespeichert werden. Zudem sollten Unternehmen Zugriffsklassen und Speichertypen nach „schnell“ oder „langsam“ definieren. Wichtig ist, zu verstehen, welche Auswirkungen ein Zuviel an Daten auf den Ressourcenverbrauch hat. Unnötige Daten sollten immer unter Einhaltung der Bestimmungen gelöscht werden. Unternehmen sollten zudem eine Überprovisionierung an Speicherplatz vermeiden und Datenbewegungen über Netzwerkgrenzen hinweg so weit wie möglich einschränken. Sinnvoll sind Technologien für den Zugriff, die einen standortbezogenen Datenabruf und unterschiedliche Speichermuster unterstützen.
- Anwendungsdesign
Im zweiten Schritt sollten Unternehmen Richtlinien für die Verwendung von Komponenten definieren. Ein „Always on“-Ansatz verbraucht unnötig Energie. Zudem sollten sie darauf achten, dass eine parallele und asynchrone Verarbeitung der Ressourcen möglich ist. Aufgaben, die nicht zeitkritisch sind, lassen sich aufteilen und dann asynchron abarbeiten. Dann können Workloads zum Beispiel zu einem Zeitpunkt, an dem genügend sauberer und günstiger Strom zur Verfügung steht, ausgeführt werden. Darüber hinaus helfen Komponenten zum Application-Monitoring, Runtime und Auswirkungen auf die Nachhaltigkeit zu verfolgen. Wo möglich, ist es außerdem sinnvoll, die Verantwortung an besser geeignete, weil nachhaltig betriebene, Managed Services auszulagern.
- Plattformbereitstellung, -nutzung und -skalierung
Das Thema Deployment, Nutzung und Skalierung ist kompliziert, da es einige dedizierte Entscheidungen bezüglich der Architektur voraussetzt. Technologien, die auf Auslastung und Skalierung abzielen, wie Knative und Serverless, kommen einem dabei in den Sinn. Eine gängige Kubernetes-Umgebung arbeitet häufig nach dem Prinzip „ein Cluster pro App“, manchmal auch „mehrere Cluster (Staging/Prod/Dev) pro App“. Die Auslastung in diesen Clustern ist allerdings gering. Das heißt, selbst wenn ein Pod auf Null skaliert, haben Unternehmen immer noch einen Overhead an Kubernetes, inklusive CO2-Fußabdruck der kompletten Hardware. Zwar ist der Stromverbrauch des Workloads geringer, die Verbesserung der Klimabilanz ist jedoch marginal. Unternehmen müssen deshalb unbedingt ihre Gesamtkonfiguration genau unter die Lupe nehmen, bevor sie zusätzliche Technologien für eine Anwendung anschaffen. Idealerweise kommt für die Entwicklung und den Test eine Minimalumgebung mit repräsentativen Applikationen zum Einsatz. Zusätzlich ist es sinnvoll, das Design mit Automatisierungsansätzen zu optimieren und damit die Nutzung zu maximieren.
Technologien mit Burst-Möglichkeiten bieten einen weiteren großen Vorteil. Ein Beispiel ist ein Standard-Jenkins mit definierten Worker- und Management-Knoten im Vergleich zu einer skalierbaren Tekton-Build-Pipeline. Außerdem sollten Unternehmen die Verwendung spezieller Hardware für ihre Workloads in Betracht ziehen. Dieser Ansatz ist auf Fließkommaeinheiten und Grafikverarbeitung (FPU/GPU) sowie Compute-intensive Berechnungen ausgelegt, kann aber schnell auf Instanzen erweitert werden, die für bestimmte Arbeitslasten geeignet sind.
- Code-Effizienz
Die Green Software Foundation bringt es treffend auf den Punkt: „Der effizienteste Code ist gar kein Code. Und der beste Zeitpunkt, um unnötige Workloads zu erkennen, ist so früh wie möglich im Designprozess.“ Unternehmen, die Ziele und Anforderungen entspannt definieren, erreichen viel. Das betrifft beispielsweise eine Änderung der Aufbewahrungszeit von Protokolldateien oder die Anpassung der Service Level Agreements (SLAs) an den tatsächlichen Bedarf. Selbst wenn regulatorische Vorgaben verschärfte Anforderungen bedeuten, sollten Unternehmen die Maßnahmen hinterfragen und notwendige Schritte identifizieren. Die Vorstellung, dass eine bestimmte Programmiersprache Vorteile in puncto Nachhaltigkeit verschafft, ist jedoch mehr oder weniger falsch. Das zeigt eine Studie aus 2017, die im letzten Jahr aktualisiert wurde.
- Operations
Die hohe Rechendichte von verwalteten Cloud-Diensten ist ein grundlegender Vorteil. Solche Services teilen sich die Ressourcen mit Tausenden oder sogar Millionen von Nutzern, wodurch eine extrem hohe Auslastung erreicht wird und der Aufwand für SRE (Site Reliability Engineering)-Teams, die sich um den Betrieb von Infrastruktur und Anwendungen kümmern, verringert wird.
Darüber hinaus gibt es eine wachsende Zahl von Open-Source-Projekten, die Unternehmen helfen, ihre Nachhaltigkeitsziele zu erreichen:
- Kube-green ist ein Kubernetes-Add-on, das Ressourcen automatisch herunterfährt, wenn sie nicht benötigt
- Cloud Carbon Footprint ist ein Tool zur Schätzung des Energieverbrauchs und der CO2-Emissionen bei der Nutzung einer Public Cloud.
- Scaphandre ist ein Metering-Agent, um den Stromverbrauch jedes Prozesses zu berechnen.
Kube-downscaler fährt Kubernetes-Workloads während der arbeitsfreien Zeit herunter oder „pausiert“ sie komplett. - Kepler (Kubernetes Efficient Power Level Exporter) verwendet eBPF, um energiebezogene Systemstatistiken zu ermitteln und als Prometheus-Metriken zu exportieren.
Jede Einsparung zählt
Viele der Empfehlungen lassen sich in erster Linie in bestimmten Umgebungen anwenden, einschließlich ereignisgesteuerter oder Microservices-Architekturen. Aber auch traditionelle Three-tier-Modelle profitieren von kleinen Änderungen. Darüber hinaus ist jede Maßnahme nur dann wirkungsvoll, wenn man vorab die Ziele definiert und die Wirkung mit sinnvollen Messmetriken überprüft. Unternehmen können beispielsweise als langfristiges Nachhaltigkeitsziel für jeden Cloud-Workload eine Reduzierung der erforderlichen Rechen- und Speicherressourcen festlegen. Grundsätzlich gilt: Jede Einsparung bei den Ressourcen und damit dem Stromverbrauch verbessert die CO2-Bilanz.
* Markus Eisele (@myfear) ist Developer Strategist bei Red Hat