cmg-ws2024525-demo/doc/README.md

6.5 KiB

Green Compute Load Shifting (GCLS)

Use Cases

use cases

Building Blocks

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

jobs-worker-cip

Cross Cutting Concerns

Aspect Owner
Observability Team 1
DevOps Team 2
Security Team 3
Communication Resilience Team 4