Green IT: Technische Umsetzung nachhaltiger Software

31.01.2023

Heutzutage „erkaufen“ wir uns Performance zunehmend mit besserer Hardware, anstatt effiziente Software zu schreiben. Dieser Trend wirkt sich negativ auf die Nachhaltigkeit der Softwareindustrie aus. Daher stellt sich die Frage, was wir von technischer Seite tun können, um Softwareentwicklung nachhaltiger zu gestalten.

Was verstehen wir unter ineffizienter Software?

Um die Effizienz unserer Software zu steigern, müssen wir zuerst wissen, in welcher Weise unsere Software überhaupt ineffizient sein kann. Allgemein hängt die Effizienz mit der Auslastung der Hardware zusammen, auf der die Software ausgeführt wird. Je höher die CPU-Auslastung und der RAM-Verbrauch sind, desto mehr Energie wird benötigt. Es gilt hier also die CPU-Auslastung und den RAM-Verbrauch, der durch unsere Software verursacht wird, zu minimieren.

Auf der anderen Seite gilt es die Hardware so effizient wie möglich nutzen. Steigert man die Last von 10% auf 40%, also um das 4-Fache, steigt der Energieverbrauch lediglich um das 1,7-Fache [1]. Aus diesem Grund ist es sinnvoll die Hardware ausgelastet zu halten, denn auch im Leerlauf wird Energie verbraucht.
Die zwei Punkte klingen zuerst wie ein Widerspruch. Das Ganze macht aber Sinn, wenn man das Ziel zusammenfasst: Es sollen so viele Prozesse wie möglich, auf so wenig Hardware wie möglich laufen.

Last-reduzierende Architektur

Hohe Last bringt man meist mit der Ausführung komplexer Algorithmen oder dem Verarbeiten großer Mengen an Daten in Verbindung. Gerade bei der Arbeit mit Datenbanken kann die Last reduziert werden, indem z.B. Connections, deren Erzeugung viel Last erzeugt, wiederverwendet werden. Zudem lohnt es sich Gedanken zu machen, welche Daten benötigt werden, anstatt aus Einfachheit einfach alle Daten abzufragen. Werden Ressourcen oder Daten nicht mehr verwendet, ist es wichtig diese korrekt aufzuräumen, um den RAM wieder freizugeben.

Neben der Optimierung innerhalb der Software, spielt die Architektur der Software heutzutage eine immer größere Rolle. Teilt man seine Software in Microservices auf, skaliert diese deutlich einfacher. Bei hohem Traffic hat man dann die Möglichkeit, schnell einzelne Komponenten hochzufahren. Sinkt die Anzahl der Anfragen wieder, lassen sich die Instanzen genauso schnell wieder aufräumen. Betrachtet man dagegen eine monolithische Architektur, ist dort im Vergleich nicht nur die Startzeit langsamer. Auch die erzeugte Last ist deutlich höher, da potentiell Komponenten mit hochgefahren werden, die im Moment gar nicht gebraucht werden.
Betrachtet man den ganzen Lebenszyklus einer Software merkt man schnell, dass der Aspekt der Einsparung von Ressourcen viel früher beginnt. Die Softwarekomponenten durchlaufen täglich verschiedene Build-Pipelines, die den Code kompilieren, testen und analysieren. Dementsprechend gibt es hier Einsparpotential. Beispielweise kann man Prozesse wie statische Codeanalysen, deren Ergebnis nicht direkt verfügbar sein muss, nur nächtlich ausführen. Ebenso hilft die Umstellung von Triggern für Build-Prozesse dabei, die Gesamtanzahl der Builds zu verringern. Nach erfolgreichem Durchlauf einer Pipeline wird die Anwendung oft direkt in verschiedenen Stages installiert. Da diese meist keine hohe Verfügbarkeit voraussetzen, lassen sich auch hier Ressourcen sparen. Die Verringerung der Anzahl der Instanzen ist ebenso eine Option, wie das nächtliche Herunterfahren von Komponenten.

Die Cloud als Schlüssel?

Fasst man die oben genannten Punkte zusammen, kommt man schnell darauf, dass die Verwendung von Cloud-Infrastruktur eine große Hilfe ist. Neben der Möglichkeit Services automatisch zu skalieren, unterstützen Cloud-Anbieter wie Amazon, Google oder Microsoft auch mit weiteren Features bei der Ressourceneinsparung. Neben der Einsparung im Sinne der Nachhaltigkeit, spart man hier zudem Kosten. Denn man bezahlt nur so viel, wie man auch verwendet.

Die großen Cloud-Anbieter werben mittlerweile selbst mit der Nachhaltigkeit ihrer Produkte. So wird die Infrastruktur meist fast zu 100% mit erneuerbarer Energie betrieben. In vorgefertigten Dashboards bekommt man zudem einen Überblick, wieviel Ressourcen man durch die Cloud-Nutzung, gegenüber konventionellen Rechenzentren, eingespart hat [2][3][4].

 

Fazit: Einsparpotentialen aktiv im Blick behalten

Der Energieverbrauch der IT-Branche ist bereits heute riesig und wird über die nächsten Jahre weiter zunehmen. Dementsprechend ist es umso wichtiger, sich Einsparpotentiale bewusst zu machen und diese umzusetzen. Mit dem Green Software Development Manifesto und der dahinterstehenden Community, hat jeder Entwickler die Möglichkeit sich aktiv in den Veränderungsprozess einzubringen.

 

Mehr über GreenIT erfahren

 

Quellen

[1] https://devblogs.microsoft.com/sustainable-software/sustainable-software-engineering-sse-and-the-role-and-responsibilities-of-a-sustainable-software-engineer/
[2] https://aws.amazon.com/de/about-aws/whats-new/2022/03/aws-launches-customer-carbon-footprint-tool/
[3] https://azure.microsoft.com/de-de/blog/microsoft-sustainability-calculator-helps-enterprises-analyze-the-carbon-emissions-of-their-it-infrastructure/
[4] https://cloud.google.com/carbon-footprint

Zurück zur Übersicht

Kommentar verfassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

*Pflichtfelder

*