Flussi di dati tra nodi
(Sezione Ecosistema e Rete)
1) L'essenza e gli obiettivi
I flussi di dati tra i nodi sono canali gestiti per la trasmissione di eventi, stati e manufatti tra i ruoli dell'ecosistema (validatori/rider/indici/ponti/gateway/storage/analisi). Obiettivi:- Prevedibilità: SLO stabile per ritardo/successo/freschezza.
- Affidabilità: resistenza alle perdite, ai duplicati, alle reorghe.
- Sicurezza e compilazione: crittografia, firma, residenza.
- Scalabilità: distribuzione geo, partizionamento, QoS.
2) Tassonomia dei flussi
1. Control Plane: confighi, ficcoflagi, criteri di instradamento/limiti.
2. Data Plane - Eventi di dominio ('deposit', 'payout', 'bridge').
3. Data Plane - Flusso a lunga durata (gRPC/WebSocket) per segnali e metriche live.
4. Batch/Backfill - Carichi di tagli storici, repliche, snapshot.
5. Replica/anti-entropia: state sync, merceologia, flussi CRDT.
6. Telemetria/osservabilità: loghi/metriche/trailer side-band, non interferiscono con l'UX principale.
A ogni tipo corrispondono le classi di QoS e le proprie regole di retro/ordine.
3) Topologia e routing
Hub-and-Spoke: hub regionali come pneumatici; Gli spoop sono i nodi dei ruoli.
Mesh/P2P: partiale per la replica/sistema pubblico.
Edge-Tiered - Sottili gateway (rate-limit/cache) per cluster regionali spessi.
Geo-Routing: Anycast/Latency-Aware LB + regole di residenza.
Chiave - Partition: 'partition _ key = chainId'tenant'topic'entityId' fornisce un ordine e una scala prevedibili.
4) Trasporti e formati
HTTP/2/3, gRPC/QUIC - bassa latitanza, multiplex, keepalive.
Kafka/Pulsar/NATS - code con persuasività/partenze/gruppi di concertazione.
WebSocket - eventi push e canali live.
Formati: Protobuf/Avro (schemi evolutivi), JSON per API esterne.
Indirizzi hash e ricevute Merkle per verificare l'integrità.
5) Ordine, consegna e finalizzazione
Modello di spedizione:- At-least-once (impostazione predefinita; richiede Idampotenza/Deadup).
- Effetto exactly-once tramite Outbox/Inbox + Idempoted console.
- Ordine: garantito all'interno della partitura; l'ordine interpartire non è garantito.
- Finalizzazione: stati'osserved confirmed (K) 'finalization s'invalidated (reorg)'; per l'ottimistica è una finestra di discussione.
6) Idampotenza e deducibilità
Chiave di idempotenza per gli eventi:- `idempotency_key = ${chainId}|${block}|${tx}|${logIndex}|${type}`
- Upsert chiave, TTL finestra di deduplo ≥ 72 ore
- Il conflitto payload è il criterio «origine verità» (priorità, versione, firma).
- Per le richieste HTTP, titolo «Idempotency-Key» + registro delle risposte.
7) Code, backpressure e quote
Code: partenze a chiave; DLQ per i messaggi «velenosi».
Backpressure: prestiti/token, limitazione max-inflight, circuito-breaker.
Quote/QoS: P0 (critico), P1 (prodotto), P2 (bulk). Pool/limiti RPS/byties/s/sottoscrizioni separati.
Errore precoce delle query «costose», guard per intervalli/dimensioni.
8) Coerenza e modelli di dati
Read-you-write all'interno della partitura/nodo.
Avvenual Consistency tra regioni/partenze.
CRDT per la replica in conflitto-free di alcuni set (contatori, molteplici).
Snapshot + registri per bootstrap veloci e determinati replay.
9) Sicurezza e fiducia
mTLS tra i nodi, pinning delle chiavi, rotazione.
Firma messaggi/webhoop, timeline e finestra anti-replay.
Crittografia in viaggio/in pace; segregazione delle chiavi regionali.
Riduzioni PII: tornizzazione, proibizione dei dati personali nelle etichette/metriche.
10) Efficienza: pacchetti, compressione, cache
Batching raggruppa piccoli messaggi per ridurre gli overhead.
Compressione: zstd/gzip con dizionari sicuri.
Cache: risposte negative e guide hot; TTL e invalidità per evento.
11) Diagrammi di dati
Registro dei flussi/partenze
sql
CREATE TABLE streams (
name TEXT PRIMARY KEY,
partitions INT,
qos TEXT, -- P0 P1 P2 retention_days INT,
schema_version TEXT
);
CREATE TABLE offsets (
stream TEXT, partition INT, consumer_group TEXT,
offset BIGINT, updated_at TIMESTAMPTZ,
PRIMARY KEY (stream, partition, consumer_group)
);
Registro eventi (Idempotent upsert)
sql
CREATE TABLE events_core (
id UUID PRIMARY KEY,
idempotency_key TEXT UNIQUE,
ts TIMESTAMPTZ,
partition_key TEXT,
type TEXT,
payload JSONB,
status TEXT, -- observed confirmed finalized invalidated signature TEXT
);
DLQ/quarantena
sql
CREATE TABLE dlq (
id UUID PRIMARY KEY,
stream TEXT, partition INT, offset BIGINT,
reason TEXT, payload JSONB, ts TIMESTAMPTZ
);
12) Criteri (YAML)
QoS e limiti
yaml qos:
P0: { ack_timeout_ms: 2000, retries: 3, backoff_ms: [100,400,800], rps_per_org: 1500 }
P1: { ack_timeout_ms: 5000, retries: 2, rps_per_org: 800 }
P2: { best_effort: true, rps_per_org: 200 }
limits:
max_message_bytes: 1048576 max_stream_subscriptions_per_client: 20
Finalizzazione e finestre
yaml finality:
eth-mainnet: { k: 12 }
polygon: { k: 256 }
optimistic: { k: 0, challenge_minutes: 20 }
Routing/residenza
yaml routing:
prefer_local_region: true fallback: [nearest_healthy, master_hub]
residency:
eu: ["eu"]
uk: ["uk"]
13) Osservabilità: SLI/SLO
SLI (kernel):- Latency p95/p99 (ingress→egress, per-stream/QoS).
- Success Rate / Drop Rate.
- Queue Lag p95 e consumer lag per partenze.
- Freshness p95 (ingest→consume).
- Reorg/Invalidated Rated (se onchain).
- Dedup Efficiency (% delle riprese assorbite in modo idropotente).
- Geo-Hit Ratio (servito localmente).
- P0 latency p95 ≤ 400 ms; Success ≥ 99. 95%; Queue-lag p95 ≤ 2 с; Freshness p95 ≤ 60 с.
- Dedup efficiency ≥ 99%; DLQ ≤ 0. 1% del traffico.
Dashboard: Streams Core/Lag & Freshness/ QoS & Errors/Geo/Security (mTLS/firme).
14) Pattern dei consumatori
Outbox/Inbox: pubblicazione atomica e applicazione idipotente.
Effetto exactly-once - Memorizza l'ultima chiave e versione applicata.
Watermarks: elaborazione degli eventi in ritardo (late data).
Idempotent Side-Efficis - Query esterne solo con chiave e registro delle risposte.
15) Modalità di degrado
Finalization-only mode: forniamo solo eventi finalizzati.
Cache-only per le guide, congelamento dei metodi pesanti.
Throttle P2 e «modalità dietetica» per gli striam (frequenza di aggiornamento ridotta).
Read-only per API secondarie.
16) Release e migrazioni senza downtime
Blue-Green/Canary per flussi e notebook.
Schema-first - Solo aggiunta di campi MAJOR è una versione parallela dei topic.
Migrazioni offset'ov: shadow-consumer, confronto lag/successo, cambio.
17) Regolamenti operativi
Ogni giorno: rapporto SLO (latency/success/lag/freshness), controllo delle firme, controllo DLQ.
Ogni settimana: revisione di partiture/quote, test DR (bootstrap), analisi di Dedup Efficiency.
Ogni mese: chaos-test (loss/jitter, broker guasto, reorg-burst), revisione finality-finestre.
Prima del lancio, canarino, gate SLO, piano di recupero.
18) Playbook incidenti
A. Esplosione di Queue-Lag/Consumer-Lag
1. Aumentare i consumatori/KEDA; 2) ridistribuire le partenze; 3) congelare P2 e bulk-jobs; 4) Analisi delle chiavi hot.
B. Crescita p95 Latency P0
1. P2-throttle, priorità P0; 2) ridimensionare gateway/broker; 3) cache solo per le guide 4) outlier-ejection.
C. DLQ alto/ripresa
1. Controlla la chiave di idempotenza/TTL; 2) Rafforzare la deduzione; 3) limitare il rumoroso produttore; 4) repliche dopo la fix.
D. Drift diagrammi/contratti
1. Abilita strict-mode (ritaglia i non-calidi) 2) informare il produttore; 3) rilascia l'adattatore; 4) Aggiorna i lenti.
E. Violazione della residenza/firma
1. Blocco di esportazione/canale; 2) rotazione chiavi/cerchi; 3) controllo e post mortem; 4) Aggiornamento dei criteri.
19) Assegno foglio di implementazione
1. Definire i tipi di flusso e la chiave di partizionamento.
2. Attivare Idempotence/Deadup e finalizzazione con finestre K/disputa.
3. Impostare code, QoS, quote e backpressure.
4. Eseguire mTLS/firme e criteri di residenza.
5. Inserisci schemi/registri (streams, offsets, dlq) e telemetria SLI/SLO.
6. Organizzare canary/blue-green e migrare diagrammi senza downtime.
7. Gestite le modalità di degrado e playbook degli incidenti.
20) Glossario
Backpressure - Controllo del carico di ingresso (crediti/token/limiti).
DLQ - Coda morta per messaggi problematici.
CRDT - Strutture dati con risoluzione dei conflitti senza coordinazione.
Finality - Irreversibilità evento/stato.
L'effetto Exactly-once è un risultato di ripetizione sicuro sopra la consegna at-least-once.
Watermark è il segno del progresso della lavorazione per gli eventi recenti.
Outler-ejection - Esclude le istanze degradate dal pool.
I flussi di dati tra i nodi non sono solo «coda e ascoltatore», ma una disciplina di sistema per l'ordine, la finalizzazione, l'idampotenza, la sicurezza e l'osservabilità. Le chiavi standard di partizionamento, QoS/quote, schemi rigorosi e SLO, insieme a modalità degradanti e playbook, forniscono all'ecosistema canali di trasmissione dei dati sostenibili su scala e sotto controllo.