Green Compute Load Shifting (GCLS)
Use Cases
Building Blocks
Building Block |
Type |
Purpose |
Owner |
GCLS Worker Daemon |
CLI |
Provide computing capacity to platform; Execution of jobs |
Team 1 |
Worker Gateway |
Microservice |
Provides unified API for the GCLS Worker Daemon |
Team 1 |
Worker Registry |
Microservice |
Holds Status of Worker Daemons |
Team 1 |
GCLS Consumer CLI |
CLI |
Place compute jobs; Receive Job Status/Results |
Team 2 |
Consumer Gateway |
Microservice |
Provides unified API for the GCLS Consumer CLI |
Team 2 |
Job |
Microservice |
Manages the status of Jobs |
Team 3 |
User Management |
Microservice |
Manages Users |
Team 3 |
Job Scheduler |
Microservice |
Schedules Jobs |
Team 4 |
Carbon Intensity Provider |
Microservice |
Provides Carbon Intensity |
Team 4 |
Approved Packages
Runtime Scenarios
Run Compute Job
sequenceDiagram
participant worker as GCLS Worker Daemon
participant gateway as Worker Gateway
participant registry as Worker Registry
participant job as Job
loop every 5s
worker->>gateway: UpdateStatus(worker)
activate gateway
gateway->>registry: UpdateStatus(worker)
activate registry
registry-->>gateway: 200 OK
deactivate registry
gateway-->>worker: 200 OK
deactivate gateway
end
loop
worker->>gateway: GetJob(worker)
activate gateway
gateway->>job: GetJob(worker)
activate job
job-->>gateway: Job
deactivate job
gateway-->>worker: Job
deactivate gateway
worker->>worker: SetStatus("EXHAUSTED")
worker->>worker: Execute(job)
worker->>gateway: Update(job)
activate gateway
gateway->>job: Update(job)
activate job
job-->>gateway: 200 OK
deactivate job
gateway-->>worker: 200 OK
deactivate gateway
worker->>worker: SetStatus("REQUIRES_WORK")
end
Create Compute Job
sequenceDiagram
actor ComputeConsumer as Compute Consumer
ComputeConsumer ->> GCLS_CLI : Job anlegen mit Job-Definition
note right of GCLS_CLI: Annahme: Der User ist bereits registriert
GCLS_CLI ->> GCLS_CLI : JWT aus Speicher lesen
alt Gültiger JWT vorhanden
GCLS_CLI ->> ConsumerGateway : POST /jobs (+ JWT)
ConsumerGateway ->> ConsumerGateway : Validiere JWT
alt JWT gültig
ConsumerGateway ->> Job : POST /jobs (+ JWT)
alt Job und JWT gültig
Job -->> ConsumerGateway : Job gültig und angelegt
ConsumerGateway -->> GCLS_CLI : Job gültig und angelegt
GCLS_CLI -->> ComputeConsumer : Job erfolgreich angelegt
else Job ungültig
Job -->> ConsumerGateway : Job ungültig
ConsumerGateway -->> GCLS_CLI : Job ungültig
GCLS_CLI -->> ComputeConsumer : Fehlernachricht "ungültiger Job"
else JWT ungültig
Job -->> ConsumerGateway : JWT ungültig
ConsumerGateway -->> GCLS_CLI : JWT ungültig
GCLS_CLI -->> ComputeConsumer : Fehlernachricht "nicht authentifiziert"
end
else JWT ungültig
ConsumerGateway -->> GCLS_CLI : JWT ungültig
GCLS_CLI -->> ComputeConsumer : Fehlernachricht "nicht authentifiziert"
end
else JWT nicht vorhanden oder abgelaufen
GCLS_CLI -->> ComputeConsumer : Fehlernachricht "nicht authentifiziert"
end
Login
sequenceDiagram
actor ComputeConsumer as Compute Consumer
ComputeConsumer ->> GCLS_CLI: Anmelden mit Nutzername + Passwort
GCLS_CLI ->> ConsumerGateway: POST /login
ConsumerGateway ->> UserManagement: POST /login
alt Zugangsdaten gültig und Anfrage authentifiziert
UserManagement -->> ConsumerGateway: JWT
ConsumerGateway -->> GCLS_CLI: JWT
GCLS_CLI ->> GCLS_CLI: JWT sicher speichern
GCLS_CLI -->> ComputeConsumer: Erfolgreich angemeldet
else Zugangsdaten ungültig
UserManagement -->> ConsumerGateway: ungültige Zugangsdaten
ConsumerGateway -->> GCLS_CLI: ungültige Zugangsdaten
GCLS_CLI -->> ComputeConsumer: Fehlernachricht "ungültige Zugangsdaten"
else Anfrage (über basic auth) nicht authentifiziert
UserManagement -->> ConsumerGateway: Anfrage über basic auth nicht authentifiziert
ConsumerGateway -->> GCLS_CLI: interner Fehler
GCLS_CLI -->> ComputeConsumer: Fehlernachricht "interner Fehler"
end
Get Job Statistics
sequenceDiagram
actor Consumer
note right of Consumer: Annahme: Der User ist bereits eingeloggt
note right of GCLS_CLI: Annahme: Dauerhafte Netzwerk- und Endpoint-Erreichbarkeit
Consumer ->> GCLS_CLI: Request Job statistics
alt Gültiger JWT vorhanden
GCLS_CLI ->> Consumer-Gateway : POST /jobs (+ JWT)
Consumer-Gateway ->> Consumer-Gateway : Validiere JWT
alt JWT gültig
Consumer-Gateway ->> Job : POST /jobs (+ JWT)
alt Job und JWT gültig
Job -->> Job: Retrieve statistics from database
alt Database success
Job -->> Consumer-Gateway : Return job statistics
Consumer-Gateway -->> GCLS_CLI : Return job statistics
GCLS_CLI -->> Consumer : Return job statistics
else Database error
Job -->> Consumer-Gateway : Retrieving failed
Consumer-Gateway -->> GCLS_CLI : Retrieving failed
GCLS_CLI -->> Consumer : Fehlernachricht "Datenbankfehler"
end
else JWT ungültig
Job -->> Consumer-Gateway : JWT ungültig
Consumer-Gateway -->> GCLS_CLI : JWT ungültig
GCLS_CLI -->> Consumer : Fehlernachricht "nicht authentifiziert"
end
else JWT ungültig vom Consumer-Gateway
Consumer-Gateway -->> GCLS_CLI : JWT ungültig
GCLS_CLI -->> Consumer : Fehlernachricht "nicht authentifiziert"
end
end
Schedule Job
Cross Cutting Concerns
Aspect |
Owner |
Observability |
Team 1 |
DevOps |
Team 2 |
Security |
Team 3 |
Communication Resilience |
Team 4 |