🚀 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:
95
infrastructure/nats/init-streams.sh
Executable file
95
infrastructure/nats/init-streams.sh
Executable file
@@ -0,0 +1,95 @@
|
||||
#!/bin/bash
|
||||
# Ініціалізація NATS JetStream streams для Memory Module
|
||||
# Використання: ./init-streams.sh <nats-url>
|
||||
|
||||
set -e
|
||||
|
||||
NATS_URL=${1:-"nats://nats-client.nats:4222"}
|
||||
|
||||
echo "🚀 Ініціалізація NATS JetStream streams..."
|
||||
echo "NATS URL: $NATS_URL"
|
||||
|
||||
# Перевірка доступності NATS
|
||||
if ! nats --server="$NATS_URL" server check jetstream 2>/dev/null; then
|
||||
echo "❌ NATS JetStream не доступний. Перевірте deployment."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "=== Створення Stream MM_ONLINE ==="
|
||||
nats --server="$NATS_URL" stream add MM_ONLINE \
|
||||
--subjects="mm.embed.online,mm.retrieve.online,mm.summarize.online" \
|
||||
--storage=file \
|
||||
--replicas=3 \
|
||||
--max-age=30m \
|
||||
--max-deliver=3 \
|
||||
--ack \
|
||||
--discard=old \
|
||||
--duplicate-window=5m \
|
||||
--retention=limits
|
||||
|
||||
echo ""
|
||||
echo "=== Створення Stream MM_OFFLINE ==="
|
||||
nats --server="$NATS_URL" stream add MM_OFFLINE \
|
||||
--subjects="mm.embed.offline,mm.index.offline,mm.backfill.offline" \
|
||||
--storage=file \
|
||||
--replicas=3 \
|
||||
--max-age=7d \
|
||||
--max-deliver=10 \
|
||||
--ack \
|
||||
--discard=old \
|
||||
--retention=limits
|
||||
|
||||
echo ""
|
||||
echo "=== Створення Stream MM_WRITE ==="
|
||||
nats --server="$NATS_URL" stream add MM_WRITE \
|
||||
--subjects="mm.qdrant.upsert,mm.pg.write,mm.neo4j.write" \
|
||||
--storage=file \
|
||||
--replicas=3 \
|
||||
--max-age=7d \
|
||||
--max-deliver=10 \
|
||||
--ack \
|
||||
--discard=old \
|
||||
--retention=limits
|
||||
|
||||
echo ""
|
||||
echo "=== Створення Stream MM_EVENTS ==="
|
||||
nats --server="$NATS_URL" stream add MM_EVENTS \
|
||||
--subjects="mm.event.audit,mm.event.status" \
|
||||
--storage=file \
|
||||
--replicas=3 \
|
||||
--max-age=30d \
|
||||
--ack \
|
||||
--discard=old \
|
||||
--retention=limits
|
||||
|
||||
echo ""
|
||||
echo "=== Створення Consumer online-worker-tier-a ==="
|
||||
nats --server="$NATS_URL" consumer add MM_ONLINE online-worker-tier-a \
|
||||
--durable=online-worker-tier-a \
|
||||
--ack=explicit \
|
||||
--ack-wait=30s \
|
||||
--max-ack-pending=5000 \
|
||||
--filter="mm.embed.online" \
|
||||
--deliver=all \
|
||||
--max-deliver=3 \
|
||||
--backoff=1s,5s,30s
|
||||
|
||||
echo ""
|
||||
echo "=== Створення Consumer offline-worker-tier-b ==="
|
||||
nats --server="$NATS_URL" consumer add MM_OFFLINE offline-worker-tier-b \
|
||||
--durable=offline-worker-tier-b \
|
||||
--ack=explicit \
|
||||
--ack-wait=5m \
|
||||
--max-ack-pending=10000 \
|
||||
--filter="mm.embed.offline" \
|
||||
--deliver=all \
|
||||
--max-deliver=10 \
|
||||
--backoff=10s,1m,5m,30m
|
||||
|
||||
echo ""
|
||||
echo "=== Перевірка streams ==="
|
||||
nats --server="$NATS_URL" stream ls
|
||||
|
||||
echo ""
|
||||
echo "✅ Streams створено успішно!"
|
||||
Reference in New Issue
Block a user