Carbon Aware Computing mit Hangfire - Jobs klimafreundlich planen und ausführen

Für eine nachhaltigere Softwareentwicklung braucht es nicht immer große Veränderungen – manchmal reichen ein paar Zeilen Code. Mit dem Prinzip des Time-Shifting lassen sich Jobs so planen, dass sie zu Zeiten mit besonders hohem Anteil erneuerbarer Energien im Stromnetz ausgeführt werden. Die von bluehands entwickelte Bibliothek Hangfire.Community.CarbonAwareExecution macht genau das möglich – einfach, effizient und CO₂-bewusst.

· 3 Min Lesezeit · Aydin Mir Mohammadi
Symbolbild zum Thema Carbon Aware Computing durch Time Shifting

Was ist Hangfire?

Hangfire ist eine etablierte .NET-Bibliothek zur Ausführung von Jobs. Ein „Job“ ist dabei einfach ein Stück Code, das zu einem bestimmten Zeitpunkt oder wiederholt ausgeführt wird – etwa über einen sogenannten Cron-Schedule.

Die Integration ist denkbar einfach:

  • Hangfire wird als NuGet-Paket eingebunden.
  • Die Anwendung kann als Agent oder Client für die Ausführung von Jobs fungieren.
  • Dank synchronisierter Persistenz funktioniert das auch verteilt über mehrere Prozesse hinweg.

Was macht die Hangfire.Community.CarbonAwareExecution?

Das Paket basiert auf dem Projekt www.carbon-aware-computing.com und nutzt CO₂-Prognosen für die nächsten 24 bis 48 Stunden an einem bestimmten Ort. Diese Prognosen, basierend auf Daten des Fraunhofer Instituts für Solare Energiesysteme (ISE), ermöglichen es, Jobs so zu timen, dass sie bei möglichst niedriger CO₂-Intensität des Stromnetzes ausgeführt werden.

So funktioniert die Umsetzung

  • Beim Einplanen eines Jobs wird der früheste und späteste Ausführungszeitpunkt sowie eine geschätzte Ausführungsdauer angegeben.
  • Innerhalb dieses Fensters wird der optimale Zeitpunkt mit der geringsten CO₂-Intensität ermittelt.
  • Ist keine Prognose verfügbar oder der optimale Zeitpunkt schon überschritten, wird der Job sofort ausgeführt.
  • Andernfalls wird der Job automatisch auf den besseren Zeitpunkt verschoben.

Das funktioniert für sofortige Ausführung, geplante Ausführung sowie für wiederkehrende Jobs.

Und so geht die Integration in die eigene Anwendung

Die Integration ist unkompliziert. In der Startup.cs oder beim Service-Setup genügt folgender Code:

builder.Services.AddHangfire(configuration => configuration

    .UseCarbonAwareExecution(

        new CarbonAwareDataProviderOpenData(), // Datenquelle für CO₂-Prognosen

        ComputingLocations.Germany             // Standort für die Prognose

    )

);

Wird beim Aufruf einer Job-Methode ein Parameter vom Typ CarbonAwareExecution übergeben, wird der Job automatisch CO₂-optimiert eingeplant. Jobs ohne diesen Parameter bleiben davon unberührt.

Eine Beispielanwendung zur Veranschaulichung gibt es hier: https://github.com/bluehands/Hangfire.Community.CarbonAwareExecution

Technischer Hintergrund: So funktioniert das Time-Shifting

Hangfire verwendet eine interne Zustandsmaschine für Jobs:

Created → Enqueued → Processing → Succeeded/Failed

Das Paket nutzt den Erweiterungspunkt IElectStateFilter, um beim Übergang in den Enqueued-Zustand zu prüfen, ob ein besserer Zeitpunkt innerhalb des erlaubten Fensters existiert. Falls ja, wird der Job in den Scheduled-Zustand mit neuem Ausführungszeitpunkt versetzt.

Der Vorteil besteht darin, dass die Entscheidung so spät wie möglich erfolgt – mit den bestmöglichen Prognosedaten. Bei wiederkehrenden Jobs wird zusätzlich geprüft, ob sich die Definition des Jobs geändert hat oder ob er gelöscht wurde – nur dann wird der verschobene Job ausgeführt.

Fazit

Mit Hangfire.Community.CarbonAwareExecution wird nachhaltige Softwareentwicklung mit minimalem Aufwand möglich. Und wer bereits Hangfire nutzt, kann mit wenigen Anpassungen einen echten Beitrag zu Green Software Developmentleisten.

Happy Time-Shifting!

Möchten Sie mehr über Timeshifting, Hangfire oder Green Software Development erfahren, dann nehmen Sie gerne Kontakt mit uns auf.