Files
microdao-daarion/infrastructure/worker-daemon
Apple 0ebbb172f0 🔧 Worker Daemon: додано Stream Creator
- Автоматичне створення streams при старті worker
- Перевірка наявності streams перед створенням
- Підтримка всіх 4 streams (MM_ONLINE, MM_OFFLINE, MM_WRITE, MM_EVENTS)

Це вирішує проблему з DNS в K8s Job
2026-01-10 10:41:41 -08:00
..

Worker Daemon — Memory Module

Дата: 2026-01-10
Версія: 1.0.0


📋 Призначення

Worker daemon запускається на кожній ноді і:

  1. Реєструє capabilities в capability registry
  2. Підписується на NATS consumers
  3. Виконує jobs з перевіркою requirements
  4. Звітує метрики та статуси

🔧 Deployment

K8s (NODE1, NODE3)

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: memory-worker
  namespace: daarion
spec:
  selector:
    matchLabels:
      app: memory-worker
  template:
    metadata:
      labels:
        app: memory-worker
    spec:
      containers:
        - name: worker
          image: memory-worker:latest
          env:
            - name: NODE_ID
              valueFrom:
                fieldRef:
                  fieldPath: metadata.name
            - name: TIER
              value: "A"  # або B, C
            - name: NATS_URL
              value: "nats://nats-client.nats:4222"
            - name: CAPABILITY_REGISTRY
              value: "postgresql://..." # або Consul

Docker (NODE2)

docker run -d \
  --name memory-worker \
  -e NODE_ID=node2-macbook-m4 \
  -e TIER=C \
  -e NATS_URL=nats://nats-client.nats:4222 \
  memory-worker:latest

📊 Capability Registry Schema

Postgres Table

CREATE TABLE worker_capabilities (
    node_id VARCHAR(255) PRIMARY KEY,
    tier VARCHAR(10) NOT NULL,
    region VARCHAR(50),
    trust_zone VARCHAR(50),
    hardware JSONB NOT NULL,
    capabilities JSONB NOT NULL,
    status VARCHAR(20) NOT NULL,
    last_heartbeat TIMESTAMP WITH TIME ZONE NOT NULL,
    created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
);

CREATE INDEX idx_worker_capabilities_tier ON worker_capabilities(tier);
CREATE INDEX idx_worker_capabilities_status ON worker_capabilities(status);
CREATE INDEX idx_worker_capabilities_heartbeat ON worker_capabilities(last_heartbeat);

🔄 Worker Flow

  1. Startup:

    • Реєстрація capabilities в registry
    • Heartbeat (кожні 30s)
  2. Job Processing:

    • Підписка на consumer (durable)
    • Перевірка requirements vs capabilities
    • Виконання job
    • ACK/NAK
  3. Metrics:

    • Експорт метрик в Prometheus format
    • Відправка алертів в Matrix (якщо потрібно)

📁 Структура коду

worker-daemon/
├── main.py                 # Entry point
├── registry.py             # Capability registry (Postgres/Consul)
├── nats_client.py          # NATS consumer
├── job_executor.py         # Job execution
├── metrics.py              # Prometheus metrics
└── requirements.txt        # Python dependencies

Документ створено: 2026-01-10 19:30 CET