- K8s deployment (2 replicas, PVC, initContainer для server_name) - Streams definitions (MM_ONLINE, MM_OFFLINE, MM_WRITE, MM_EVENTS) - Job payload schema (JSON v1 з idempotency) - Worker contract (capabilities + ack/retry) - Init streams script - Оновлено ARCHITECTURE-150-NODES.md (Control-plane vs Data-plane) TODO: Auth (nkeys), 3+ replicas для prod, worker-daemon implementation
2.9 KiB
2.9 KiB
Worker Daemon — Memory Module
Дата: 2026-01-10
Версія: 1.0.0
📋 Призначення
Worker daemon запускається на кожній ноді і:
- Реєструє capabilities в capability registry
- Підписується на NATS consumers
- Виконує jobs з перевіркою requirements
- Звітує метрики та статуси
🔧 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
-
Startup:
- Реєстрація capabilities в registry
- Heartbeat (кожні 30s)
-
Job Processing:
- Підписка на consumer (durable)
- Перевірка
requirementsvscapabilities - Виконання job
- ACK/NAK
-
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