Spice

Raft consensus y estado distribuido

Spice es el corazón del cluster. Implementa Raft consensus para mantener el estado distribuido — configuración, registry de servicios, elección de líder y replicación de datos. Es el equivalente de etcd en Kubernetes, pero integrado directamente en el binario de DuneStack.

Cómo funciona

  • Cada nodo del cluster ejecuta una instancia de Spice
  • Un nodo es elegido líder por consenso Raft
  • Todas las escrituras pasan por el líder y se replican a followers
  • Las lecturas pueden servirse desde cualquier nodo (eventual consistency) o solo del líder (strong consistency)
  • Si el líder cae, se elije uno nuevo en < 500ms

API

bash
# Estado del consenso
dune spice status
# Leader:     arrakis-prod-01
# Term:       42
# Committed:  18,429
# Applied:    18,429
# Followers:  2/2 healthy

# Leer un valor
dune spice get /config/gateway/rate-limit
# 10000

# Escribir un valor (solo el líder procesa)
dune spice put /config/gateway/rate-limit 15000
# ✦ Written to leader, replicated to 2 followers

# Watch cambios en tiempo real
dune spice watch /config/
# [14:30:01] PUT /config/gateway/rate-limit = 15000
# [14:30:05] PUT /config/services/patient-api/replicas = 3

Configuración

toml
# /etc/dune/spice.toml

[raft]
election_timeout = "300ms"
heartbeat_interval = "100ms"
snapshot_threshold = 10000
max_append_entries = 64

[storage]
data_dir = "/var/lib/dune/spice"
wal_dir = "/var/lib/dune/spice/wal"

[network]
bind = "0.0.0.0:7420"
advertise = "10.10.0.10:7420"

Métricas

MÉTRICADESCRIPCIÓNVALOR TÍPICO
spice_raft_termTérmino actual del líder42
spice_commit_indexÚltimo índice committed18,429
spice_apply_latency_msLatencia de apply< 1ms
spice_replication_lagLag de replicación< 5ms
spice_snapshot_size_mbTamaño del último snapshot12 MB