🚀 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:
123
infrastructure/worker-daemon/README.md
Normal file
123
infrastructure/worker-daemon/README.md
Normal 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*
|
||||
Reference in New Issue
Block a user