Señales entre nodos
1) Concepto de señal
Señal - unidad mínima de comunicación semántica en la red: evento, solicitud, confirmación, estado, límite, política. A diferencia del paquete «crudo», la señal tiene semántica (tipo, esquema, contexto, invariantes) y garantías (entrega, orden, idempotencia).
Objetivos: reducir la conectividad de los servicios, acelerar la respuesta al cambio, hacer que la red sea manejable y observable.
2) Taxonomía de señales
Eventos (Event): hechos sobre lo que ocurrió (Created, Updated, Settled, Slashed).
Comando (Command): intención de realizar una acción (Mint, Pause, RotateKey).
Consulta-respuesta (Query/Reply): permite obtener el estado/agregaciones.
Estado (State Snapshot): instantáneas periódicas (límites, cuotas, configuraciones).
Alertas/Incidentes (Alerta): desviaciones, degradaciones, violaciones de SLA.
治理/Politiki (Governance/Policy): opciones de tarifas, límites, versiones.
Dominio cruzado (X-Chain/X-Domain): permite transferir derechos/mensajes entre cadenas/zonas de confianza.
Cada clase es fijada por un esquema (ID de la versión, campos obligatorios, invariantes).
3) Modelo de mensaje
Composición mínima:- `signal_id` (ULID), `causality_id` (trace/span), `ts`, `ttl`
- `type` (namespace:version), `schema_hash`
- 'producer _ id', 'domain', 'auth _ proof' (firma/VC/ZK)
- 'qos' (clase), 'retries', 'attempt'
- `payload` (CBOR/JSON/ProtoBuf), `crc`
- 'idempotency _ key' (por entidad empresarial)
4) QoS y clases de envío
Q0 Fire-and-Forget: sin confirmaciones (telemetría, métricas).
Q1 At-Least-Once: retraídas, dedoop en el receptor, idempotencia.
Q2 Exactly-Once (efectivo): entrada idempotente + dedoop + outbox/inbox transaccional.
Q3 Ordenado: guardar el orden de la clave de lote (partitioning clave).
Q4 Priority/Deadline: Prioridades y Deadline (EDF/LLF) para comandos críticos.
Solución: por defecto Q1 + idempotencia; Q3 - para los hilos con causalidad; Q4 - para avary/治理.
5) Orden, causalidad e idempotencia
Claves de causalidad: 'aggregate _ id', 'version', 'prev _ hash'.
Outbox/InBox-patrón: confirmación transaccional del evento y envío.
Hendlers idempotentes: guardar 'idempotency _ key' en 'seen table' + upsert.
Reconciliation: conciliaciones periódicas de snapshots y registros (repair jobs).
Límites de retraídas/TTL: protección contra repeticiones «eternas» y la deriva de estado.
6) Control de flujo y retroceso
Cuotas y tokens: leaky/bucket, rate-limit por tipo/consumidor.
Contrato de frecuencia/tamaño: batch size, window, max-in-flight.
Políticas de Drop/Degrade: telemetría de revisión en congestión; Los Q4 importantes no dropean.
Justicia: Planificación de colas WFQ/DRR.
Adaptabilidad: controladores PID: el crecimiento de la latencia → reducir la ventana.
7) Transporte y neumático
Bus de eventos local: Kafka/Pulsar/NATS/Redis Streams - Partición de llaves.
Consultas sincrónicas: gRPC/HTTP2 para Query/Reply, tiempos de espera y Circuit Breakers.
Canales de dominio cruzado: capas similares a IBC/CCIP, relayers con fianzas, confirmaciones probadas.
Edge/POP: búferes locales y retransmisión en el núcleo.
8) Seguridad de las señales
Autenticación: mTLS/OIDC para S2S; mensajes firmados (EdDSA/secp256k1).
Autorización: ABAC/RBAC sobre topics y tipos de señales; Derechos/límites RNFT.
Integridad: hashes/merclizaciones de batches, revistas inmutables.
Privacidad: campos en ZK/cifrado de campos (FPE para fugas parciales).
Anti-Frod: firmas de comportamiento, tráfico de «miel», controles estocásticos.
9) Observabilidad y rastreo
Correlación: trace-id/span-id en cada señal, etiquetas de extremo a extremo.
Métricas: p50/p95 latency por tipo, tasa de éxito, timeout/reties%, DLQ depth, lag de consumo.
Los registros de la política: quién, cuándo, qué cambió (治理/limity), firmas y diffs de las confiscaciones.
Alertings: SLO-presupuestos de errores; muestras sintéticas para rutas críticas.
DLQ/Replay: colas muertas, reprocess con protección contra tomas.
10) Esquemas y versionados
Registro de Schema: evolución de campos (compatible con back/forward), tipos semver.
Flags de función: activación gradual de campos/lógica.
Contratos de compatibilidad: pruebas de «viejo productor ↔ nuevo consumer» y viceversa.
Migraciones: dual-write/dual-read, topics espejados, planes sunset.
11) Políticas de retraimiento y deduplicación
Retraídas: retardo exponencial + jitter, máximo de intentos, quarantina después del umbral.
Dedoup: almacenar las últimas 'N' claves por lote o filtros de bloom; Registros TTL.
Anti-tormenta: ACK/NACK grupal, coalescing de eventos (debounce/aggregate).
12) SLA/SLO para señales
Ejemplo de SLO de destino (por clase):- Q4: p95 ≤ 200 ms, éxito ≥ 99. 99%, DLQ = 0, incidente MTTR ≤ 15 min.
- Q3: p95 ≤ 500 ms, éxito ≥ 99. 9%, violación del orden ≤ 10⁻⁶/soobshcheniye.
- Q1: éxito ≥ 99. 5% por la ventana T, p95 ≤ 1-2.
Error budget: sobrecoste → descarga automática de velocidades, activación de prioridades, flag de degradación.
13) Señales de cadena cruzada (multi-línea)
Pruebas de eventos: pruebas light-client/state en lugar de «confianza en el releer».
Finalidad: contabilización de los retrasos en la finalización del dominio, candados temporales (challenge period).
Garantías económicas: S-fianza de relés, slashings por confirmaciones falsas.
Idempotencia X-Domain: global 'x _ msg _ id', tablas seen en ambos extremos.
Políticas de salida: grúas de parada, límites de volumen/tiempo, quórum manual en ataques.
14) Anti-colusión y abuso
Señales de falsificación: strong auth + detector de comportamiento de anomalías.
Ataques de réplica: nonce/TTL y llaves únicas.
Colusión de productores: auditoría correlativa, muestras ciegas, multas por error sistemático.
Farming de eventos: tarificación por calidad (clase Q), rate limits por entidad.
15) Implementación de Playbook
1. Mapeo de dominios y tipos de señales. Definir criticidad (clase Q), propietarios, esquemas.
2. Selección de transporte y arquitectura topic. Partición por las claves de causalidad.
3. Definición de SLO/SLA. Presupuestos de errores, alertas, procedimientos de emergencia.
4. Security-by-default. Firmas, mTLS, ABAC, rotación clave.
5. Idempotencia y dedoup. Outbox/InBox, seen-tables, TTL.
6. Backpressure. Cuotas, ventanas, prioridades, dashboards lags.
7. Schema Registry & versioning. Contratos de compatibilidad, matrices de prueba.
8. Observabilidad. Rastreo de E2E, muestras sintéticas, DLQ/Replay.
9. Piloto y días de juego. Entrenamiento de incidentes, repetición de registros reales.
10. Escala. X-domain, límites, grúas de parada, post-mortem público.
16) Métricas y dashboards
Rendimiento: latency p50/p95/p99, throughput, consumer lag, in-flight.
Fiabilidad: tasa de éxito, retry%, DLQ depth, duplicate ratio.
Orden: out-of-order%, redering distance.
Economía: costo de procesamiento/comunicación, margen por clase, multas/incentivos.
Seguridad: rate señales sospechosas, fals-positivo/negativo.
治理: velocidad de laminación de esquemas/políticas, proporción de actualizaciones exitosas sin retroceso.
17) Plantillas de contratos/servicios
Puerta de enlace: validación, autenticación, normalización, priorización.
Registro de Schema: almacenamiento/validación de esquemas, compatibilidad.
Signal Router: enrutamiento por tipo/dominio, clases QoS, rate limits.
Idempotency Store: llaves, TTL, dedoop.
DLQ/Replay Service: cuarentena, procesamiento diferido, repetición por ventana.
X-Domain Relay: pruebas, garantías, slashing, finality.
Policy Hub: administración de límites/configuraciones, auditoría de cambios.
18) Lista de comprobación de disponibilidad
- Se han definido clases de QoS y SLO para todo tipo de señales
- Firmas incluidas, mTLS, rotación de claves, ABAC
- Outbox/inbox personalizados, hendlers idempotentes, dedoop
- Implementado rate limits, backpressure, prioridades
- Introducido por Schema Registry, pruebas de interoperabilidad, unos planes
- Dashboards disponibles: latency/lag/DLQ, alertas de presupuestos de errores
- Incidentes trabajados (juegos-días), réplica, post-mortem
- Para X-domain, se incluyen pruebas, fianzas y grúas de parada
19) Glosario
QoS: clase de garantía de entrega/prioridad.
Idempotency: volver a realizar sin efectos secundarios.
Backpressure: mecanismos que limitan la carga en caso de sobrecarga.
DLQ: cola «muerta» para el procesamiento fallido.
Trace/Span: identificadores de rastreo de extremo a extremo.
X-Domain/X-Chain: rutas de señal de dominio cruzado/cadena cruzada.
En pocas palabras: las señales correctamente diseñadas son el «sistema nervioso» de la red. Al estandarizar esquemas, garantías, seguridad y observabilidad, el ecosistema obtiene una entrega predecible, resistencia a fallas y una evolución manejable sin ataduras ocultas y muletas manuales.