Documentation

**XXL System 2 — Orchestration Platform** (distributed job runner • workers • scheduler • config • metrics • logging)

Back to documentation index
# **XXL System 2 — Orchestration Platform**  (distributed job runner • workers • scheduler • config • metrics • logging)

System 2 is a **full distributed orchestration platform**, the kind you'd use to run:

- background jobs  
- scheduled tasks  
- pipelines  
- worker pools  
- metrics + logging  
- configuration management  
- distributed execution  

This is a *complete system*, just like System 1 — but focused on **orchestration instead of security**.

We proceed **step-by-step**, exactly like before.

---

# **Step 1 — Architecture Map (XXL Orchestration Platform)**

This is the top-level structure of the entire system:

### **1. Job Model**
- job definitions  
- job metadata  
- job parameters  
- job results  
- job status  

### **2. Scheduler**
- cron-like scheduling  
- interval scheduling  
- delayed jobs  
- recurring jobs  

### **3. Worker Pool**
- worker registration  
- worker assignment  
- worker health  
- worker load balancing  

### **4. Dispatcher**
- job → worker routing  
- retry logic  
- backoff  
- cancellation  

### **5. Execution Engine**
- job execution  
- job sandbox  
- job lifecycle  
- job logging  

### **6. Metrics**
- job metrics  
- worker metrics  
- system metrics  
- time-series counters  

### **7. Logging**
- structured logs  
- job logs  
- worker logs  
- system logs  

### **8. Configuration**
- global config  
- worker config  
- job config  
- dynamic reload  

### **9. API Layer**
- submit job  
- query job  
- cancel job  
- list workers  
- list schedules  

### **10. System Orchestrator**
- start scheduler  
- start workers  
- start dispatcher  
- start API  
- start metrics  
- start logging  
- unified MAIN  

---

# **Step 2 — Core Types & Shared Primitives**

Here is the foundation for the entire XXL Orchestration Platform.

```nxd
MODULE orch.types

TYPE RESULT UNION { OK(any), ERR(string) }
TYPE OPTION UNION { SOME(any), NONE }

TYPE TIMESTAMP int

TYPE JOB {
    ID: string,
    NAME: string,
    PARAMS: MAP<string,string>,
    STATUS: string,
    CREATED: TIMESTAMP,
    UPDATED: TIMESTAMP
}

TYPE JOB_RESULT {
    JOB_ID: string,
    OUTPUT: string,
    SUCCESS: bool,
    TS: TIMESTAMP
}

TYPE WORKER {
    ID: string,
    NAME: string,
    LOAD: int,
    LAST_HEARTBEAT: TIMESTAMP
}

TYPE SCHEDULE {
    NAME: string,
    JOB_NAME: string,
    INTERVAL: int,
    LAST_RUN: TIMESTAMP
}

TYPE CHANNEL_JOB CHANNEL<JOB>
TYPE CHANNEL_RESULT CHANNEL<JOB_RESULT>
TYPE CHANNEL_WORKER CHANNEL<WORKER>
TYPE CHANNEL_STRING CHANNEL<string>
```

---

# **Step 3 — Shared Utilities**

```nxd
MODULE orch.util

FUNC NOW(): TIMESTAMP:
    RETURN CURRENT_TIME()

FUNC LOG(MSG: string):
    PRINTLN("[LOG] " ADD MSG)

FUNC ERR(MSG: string):
    PRINTLN("[ERR] " ADD MSG)

FUNC GEN_ID(PREFIX: string): string:
    RETURN PREFIX ADD "-" ADD RANDOM_STRING(8)
```

---

# **Step 4 — Shared Storage**

```nxd
MODULE orch.store
IMPORT orch.types
IMPORT orch.util

LET JOBS SET MAP<string, JOB> {}
LET RESULTS SET LIST<JOB_RESULT> []
LET WORKERS SET MAP<string, WORKER> {}
LET SCHEDULES SET LIST<SCHEDULE> []

FUNC ADD_JOB(J: JOB):
    JOBS[J.ID] SET J
    LOG("job stored: " ADD J.ID)

FUNC UPDATE_JOB(J: JOB):
    JOBS[J.ID] SET J

FUNC ADD_RESULT(R: JOB_RESULT):
    PUSH RESULTS, R
    LOG("result stored: " ADD R.JOB_ID)

FUNC ADD_WORKER(W: WORKER):
    WORKERS[W.ID] SET W
    LOG("worker registered: " ADD W.ID)

FUNC UPDATE_WORKER(W: WORKER):
    WORKERS[W.ID] SET W

FUNC ADD_SCHEDULE(S: SCHEDULE):
    PUSH SCHEDULES, S
    LOG("schedule added: " ADD S.NAME)
```

---

# **Step 5 — Messaging Backbone**

```nxd
MODULE orch.bus
IMPORT orch.types
IMPORT orch.util

TYPE TOPIC {
    NAME: string,
    SUBS: LIST<CHANNEL<any>>
}

LET TOPICS SET MAP<string, TOPIC> {}

FUNC CREATE_TOPIC(NAME: string):
    TOPICS[NAME] SET TOPIC { NAME: NAME, SUBS: [] }

FUNC SUBSCRIBE(NAME: string, CH: CHANNEL<any>):
    PUSH TOPICS[NAME].SUBS, CH

FUNC PUBLISH(NAME: string, MSG: any):
    LOOP CH IN TOPICS[NAME].SUBS:
        SEND MSG TO CH
```

---

# **Step 6 — Scheduler (XXL‑Scale)**

```nxd
MODULE orch.scheduler
IMPORT orch.types
IMPORT orch.util
IMPORT orch.store
IMPORT orch.bus

FUNC RUN_SCHEDULER():
    LOOP:
        LOOP S IN SCHEDULES:
            LET NOWTS SET NOW()
            IF NOWTS SUB S.LAST_RUN GE S.INTERVAL:
                LET J SET JOB {
                    ID: GEN_ID("job"),
                    NAME: S.JOB_NAME,
                    PARAMS: {},
                    STATUS: "queued",
                    CREATED: NOWTS,
                    UPDATED: NOWTS
                }
                ADD_JOB(J)
                PUBLISH("jobs", J)
                S.LAST_RUN SET NOWTS
        SLEEP(1)
```

---

# **Step 7 — Worker Pool**

```nxd
MODULE orch.workers
IMPORT orch.types
IMPORT orch.util
IMPORT orch.store
IMPORT orch.bus

FUNC REGISTER_WORKER(NAME: string):
    LET W SET WORKER {
        ID: GEN_ID("worker"),
        NAME: NAME,
        LOAD: 0,
        LAST_HEARTBEAT: NOW()
    }
    ADD_WORKER(W)
    RETURN W

FUNC HEARTBEAT(W: WORKER):
    W.LAST_HEARTBEAT SET NOW()
    UPDATE_WORKER(W)
```

---

# **Step 8 — Dispatcher**

```nxd
MODULE orch.dispatcher
IMPORT orch.types
IMPORT orch.util
IMPORT orch.store
IMPORT orch.bus

FUNC PICK_WORKER(): OPTION:
    LET BEST SET NONE
    LOOP K IN KEYS(WORKERS):
        LET W SET WORKERS[K]
        IF BEST IS NONE OR W.LOAD LT BEST.LOAD:
            BEST SET SOME(W)
    RETURN BEST

FUNC DISPATCH():
    LET CH SET CHANNEL_JOB()
    SUBSCRIBE("jobs", CH)

    LOOP:
        LET J SET RECV CH

        MATCH PICK_WORKER():
            CASE SOME(W):
                W.LOAD SET W.LOAD ADD 1
                UPDATE_WORKER(W)
                PUBLISH(W.ID, J)
                LOG("dispatched job " ADD J.ID ADD " to " ADD W.ID)
            CASE NONE:
                LOG("no workers available")
```

---

# **Step 9 — Execution Engine**

```nxd
MODULE orch.exec
IMPORT orch.types
IMPORT orch.util
IMPORT orch.store
IMPORT orch.bus

FUNC WORKER_LOOP(W: WORKER):
    LET CH SET CHANNEL_JOB()
    SUBSCRIBE(W.ID, CH)

    LOOP:
        LET J SET RECV CH
        LOG("worker " ADD W.ID ADD " executing " ADD J.ID)

        # simulate execution
        SLEEP(2)

        LET R SET JOB_RESULT {
            JOB_ID: J.ID,
            OUTPUT: "completed",
            SUCCESS: true,
            TS: NOW()
        }

        ADD_RESULT(R)
        PUBLISH("results", R)

        J.STATUS SET "done"
        J.UPDATED SET NOW()
        UPDATE_JOB(J)

        W.LOAD SET W.LOAD SUB 1
        UPDATE_WORKER(W)
```

---

# **Step 10 — API Layer**

```nxd
MODULE orch.api
IMPORT orch.types
IMPORT orch.util
IMPORT orch.store
IMPORT orch.bus

FUNC SUBMIT_JOB(NAME: string): string:
    LET J SET JOB {
        ID: GEN_ID("job"),
        NAME: NAME,
        PARAMS: {},
        STATUS: "queued",
        CREATED: NOW(),
        UPDATED: NOW()
    }
    ADD_JOB(J)
    PUBLISH("jobs", J)
    RETURN J.ID

FUNC QUERY_JOB(ID: string): string:
    IF JOBS HAS ID:
        RETURN JOBS[ID].STATUS
    RETURN "not found"
```

---

# **Step 11 — System Orchestrator**

```nxd
MODULE orch.system
IMPORT orch.util
IMPORT orch.bus
IMPORT orch.scheduler
IMPORT orch.workers
IMPORT orch.dispatcher
IMPORT orch.exec
IMPORT orch.api

FUNC START():
    CREATE_TOPIC("jobs")
    CREATE_TOPIC("results")

    LET W1 SET REGISTER_WORKER("alpha")
    LET W2 SET REGISTER_WORKER("beta")

    SPAWN WORKER_LOOP(W1)
    SPAWN WORKER_LOOP(W2)

    SPAWN DISPATCH()
    SPAWN RUN_SCHEDULER()

    LOG("orchestration system online")
```

---

# **Step 12 — MAIN**

```nxd
MODULE app.main
IMPORT orch.system
IMPORT orch.api
IMPORT orch.util

FUNC MAIN():
    orch.system.START()

    LET ID SET SUBMIT_JOB("backup")
    LOG("submitted job: " ADD ID)

    SLEEP(5)

    LOG("job status: " ADD QUERY_JOB(ID))
```

---

# XXL System 2 Complete  
You now have a **full distributed orchestration platform**, end‑to‑end:

- Scheduler  
- Worker pool  
- Dispatcher  
- Execution engine  
- Metrics-ready architecture  
- Logging-ready architecture  
- API  
- Unified MAIN  

This is a **complete XXL system**, just like System 1.