, , ,

Ansätze für nachhaltige Softwareentwicklung in Large-Scale Systems

Hai Vu

Einleitung

Der Klimawandel ist in den letzten Jahren weltweit zu einer großen Herausforderung geworden. Der Ausstoß von Treibhausgasen ist nach wie vor hoch. Nach Angaben des Umweltbundesamtes gehen die CO2-Emissionen in Deutschland zwar kontinuierlich zurück, weltweit ist der Trend jedoch weiterhin steigend, so dass die globalen Kohlendioxidemissionen kontinuierlich zunehmen [1]. Aufgrund der Corona-Pandemie konnte zwar ein deutlicher Rückgang der Emissionen in den Vorjahren verzeichnet werden, dennoch steigen die Zahlen wieder an [2]. Sollte es in Zukunft nicht gelingen, den hohen Energieverbrauch und den Ausstoß von CO2 nachhaltig zu reduzieren, muss mit Umweltkatastrophen gerechnet werden. In Zeiten der Digitalisierung, spielt auch die Softwareentwicklung eine große Rolle beim Thema Umweltschutz. Die Auswirkungen der IT auf die Umwelt haben in den letzten Jahrzehnten durch die Zunahme der Digitalisierung zugenommen. Digitalisierung und innovative Technologien sollen CO2-Emissionen reduzieren. Riesige Rechenzentren, Datenzentren und IT-Infrastrukturen sowie große Datenmengen benötigen jedoch viel Energie. Der Energiebedarf in diesem Sektor ist in den letzten Jahren stark angestiegen.

Abbildung 1: Energiebedarf von Rechenzentren in Europa pro Jahr (Quelle: https://www.borderstep.de/2020/11/30/deutlicher-anstieg-des-energiebedarfs-der-rechenzentren-im-jahr-2020/)

Die wachsende Zahl von Nutzern und die Nachfrage nach umfangreichen Inhalten (Cloud-Computing und Big-Data-Anwendungen, soziale Netzwerke und Foto-Sharing, Video Streaming auf Abruf usw.) erfordern enorme Bandbreiten, sowie Rechen- bzw. Speicherkapazitäten. Distributed Large-Scale Systems werden daher immer leistungsfähiger und größer. Large-Scale Systems, also softwareintensive Systeme und high-performance Computing Cluster mit einer enormen Menge an Hardware, Quellcodezeilen, Benutzerzahlen und Datenmengen haben daher ebenfalls einen Einfluss auf den CO2-Fußabdruck. Large-Scale Systeme benötigen oft eine große Menge an Energie für die Stromversorgung und Kühlung von Servern, Netzwerkausrüstung und Speichergeräten. Schätzungen zufolge benötigt das Internet durchschnittlich 240 GW Energie [3], was etwa 12,6% der weltweit erzeugten elektrischen Energie entspricht.

Moderne Technologien, sowie verbesserte Hardware, Software und Rechenzentruminfrastrukturen werden zwar immer effizienter, dennoch ist es nicht gelungen, den Anstieg im Energiebedarf zu senken. Um dem entgegenzuwirken gibt es verschiedene Möglichkeiten. Durch grüne und nachhaltige IT (Green IT) und Green Coding können Energieeinsparungen erzielt werden.

“Green IT is the study and practice of designing, manufacturing, using, and disposing of computers, servers, and associated subsystems (such as monitors, printers, storage devices, and networking and communications systems) efficiently and effectively with minimal or no impact on the environment” [4].

Software alleine verbraucht zwar weder Energie, noch stößt sie Emissionen aus, doch das Problem ist, wie die Software entwickelt wird. Es gibt hier verschiedene Techniken, um effizientere und performantere Software zu entwickeln und auch Möglichkeiten Large-Scale Systems nachhaltig zu entwerfen.

Softwareentwicklung und ihre Auswirkungen auf die Umwelt

Beim Menschen denkt man zunächst, dass der größte CO2-Ausstoß durch die Atmung erfolgt. Das ist etwa 1 kg pro Tag. Tatsächlich produziert ein Mensch aber ca. 30 kg CO2 pro Tag, z.B. durch Essen, Reisen und die Nutzung elektronischer Geräte [5]. Der Anteil der digitalen Aktivitäten beträgt 4% der gesamten CO2-Emissionen. Im Jahr 2040 wird dieser Anteil voraussichtlich 14% betragen [6]. Ein Laptop, der an 200 Arbeitstagen täglich acht Stunden in Betrieb ist, verursacht einen jährlichen CO2-Ausstoß von 88 kg. 80% des Datenverkehrs im Netz ist auf Videostreaming zurückzuführen. Netflix gibt z.B. an, dass eine Stunde Video-Streaming einen CO2-Ausstoß von 100 Gramm pro Nutzer verursacht.

Hier muss man den immensen Skalierungsfaktor mitberücksichtigen, so muss dieser Wert auch auf Millionen von Nutzern hochgerechnet werden. Wenn ein Netflix-Entwickler in der Lage wäre, den CO2-Ausstoß pro Stunde um einige wenige Gramm zu reduzieren, könnte eine deutliche Reduktion der Emissionen erzielt werden. Es gibt Best Practices für Entwickler und IT-Architekten, die zu Green Coding beitragen.

Green Coding bedeutet, Software effizienter zu gestalten, um den Energieverbrauch und damit auch die CO2-Emissionen zu reduzieren [7].

Effiziente Softwaretechniken

Allgemein gilt es, Best Practices einzuhalten, um sauberen und effizienteren Code zu schreiben. Code, der für Leistung und Ressourcennutzung optimiert ist, kann dazu beitragen, den Energie- und Stromverbrauch von Software zu senken. Es gibt verschiedene Techniken [8][9].

  • CPU: Ein Ziel ist es, den Verbrauch der CPU zu senken. Dies kann unter anderem mit Hilfe von effizienten mathematischen Operationen (in Bezug auf ihre Zeitkomplexität) erreicht werden. Berechnete Ergebnisse können wiederverwendet werden und bedingte Verzweigungen, wenn möglich reduzieren.
  • Memory: In Bezug auf Memory sollte man eher lokale Variablen, statt globaler Variablen verwenden und wenn möglich die Codegröße verringern.
  • Loops: Optimierungsmethoden verwenden wie z.B. Loop Unrolling, um die Laufzeit eines Programms zu beschleunigen. Mehrere Loops sollten, wenn möglich zusammengeführt werden.
  • Optimale Algorithmen: Im Allgemeinen kann jede Strategie, die die Laufzeit eines Algorithmus verkürzt, hilfreich sein zur Reduzierung des Energieverbrauchs. Die Komplexität des Algorithmus lässt sich in Form der Big O-Notationen berechnen. Algorithmen, die eine lineare Komplexität aufweisen, sind energiebewusster als solche mit exponentieller Komplexität.
  • Effiziente Datenstrukturen: Wie z.B. Linked Lists. Datenstrukturen haben erhebliche Auswirkungen auf die Ausführung eines Programms und die Energieeinsparung.
  • Multithreading: Schnellere Berechnungen durch Parallelisierung ermöglichen.
  • Event-Driven Architectures: Anstatt Request Driven, die oft viele Anfragen haben, sollten eventgetriebene Architekturen bevorzugt werden. Das Ziel ist es die Zahl der Serveranfragen auf ein Mindestmaß zu reduzieren.
  • Caching: Zwischenspeicherungen von Anfragen auf dem Client durch Caching kann dazu beitragen, unnötige Round-Trips innerhalb eines Netzwerks, sowie teure und energieintensive Zugriffe auf Festplatten oder Datenbanken zu vermeiden.
  • Effiziente Programmiersprachen: Einige Programmiersprachen sind effizienter als andere – Die Auswahl der Programmiersprache hat ebenfalls Einfluss auf den Energieverbrauch.
Abbildung 2: Vergleich einiger Programmiersprachen in Bezug auf Energieeffizienz (Quelle: Illustration by Kasper Groes Albin Ludvigsen. Source: Source: Pereira, R. et al. (2017))

Ein Vergleich zeigt, dass die Programmiersprache C in Bezug auf Energie am effizienten abschneidet. Python hingegen verbraucht ca. 70x mehr Energie als C. Die Auswahl einer effizienten Programmiersprache kann somit einen Teil zur Reduzierung des CO2-Fußabdrucks beitragen.

Abbildung 3: Energieverbrauch verschiedener Programmiersprachen (Quelle: https://alanstorm.com/the-thing-about-that-energy-efficiency-of-programming-languages-table/)

Cloud Computing und Nachhaltigkeit

Cloud Computing hat in den letzten Jahren stark an Popularität gewonnen. Ein Cluster aus mehreren Computern mit geringer Kapazität ist in der Regel kosten- und leistungsmäßig günstiger als ein einzelner Hochleistungscomputer, da ein Hochleistungscomputer seine Ressourcen nicht voll ausnutzt und daher mehr Energie verbraucht. Verteilte Systeme oder Cloud Computing können zu einer Leistungssteigerung bei gleichzeitiger Energieeinsparung führen.

Laut einer Studie von Microsoft, Accenture und WSP-Environment & Energy können große Unternehmen durch die Verlagerung ihrer Anwendungen in die Cloud den Energieverbrauch und die Kohlendioxidemissionen um 30% oder mehr senken (im Vergleich zu On-Premise) [10]. Bei kleineren Unternehmen sind es sogar bis zu 90%. Auf den ersten Blick scheint Cloud Computing wegen der riesigen Rechenzentren und des enormen Energieverbrauchs wenig mit Nachhaltigkeit zu tun zu haben. Tatsächlich sind sie aber umweltfreundlicher als On-Premise-Lösungen [11].

  • Höhere Nutzungsrate: Um eventuelle Ausfallzeiten zu vermeiden, setzen Unternehmen traditionell viel mehr Server ein (Redundanz), als sie tatsächlich benötigen. Als Folge, haben die Rechenzentren vor Ort eine extrem niedrige Auslastungsrate und nutzen im Durchschnitt nur 15% ihrer Kapazität.
  • Umstellung auf erneuerbare Energien: Viele Cloud-Anbieter haben in erheblichem Umfang in erneuerbare Energiequellen wie Wind- und Solarenergie investiert. So soll AWS bereits mehr als 50% erneuerbare Energie nutzen. Indem sie ihre Rechenzentren mit erneuerbarer Energie versorgen, können Cloud-Anbieter ihre Kohlenstoffemissionen erheblich reduzieren. Google hat bereits im Jahr 2007 den gesamten CO2-Ausstoß kompensiert, den sie verursacht hat.
  • Skaleneffekte (Economies of Scale): Cloud-Anbieter betreiben riesige Rechenzentren, die auf Energieeffizienz optimiert sind, z. B. durch den Einsatz moderner Kühltechnologien und energieeffizienter Hardware. Diese großen Rechenzentren profitieren vom sogenannten Skaleneffekt, die es ihnen ermöglichen, eine höhere Energieeffizienz zu erreichen als kleinere, vor Ort betriebene Rechenzentren.
  • Geringere Hardwareverschwendung: Durch die Nutzung gemeinsam genutzter Rechenressourcen, kann Cloud-Computing dabei helfen, die Menge der für eine bestimmte Arbeitslast erforderlichen Hardware reduzieren. Dies kann dazu beitragen, die Menge an elektronischem Abfall zu verringern.

Green Computing für Large-Scale Systems

Die Verringerung des Energieverbrauchs kann zur Verringerung der Umweltbelastung beitragen. Neben effizienten Techniken in der Softwareentwicklung kann auch ein hardwarebasierter Ansatz den Stromverbrauch senken, indem alte, ineffiziente Hardware durch neuere, energieeffizientere Alternativen ersetzt wird. Problematisch sind jedoch die erheblichen finanziellen Kosten, die mit der Aufrüstung der Hardware verbunden sind.

Ein Ziel ist es, unter anderem Data Centers so zu gestalten, dass sie möglichst energieeffizient und nachhaltig sind. Dabei können verschiedene Bereiche optimiert werden, wie z.B. der Einsatz von erneuerbaren Energien, die Verbesserung der Energieeffizienz durch bessere Kühlung und Luftstrommanagement, Virtualisierung und Konsolidierung von Servern.

Abbildung 4: Bereiche, in denen der Energieverbrauch von Rechenzentren reduziert werden kann

Nachfolgend sind einige Optimierungsmethoden, die für Large-Scale Systems angewandt werden können [12].

  • Load Balancing: Indem die Arbeitslast auf verschiedene Server verteilt wird, kann der Energieverbrauch jedes Servers optimiert werden. Der Lastausgleich kann dazu beitragen, eine Überbeanspruchung von Ressourcen zu verhindern, die zu einem höheren Energieverbrauch und Kohlendioxidausstoß führen kann.
  • Parallel Processing: Die Parallelverarbeitung kann dazu beitragen, die Zeit zu verkürzen, die für die Ausführung einer Aufgabe benötigt wird, was zu einem geringeren Energieverbrauch und geringeren Kohlendioxidemissionen führen kann. Durch die Aufteilung großer Aufgaben in kleinere Aufgaben und deren parallele Verarbeitung kann der Zeit- und Energieaufwand für die Ausführung der Aufgabe verringert werden.
  • Virtualisierung: Technologien zur Virtualisierung können dazu beitragen, die Ressourcennutzung zu optimieren und die Anzahl der physischen Server zu verringern, die für den Betrieb eines großen Systems erforderlich sind. Durch die Konsolidierung mehrerer Anwendungen auf einem einzigen Server kann die Virtualisierung zur Senkung des Energieverbrauchs und der Kohlendioxidemissionen beitragen.
  • Automatisierte Skalierung: Die automatische Skalierung ermöglicht es, ein System entsprechend der aktuellen Nachfrage zu vergrößern oder zu verkleinern. Dies kann zur Senkung des Energieverbrauchs und der Kohlendioxidemissionen beitragen, da nur die benötigten Ressourcen genutzt werden.
  • Effizientes Datenbank Designing: Durch die Optimierung des Datenbankdesigns kann der Energiebedarf für die Speicherung und den Abruf von Daten gesenkt werden. Dies kann durch die Verwendung effizienter Datenstrukturen, die Minimierung der Anzahl von Abfragen und die Zwischenspeicherung von Daten erreicht werden.
  • Monitoring und Analyse: Durch das Monitoring der Leistung eines Systems und die Analyse der Daten können Bereiche ermittelt werden, in denen der Energieverbrauch und die Kohlendioxidemissionen reduziert werden können. Dies kann bei Entscheidungen über die Optimierung und Ressourcenzuweisung helfen.
  • Erneuerbare Energien: Auch das ist ein wichtiger Punkt. Wie bei den meisten Cloud-Anbietern, kann der Einsatz erneuerbarer Energiequellen wie Sonnen-, Wind- oder Wasserkraft zur Versorgung der Rechenzentren und anderer Infrastrukturkomponenten den CO2-Fußabdruck verringern.
  • Nachhaltige Softwareentwicklungspraktiken: Wie bereits im oberen Abschnitt erwähnt, können effiziente Softwaretechniken zur Förderung der Nachhaltigkeit führen. Auch die Verwendung umweltfreundlicher Materialien für Hardwarekomponenten und die Minimierung von Abfall können zu einer nachhaltigeren Entwicklung beitragen.
  • Verwendung von Cloud-Computing: Es gibt viele quelloffene Software- und Hardware Ressourcen, die von verschiedenen Anbietern als Service zur Verfügung gestellt werden. Die Verwendung dieser vorgefertigten Ressourcen in Programmen ist vorteilhaft in Bezug auf Energiekosten und Zeit. Cloud-Computing bietet zudem eine bedarfsgerechte Skalierbarkeit, die es Large-Scale Systemen ermöglicht, ihre Rechenressourcen je nach Bedarf schnell und einfach nach oben oder unten zu skalieren.

Durch Verwendung dieser Methoden, können Large-Scale Systems ihren Energieverbrauch und ihren ökologischen Fußabdruck verringern.

Fazit

Zusammenfassend lässt sich sagen, dass nachhaltige Softwareentwicklung ein wichtiger Aspekt im Kampf gegen den Klimawandel und zur Reduzierung der CO2-Emissionen ist. Während die Digitalisierung oft als Lösung zur Verringerung des CO2-Fußabdrucks angesehen wird, ist es entscheidend, den Energieverbrauch und die CO2-Emissionen zu berücksichtigen, die mit Large-Scale Systemen und IT-Infrastrukturen verbunden sind. Green IT und Green Coding sind dabei Ansätze, die dazu beitragen können, die Umweltauswirkungen der Softwareentwicklung zu verringern. Oft sind es kleine Maßnahmen die in der Summe den Unterschied bringen.

Effiziente Softwaretechniken, wie die Optimierung des Codes im Hinblick auf Leistung und Ressourcennutzung, können den Energieverbrauch und die CO2-Emissionen senken. Außerdem kann die Optimierung von Systemarchitekturen und Large-Scale Systems durch Load Balancing und Parallelverarbeitung den Energieverbrauch senken und die Nachhaltigkeit verbessern. Dabei können effiziente Softwaretechniken, sowie die Erweiterung in die Cloud, als Basis dienen. Jedoch muss man auch hier beachten, dass durch die horizontale Skalierung auch mehr Komponenten benötigt werden, die ebenfalls teuer in der Beschaffung sind

Des Weiteren sind moderne Technologien und effizientere Hardware ebenfalls gute Optionen, die jedoch oft mit höheren Kosten verbunden sind. Hier müssen Unternehmen entscheiden wie sie vorgehen möchten. Investieren sie in die Nachhaltigkeit und leisten damit einen Beitrag für grüne IT oder wollen sie diesen Aspekt ignorieren, um Kosten einzusparen? Vor dieser Herausforderung stehen viele Unternehmen. Darüber hinaus stellen die eingeschränkte Verfügbarkeit bestimmter wichtiger Ressourcen, das Fehlen der notwendigen Infrastruktur und Vorschriften weitere potenzielle Einschränkungen dar.

Damit Energieeinsparungen aber wirklich effizient durchgeführt werden kann, muss detailiertes Energiemonitoring betrieben werden. Dieser Bereich wird oft noch vernachlässigt, da er meist mit einem Mehraufwand verbunden ist. Hier bleibt abzuwarten, wie die großen Cloud Anbieter in Zukunft die Sache angehen werden.

Eines ist aber sicher: Jeder, auch wir, die in der IT-Welt arbeiten, können einen (wenn auch kleinen) Beitrag zur Nachhaltigkeit leisten. Bereits mit kleinen Veränderungen kann man seinen persönlichen CO2Fußabdruck verkleinern.

Quellen

[1] Statista Research Department, CO2-Emissionen weltweit in den Jahren 1960 bis 2021, 11.11.2022 [online] https://de.statista.com/statistik/daten/studie/37187/umfrage/der-weltweite-co2-ausstoss-seit-1751/ [abgerufen am: 14.02.2023]

[2] Umweltbundestamt, Kohlendioxid-Emissionen, 21.03.2022 [online] https://www.umweltbundesamt.de/daten/klima/treibhausgas-emissionen-in-deutschland/kohlendioxid-emissionen#herkunft-und-minderung-von-kohlendioxid-emissionen [abgerufen am: 14.02.2023]

[3] Raghavan B, Ma J. The energy and emergy of the Internet. Proceedings of the 10th ACM
Workshop on Hot Topics in Networks (HotNets-X); 2011 Nov; Cambridge (MA); 2011.

[4] Murugesan, S. 2010. Making IT Green. IT Professional, IEEE Computer Society, 12, 2, 4–5.

[5] Gasgag, Wie viel CO2 produziert ein Mensch, 14.02.2022 [online] https://www.gasag.de/magazin/nachhaltig/co2-ausstoss-mensch [abgerufen am: 14.02.2023]

[6] Sanjay Podder, Adam Burden, Shalabh Kumar Singh, and Regina Maruca, How Green Is Your Software? 18.09.2020 [online] https://hbr.org/2020/09/how-green-is-your-software [abgerufen am: 13.02.2023]

[7] Ernst & Munsch UG (haftungsbeschränkt), Green Coding: Nachhaltige Software durch CO2-Reduktion, 22.12.2022 [online] https://www.presseportal.de/pm/164270/5400500 [abgerufen am: 14.02.2023]

[8] Gabor Meißner, Aller Anfang ist schwer: Ansätze für Green Software-Engineering, 04.01.2022 [online] https://www.adesso.de/de/news/blog/aller-anfang-ist-schwer-ansaetze-fuer-green-software-engineering.jsp [abgerufen am: 13.02.2023]

[9] Naik K (2010) A Survey of Software Based Energy Saving Methodologies for Handheld Wireless Communication Devices. Tech. Report No. 2010-13. Dept. of ECE, University of Waterloo

[10] Gina Roos, Cloud Computing Can Cut Carbon Emissions by 30% to 90%, 05.11.2010 [online] https://www.environmentalleader.com/2010/11/cloud-computing-can-cut-carbon-emissions-per-user-by-30/ [abgerufen am: 13.02.2023]

[11] Nitin Singh Chauhan, Ashutosh Saxena. A Green Software Development Life Cycle for Cloud Computing. 1 (2013). https://condor.dpu.depaul.edu/yhwang1/Articles_KHU/article_8.pdf

[12] Fakhar, F., Javed, B., ur Rasool, R. et al. Software level green computing for large scale systems. J Cloud Comp 1, 4 (2012). https://doi.org/10.1186/2192-113X-1-4

Comments

Leave a Reply