🚀 NATS JetStream: K8s deployment + streams + job schema v1

- 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
This commit is contained in:
Apple
2026-01-10 10:02:25 -08:00
parent 3478dfce5f
commit 8fe0b58978
7 changed files with 1046 additions and 35 deletions

View File

@@ -0,0 +1,123 @@
# 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)
```yaml
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)
```bash
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
```sql
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*