WAF++ WAF++
Back to WAF++ Homepage

WAF-SUS-070 – Sustainable Software Design Standards

Beschreibung

Software MUSS mit Energie-Effizienz als explizitem Qualitätsmerkmal entworfen werden. Architecture Decision Records MÜSSEN Energie-Effizienz-Überlegungen enthalten. Event-Driven-Patterns MÜSSEN für asynchrone Kommunikation bevorzugt werden. Dependencies MÜSSEN auf Effizienz und Notwendigkeit geprüft werden. SCI (Software Carbon Intensity) SOLLTE für Tier-1-Services gemessen werden. Cloud-Run- und Lambda-Dienste SOLLEN auf Scale-to-Zero konfiguriert sein.

Rationale

Software-Design-Entscheidungen haben multiplikativen Einfluss auf Energieverbrauch. Ein ineffizienter Algorithmus auf effizienter Hardware verbraucht immer noch unnötig viel Energie. Polling-Patterns generieren konstante API-Aufrufe ohne proportionalen Mehrwert. Große Dependency-Trees erhöhen Cold-Start-Energie und Speicherverbrauch. Die Green Software Foundation SCI-Formel macht Software-Effizienz messbar und vergleichbar. Scale-to-Zero bei serverlosen Diensten vermeidet Idle-Compute komplett.

Bedrohungskontext

Risiko Beschreibung

Ineffiziente Algorithmen

O(n²)-Algorithmen verbrauchen bei 10.000 Elementen 750× mehr CPU als O(n log n) — direkte Emissionsmultiplikation.

Polling-Pattern

Konstante API-Abfragen statt Event-Trigger erzeugen thousands unnötiger Requests pro Stunde.

Bloated Dependencies

Lambda-Funktionen mit 200MB-Deployment-Package haben 5× höhere Cold-Start-Energie als schlanke 20MB-Packages.

Microservice-Proliferation

50 Services für was 5 leisten könnten: 10× mehr Netzwerk-Overhead, Service-Discovery-Load, Health-Check-Calls.

Fehlende SCI-Messung

Ohne SCI-Metrik können Software-Effizienz-Verbesserungen nicht quantifiziert oder als Ziel gesetzt werden.

Anforderung

  • ADR-Template MUSS Energie-Effizienz und SCI-Betrachtung als Abschnitt enthalten

  • Asynchrone Kommunikation MUSS Event-Driven-Patterns (SQS, EventBridge, Pub/Sub) nutzen

  • Dependencies MÜSSEN eine Größen- und Effizienz-Review erhalten vor Aufnahme

  • SCI SOLL für alle Tier-1-Services mindestens jährlich gemessen werden

  • Container-Images SOLLEN Distroless- oder Alpine-Base-Images nutzen (Größenbudget < 500MB)

  • SQS Event Source Mappings MÜSSEN maximum_batching_window_in_seconds >= 5 haben

Implementierungsanleitung

  1. ADR erweitern: Energie-Effizienz-Sektion: "Wie wurde SCI betrachtet? Welche Alternativen wurden bezüglich Effizienz bewertet?"

  2. Event-Driven Policy: Polling-Patterns identifizieren und durch SQS/EventBridge/SNS ersetzen

  3. Dependency-Review-Prozess: Neue Dependencies prüfen auf Größe, Aktivität, Effizienz; Alpine/Distroless-Images

  4. SCI-Messung: Energie aus CloudWatch-Metriken + Carbon Intensity der Region + Functional Units

  5. SQS Batching: batch_size = 100 + maximum_batching_window_in_seconds = 30 für alle SQS-Lambda-Trigger

  6. Scale-to-Zero: Cloud Run min_instance_count = 0; Lambda hat Scale-to-Zero by default

Reifegrad-Abstufung

Level Bezeichnung Kriterien

1

Keine Effizienz-Betrachtung

Nur funktionale Anforderungen; Polling-Patterns überall; keine Dependency-Hygiene.

2

Awareness in Code-Review

Effizienz wird gelegentlich im Review erwähnt; kein formaler Prozess.

3

ADR-Requirement + Event-Driven

ADR-Pflicht mit Energie-Sektion; Event-Driven für Async; Dependency-Review; SCI für Tier-1 jährlich.

4

SCI als Engineering-Metrik

SCI monatlich getrackt; Energie-Effizienz in Definition of Done; N+1 automatisch detektiert.

5

SCI-OKR + Continuous Improvement

SCI-Verbesserung als OKR; automatische SCI-Regression-Alerts im CI; Energy-Profiling in Dev-Workflow.

Terraform Checks

waf-sus-070.tf.aws.sqs-not-polling

Prüft: SQS-Lambda Event Source Mappings nutzen Batching (Long Polling).

Compliant Non-Compliant
resource "aws_lambda_event_source_mapping" "sqs" {
  event_source_arn                   = aws_sqs_queue.events.arn
  function_name                      = aws_lambda_function.processor.arn
  batch_size                         = 100
  maximum_batching_window_in_seconds = 30
  function_response_types            = ["ReportBatchItemFailures"]
}
resource "aws_lambda_event_source_mapping" "sqs" {
  event_source_arn = aws_sqs_queue.events.arn
  function_name    = aws_lambda_function.processor.arn
  batch_size       = 1
  # WAF-SUS-070 Warning: batch_size=1, kein Batching-Window
}

Remediation: batch_size = 100 und maximum_batching_window_in_seconds = 30 setzen. Reduziert Invocations um bis zu 99% bei hochvolumigen Queues.


waf-sus-070.tf.google.cloud-run-min-instances

Prüft: GCP Cloud Run Services können auf Zero skalieren.

Compliant Non-Compliant
resource "google_cloud_run_v2_service" "api" {
  name     = "api-service"
  location = "europe-north1"
  template {
    scaling {
      min_instance_count = 0
      max_instance_count = 10
    }
  }
}
resource "google_cloud_run_v2_service" "api" {
  name     = "api-service"
  location = "us-east1"
  template {
    scaling {
      min_instance_count = 5
      # WAF-SUS-070 Warning: immer 5 Instanzen; kein Zero-Scale
    }
  }
}

Remediation: min_instance_count = 0 für alle nicht-produktiven Services; für Produktion mit Cold-Start-SLA dokumentieren, warum min > 0 erforderlich ist.

Evidenz

Typ Pflicht Beschreibung

Governance

✅ Pflicht

ADR-Template oder Architecture-Review-Checkliste mit Energie-Effizienz / SCI-Betrachtung.

Config

Optional

Container-Image-Size-Reports (Distroless/Alpine-Compliance).

Process

Optional

SCI-Measurement-Report für Tier-1-Services mit Baseline und Trend.

Governance

Optional

Dependency-Review-Policy und Audit-Log.