Sustainable Software Engineering
31.01.2023, 07:34 Uhr
Entwicklung nachhaltiger Software
Die fortschreitende Digitalisierung führt schon heute zu einem Anteil an den weltweiten Treibhausgasemissionen von zwei bis vier Prozent. Dieser Artikel zeigt, welche relevanten Handlungsfelder es in der nachhaltigen Softwareentwicklung gibt.
(Quelle: dotnetpro)
In der Diskussion über nachhaltige Softwareentwicklung wird oft auf Treibhausgasemissionen und den Klimawandel eingegangen. Es ist jedoch wichtig zu verstehen, dass digitale Technologien sowohl positive als auch negative Auswirkungen auf alle Dimensionen der Nachhaltigkeit haben. Der Fokus dieses Artikels liegt auf der ökologischen Nachhaltigkeit von Software, da die Aspekte der sozialen Nachhaltigkeit schwieriger zu quantifizieren sind und Entwickelnde einen größeren Einfluss auf die ökologische Nachhaltigkeit ausüben können.
E-Waste, der am schnellsten wachsende Abfallstrom der Welt
Elektroschrott, also IT-Hardware am Ende ihres Lebenszyklus, hat einen negativen Einfluss auf die Umwelt. In Deutschland entsorgen noch rund zehn Prozent aller Unternehmen ihre alte IT-Hardware im Restmüll. Selbst sachgerecht entsorgte Hardware landet oft auf Müllkippen in anderen Ländern, wo die enthaltenen toxischen Stoffe negative Auswirkungen auf Gesundheit und Umwelt haben.
Im Software Engineering ist die Vermeidung von E-Waste eines der Handlungsfelder mit dem höchsten Wirkungsgrad, da ein wesentlicher Teil der Emissionen durch digitale Lösungen bereits in der Herstellung der nötigen Hardware entstehen. Eine konkrete Maßnahme ist hier etwa die Verlängerung der Hardwarenutzungsdauer, indem Abwärtskompatibilität der Software auf ältere Hardware sichergestellt wird.
Wasserfußabdruck von Rechenzentren
In Deutschland wird nur ein geringer Prozentsatz der Rechenzentren mittels Wasser gekühlt. Global verbrauchen die Kühlsysteme in Rechenzentren jedoch erhebliche Mengen Wasser. Dies liegt daran, dass bei nicht-geschlossenen Wasserkreisläufen während der Kühlung eine beträchtliche Menge Wasser verdampft und freigesetzt wird. Das Wasser geht zwar nicht für immer verloren, ist jedoch am Standort vorerst nicht verfügbar.
Dies führt in betroffenen Regionen zu akutem Wassermangel. Der indirekte Wasserverbrauch trägt ebenfalls zum hohen Wasserfußabdruck von Rechenzentren bei. Die Stromproduktion durch den Einsatz fossilen Brennstoffs erfordert oft den Einsatz von Wasser zum Betrieb von Turbinen oder zur Kühlung.
Da Strom häufig in der Nähe von Rechenzentren erzeugt wird, hat der hohe Stromverbrauch von Rechenzentren einen doppelt negativen Einfluss auf die lokale Verfügbarkeit von Wasser. Innovative Ansätze wie die Versenkung von Rechenzentren in Ozeanen versprechen zwar auf den ersten Blick eine plausible Lösung zu sein, hier bleibt die erzeugte Abwärme jedoch weiter ungenutzt. Zudem ist nicht abschließend geklärt, ob eine zusätzliche Zufuhr von Wärme in die Meere wirklich mit den globalen Nachhaltigkeitszielen vereinbar ist.
Treibhausgasemissionen durch Software
Die weiteren ökologischen Auswirkungen der Stromerzeugung sind naheliegend. Der Großteil des weltweit erzeugten Stroms wird durch den Einsatz von fossilen Energieträgern gewonnen, was zur Emission von CO2 in die Atmosphäre führt und somit den Klimawandel beschleunigt und verstärkt. Um den CO2-Fußabdruck der IT weltweit greifbar zu machen, kann man ihn grob wie folgt darstellen:
Emissionen des IT-Sektors 2019 nach Verursachern (Bild 1)
Quelle: PISRT
Wie entwickelt man nachhaltige Software?
Nachhaltigkeit muss in allen Phasen des Software Engineerings berücksichtigt werden. Dazu gehört die Auswahl von ressourceneffizienten Technologien während der Konzeption und Gestaltung, die Berücksichtigung von Effizienzmaßnahmen während der Entwicklung sowie die Verwendung von ressourcenschonenden DevOps-Prozessen wie nachhaltigen Update-Strategien und Pipelines. Nachhaltigkeit als Anforderung muss zünftig vergleichbar hoch gewichtet werden, wie beispielsweise die Anforderung sichere Software zu entwickeln.
Verschwenden wir zu viel Rechenleistung?
Eine Möglichkeit, um nachhaltige Software zu erreichen, besteht darin, die Verschwendung von Rechenleistung zu minimieren. Dies kann dazu beitragen, Emissionen zu reduzieren, oft ohne die Funktionalität der Systeme nennenswert zu beeinträchtigen. Zusätzlich können dadurch Betriebskosten eingespart werden. In den meisten Organisationen finden sich Systeme, die kaum oder gar nicht genutzt werden, aber dennoch ständig verfügbar sind – nur für den Fall, dass sie doch einmal benötigt werden.
Ähnliches gilt für virtuelle Maschinen, Deployment Pipelines und sonstiges Tooling. Es gibt viele Beispiele für die Verschwendung von Rechenleistung in der Softwareentwicklung, die keinen tatsächlichen Nutzen darstellen. Sie reichen von Sensoren, die mit vielen Dezimalstellen sekündlich messen, über Webseiten, die Inhalte schneller laden als notwendig, bis hin zu Video-Streams, die mehr Frames ausliefern als das menschliche Auge wahrnehmen kann.
Hier können klassische technische Service Level Agreements (SLAs) helfen, indem sie nicht nur Minimalanforderungen an Erreichbarkeit und Reaktionszeit definieren, sondern auch Maximalanforderungen festschreibeen. So lassen sich Systeme ressourcenschonend verfügbar machen und betreiben.
Was bedeutet Carbon Awareness?
Carbon Awareness bezieht sich auf die Anpassung des Verhaltens von Systemen an die CO2-Intensität im Stromnetz. Aufgrund der Fluktuation von Wind und Sonne werden immer unterschiedliche Mengen erneuerbarer Energien in das Stromnetz eingespeist. Wenn viel erneuerbare Energie verfügbar ist, ist die CO2-Intensität, also die Menge an CO2-Emissionen pro Kilowattstunde Strom, geringer als bei bewölktem Himmel und Flaute. Es gibt zwei Strategien, um diesen Mechanismus zu nutzen: Time Shifting und Location Shifting, gelegentlich auch unter temporal und geographic migration zu finden.
Time Shifting – intelligentes Scheduling
Beim Time Shifting können Strommarkt- und Wetterdaten genutzt werden, um ressourcenintensive Prozesse wie Backups, Synchronisationen oder das Re-Training von Machine-Learning-Modellen dann auszuführen, wenn die CO2-Intensität im lokalen Stromnetz gering ist. Statt etwa Cron Jobs auf feste Zeiten zu schedulen, kann so die Nachhaltigkeit als Kriterium für die Ausführung von Batch Jobs herhalten. Dieser Mechanismus kann auf viele zeitunkritische Prozesse außerhalb des reinen Software Engineerings angewendet werden, wie das Laden eines Elektroautos oder den Versand von transaktionalen E-Mails. Oft führt bereits eine Verschiebung um wenige Stunden zu einer Reduktion der Emissionen um zweistellige Prozentzahlen.
Location Shifting – follow wind and sun
Wenn Jobs zeitkritisch sind und daher nicht für das Time Shifting in Frage kommen, kann es sich lohnen, sie direkt in anderen Regionen auszuführen. Durch Location Shifting werden Rechenzentren mit geringerer CO2-Intensität stärker ausgelastet. Dies ermöglicht das Verlegen von komplexen Berechnungen in Regionen mit anderem Energiemix.
Wenn die beteiligte Infrastruktur an Glasfaser angeschlossen ist, sind die Energiekosten für die Übertragung zudem gering. Es sollte jedoch beachtet werden, dass diese Strategie in erster Linie für Jobs geeignet ist, die keine umfangreichen Daten für die Bearbeitung benötigen. Die Übertragung von hochauflösenden Videos zum Rendering an einen anderen Ort würde beispielsweise deutlich mehr Netzwerklast – und damit Ressourcenverbrauch - verursachen als die Übertragung von Zahlen für eine Matrix-Multiplikation. Transkontinental ist das Location Shifting aus Datenschutzgründen häufig noch etwas herausfordernder, aber selbst die Verlagerung über innereuropäische Ländergrenzen oder gar innerhalb der vier Höchstspannungsnetze in Deutschland versprechen bereits relevante Reduktionen der CO2-Emissionen.
Ist die Cloud die Lösung?
In der Debatte über digitale Nachhaltigkeit wird Cloud Computing von vielen als die ultimative Lösung verkauft, da alle großen Cloud-Computing-Anbieter mit ihrer Klimaneutralität werben. Es wird jedoch oft ignoriert, dass auch Cloud-Rechenzentren Strom verbrauchen und damit CO2 emittieren. Die Klimaneutralität wird in der Regel durch Power Purchase Agreements (PPAs) für erneuerbare Energien und CO2-Zertifikate erreicht, wodurch lediglich eine rechnerische Neutralität entsteht.
Trotz dieser Kritik bietet Cloud Computing jedoch Potenziale für Nachhaltigkeit. Cloud-Rechenzentren sind in der Regel energieeffizienter, bieten eine bessere Auslastung und ermöglichen durch Cloud Native Solutions die effiziente Bereitstellung digitaler Lösungen auf verfügbarer Hardware. Allerdings büßt man beim Schritt in die Cloud aktuell noch viel Transparenz ein, da die Provider unterschiedlich granular und nicht standardisiert reporten.
Muss Software noch effizienter werden?
Im Software Engineering wurde insbesondere mit Blick auf die früher begrenzten Rechenkapazitäten und Mobile Computing bereits viel erreicht, um die Effizienz zu verbessern. Eine oft diskutierte Maßnahme im Bereich des nachhaltigen Software Engineering ist die Auswahl energieeffizienter Programmiersprachen, bei denen Unterschiede von bis zu einem Faktor von 80 möglich sind. Allerdings ist es in der Regel nicht wirtschaftlich tragfähig, eine bestehende Programmiersprache in einem System komplett zu ändern.
Eine geeignete Alternative könnte sein, ressourcenintensive Komponenten in bestehenden Systemen zu optimieren oder bei Neuentwicklungen auf energieeffizientere Sprachen wie Go zu setzen. Effizienzsteigerungen sind jedoch selten ohne Trade-offs möglich. Ein Beispiel hierfür ist der sogenannte Rebound-Effekt, der sich gut anhand von Netzwerkinfrastruktur illustrieren lässt. In den letzten Jahren wurden sowohl drahtlose als auch kabelgebundene Netzwerktechnologien um mehrere Größenordnungen energieeffizienter, wie diese Grafik zeigt.
Emissionen nach Netzwerktechnologien (Bild 2)
Quelle: Umweltbundesamt
Die Implementierung von neuen Technologien kann zu erheblichen Verbesserungen der Effizienz bei gleichbleibender Leistung führen. Diese Technologien bieten aber auch neue Einsatzmöglichkeiten und erleichtern, verbilligen oder beschleunigen die Nutzung bestehender Anwendungen. Infolgedessen werden diese effizienteren Technologien in größerem Ausmaß genutzt, was insgesamt zu mehr Emissionen im Vergleich zur vorherigen Technologie führt. Der Rebound-Effekt ist in folgender Abbildung vereinfacht dargestellt:
Rebound-Effekt bei Netzwerktechnologien [Bol et al. 2021] (Bild 3)
Quelle: IEEExplore
Wie soll es weiter gehen?
IT hat zwar einen nicht zu vernachlässigen Einfluss auf den weltweiten CO2-Footprint, ist jedoch im Vergleich zu globalen Emissionen nicht unter den Top 5 der größten Herausforderungen. Es ist gleichwohl dringend notwendig, Emissionen in der IT-Branche zu reduzieren und es wird in diesem Bereich noch immer zu wenig unternommen. Dennoch bieten digitale Nachhaltigkeitsinnovationen vor allem die Möglichkeit, einen wesentlichen Beitrag zur Erreichung globaler Nachhaltigkeitsziele zu leisten.
Laut dem European Green Deal der EU sind „digitale Technologien ein wesentlicher Wegbereiter für Nachhaltigkeit“. Entwickelnde können abseits der reinen Entwicklung möglicherweise eine noch größere Wirkung erzielen, indem sie ihr Talent und ihre Erfahrung für Anwendungsfälle einsetzen, die zur Erreichung von Nachhaltigkeitszielen beitragen, anstatt Anwendungsfälle zu unterstützen, die netto negativ für die Nachhaltigkeit sind.
In diesem Beitrag wurden Handlungsfelder für nachhaltige Softwareentwicklung wie die Reduktion von Rechenleistungsverschwendung, Carbon Awareness und Effizienzsteigerung untersucht. Es gibt jedoch auch andere relevante Handlungsfelder im Software Engineering, die den Nachhaltigkeitsaspekt von Systemen beeinflussen. Zu Beginn, in der Konzept- und Designphase, müssen digitale Lösungen durch den sparsamen Einsatz von Ressourcen gestaltet werden. Auch das Benutzerinterface kann eine Rolle bei der Nachhaltigkeit des Systems spielen, zum Beispiel durch eine reduzierte Retourenquote in einem Online-Shop.
Nach der Entwicklung spielt der Betrieb des Systems ebenfalls eine wichtige Rolle. Dazu gehören die Wahl des Hosting-Standorts, Deployment-Pipelines, Regressionstests und Updatestrategien während der Laufzeit des Systems. Es gibt also noch viel zu entdecken im weiten Feld des Sustainable Software Engineering.
Quelle: Yelle Lieder