Auto-healing e autosufficienza
(Sezione Tecnologia e infrastruttura)
Breve riepilogo
Auto-healing non è la magia di Kubernets, ma una serie di discipline: provini e limiti corretti, ritai controllati, isolamento delle istanze difettose, automazione SLO e azioni runabook su pulsante/bot. L'obiettivo è ridurre il MTTR senza «coma della neve» e mantenere p95/p99, pagamenti e TTW anche al massimo.
1) Principi di autosufficienza
1. Fail-fast & isolate: identificare e isolare rapidamente i pol/istanze sbagliate.
2. Backoff + jitter: qualsiasi retrai/scale-out - con ritardo esponenziale e jitter.
3. SLO-aware: l'automazione viene attivata/rafforzata con il bilancio degli errori fast-burn.
4. Idempotency è sicuro (soprattutto pagamenti/code).
5. Defense in depth: campioni, quote, limiti, circuito-breaker, outler-ejection, rate-limit, modalità degradante.
2) Base in Kubernets
2. 1 Provini: liveness/readover/startup
startupProbe protegge contro i restart prematuri dei servizi pesanti.
Il readinessProbe determina la preparazione al traffico (caselle o connessioni riscaldate).
Riavvia i processi «dipendenti».
yaml readinessProbe:
httpGet: { path: /health/ready, port: 8080 }
periodSeconds: 5 timeoutSeconds: 1 failureThreshold: 3
livenessProbe:
httpGet: { path: /health/live, port: 8080 }
initialDelaySeconds: 20 periodSeconds: 10 failureThreshold: 3
startupProbe:
httpGet: { path: /health/startup, port: 8080 }
periodSeconds: 5 failureThreshold: 30
2. 2 Limiti, PDB e priorità
richiesti/limits escludono «noisy neighbor».
PodDisruptionBudget (PDB) impedisce che tutti i sottoprodotti cadano contemporaneamente.
yaml apiVersion: policy/v1 kind: PodDisruptionBudget spec:
minAvailable: 2 selector: { matchLabels: { app: payments-api } }
PriorityClass per percorsi critici (payments, gateway).
2. 3 Riavvio e strategia di deploy
«maxUnavailable: 0» per i servizi critici; rollingUpdate con un piccolo passo.
Il PodAntiAffinity distribuisce i sottoassiemi su nodi/zone.
3) Scalabilità automatica ed eventi
HPA (CPU/metriche personalizzate)
yaml apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler spec:
minReplicas: 3 maxReplicas: 30 metrics:
- type: Resource resource: { name: cpu, target: { type: Utilization, averageUtilization: 70 } }
- type: Pods pods:
metric:
name: http_requests_per_second target:
type: AverageValue averageValue: "50"
VPA
Utilizzare per i worker di sfondo/batch in prod-API - Attenzione (riavvia).
KEDA (code/eventi esterni)
Trigger su Kafka lag, RabbitMQ, Redis, Prometheus-query - aumentare i consumatori quando si accumula il lavoro.
4) Protezione di rete: circuito-breaker e selezione «cattivi»
Envoy/Istio outlier detection (идея)
yaml outlierDetection:
consecutive5xx: 5 interval: 5s baseEjectionTime: 30s maxEjectionPercent: 50
Il circuito breaker limita le richieste/connessioni simultanee per non far cadere la dipendenza.
Rate limiting
Limitare le chiamate di ingresso/percorsi PSP/provider di videogiochi in modo che l'onda dei retrai non aumenti l'incidente.
5) Retrai, timeout e backoff con jitter
Regola: prima timeout, poi retrai, sempre con jitter e limitazione dei tentativi.
Pseudocode:python def backoff(attempt, base=0. 1, cap=2. 0):
import random, math sleep = min(cap, base (2 attempt))
jitter = random. uniform(0, sleep 0. 4)
return sleep + jitter
Per i pagamenti - chiavi Idempotent + deduplicazione.
Per le code, dead-letter e riprovazioni ritardate.
6) Autosospensione in code/streaming
DLQ + alert per la crescita; riprocessing isolato.
Controllo lag: Auto Scale (KEDA), backpressure ai produttori.
Exactly-once/at-least-once - viene selezionato consapevolmente; Le operazioni sono idipotenti.
7) Cache e warm-up
Chiavi di versione ('v2:') per disabilità/rimozione in sicurezza.
Pool caldi di connessioni a database/PSP; riscaldamento prima dei cambi (blue-green/canary).
Stale-while-revalidate per ridurre i colpi «freddi» al database.
8) Auto-rimediazione SLO (azioni di segnale)
Associare gli alert burn-rate/TTW/p95 con attività automatiche sicure:- Stop canary / rollback при fast-burn.
- Scale-out dei worker a «queue _ lag _ seconds».
- Attiva il degrade-mode (UX semplificato, disattivazione dei fili pesanti).
- Cambia percorso PSP con timeouts spike.
- Attiva la feature-flag kill-switch.
yaml alert: WithdrawalsQueueLag labels: { action: "scale_workers", target: "withdrawals-consumers", by: "+5" }
9) Modalità di degrado (graceful degradation)
Semplificare l'UI (meno richieste), spegnere i widget «costosi».
Più cache, meno fan-out/aggregazioni.
Per le linee guida LLM, ridurre le dimensioni del contesto/modello e attivare «fast path».
10) Approccio GitOps alle prestazioni automatiche
Tutti i criteri e i parametri auto-remediazione (timeout, soglie) sono in Git.
Ogni azione automatica crea un'annotazione in Grafana e una scrittura nel registro delle modifiche.
Regole Canary e SLO-gate sono anche un codice.
11) Disordine-engineering: verifica che l'healing funziona
Iniezioni di guasto: ritardi di rete, caduta del sistema, guasto dell'emulatore PSP, coda di coda.
Script game-day: misuriamo MTTR, la qualità delle attività automatiche, la presenza di manufatti.
I risultati sono stati aggiornati da runabook, soglie, ficheflag.
12) Osservabilità per auto-healing
Exemplars è un salto veloce dalla metrica p95 alla pista.
Loghi con «trace _ id» e campi «retry», «attempt», «degrade _ mode = true».
Dashboard release compare (stabile vs canary), mappa SLO.
Controllo attività automatiche: chi/cosa/quando, metriche originali, risultato.
13) Sicurezza e conformità
Nessun segreto nei reparti/metriche di remediazioni auto.
Per le azioni di pagamento - doppia conferma/ruolo.
Geo/PII - Non trascinare il traffico verso la regione sbagliata nel feelover.
14) Modelli pratici
Istio DestinationRule — connection pool & outlier
yaml trafficPolicy:
connectionPool:
http: { http1MaxPendingRequests: 1000, maxRequestsPerConnection: 100 }
outlierDetection:
consecutive5xx: 5 interval: 5s baseEjectionTime: 30s maxEjectionPercent: 50
Flagger - canary con lavaggio automatico/reimpostazione
yaml analysis:
interval: 1m threshold: 5 metrics:
- name: request-success-rate thresholdRange: { min: 99 }
- name: request-duration thresholdRange: { max: 300 }
webhooks:
- name: smoke url: http://tester/smoke
KEDA ScaledObject — Kafka lag
yaml triggers:
- type: kafka metadata:
topic: withdrawals bootstrapServers: broker:9092 consumerGroup: w-consumers lagThreshold: "5000"
15) Assegno-foglio di implementazione
1. Configurati startup/readover/liveness e health-endpoint.
2. Limiti/richieste di risorse + PDB/anti-affinity.
3. HPA/KEDA per API e worker; metriche di lag/throughput.
4. Circuito-breaker, outlier-ejection, rate-limit in gate/mesh.
5. Retrai con backoff + jitter, idipotenza delle transazioni di pagamento.
6. Cache di versioni e degrade-mode.
7. SLO-gate-azione-auto (rollback/scale/rerute/kill-switch).
8. Codice dei criteri GitOps + controllo delle azioni, annotazioni di rilascio.
9. Test di caos e game-day per gli script chiave.
10. Dashboard MTTR/Alert Quality e report sulle remedi automatiche.
16) Anti-pattern
Liveness «avvia» il processo a causa della dipendenza temporale dal flapping.
Ritrae senza timeout/jitter, una tempesta di richieste.
L'HPA CPU per i servizi a dipendenza da IO viene → da nessuna parte.
Cache condivisa senza versioni durante i ripristini dei dati.
Attività automatiche senza controllo/Runbook URL.
Non ci sono DLQ/metriche di lag per l'accumulo silenzioso del debito.
Miscelazione di auto-healing e «insabbiamento dei problemi»: l'automazione cura i sintomi, la radice non elimina la ripetizione degli incidenti.
Riepilogo
L'automedicazione è una disciplina ingegneristica: provini e limiti di qualità, ritai e isolamento adeguati, attività automatiche sui segnali SLO, oltre a test di caos e verifiche. Questo tracciato rende la piattaforma resistente ai guasti, riduce la MTTR e protegge le metriche chiave del iGaming - p99, la conversione dei pagamenti e TTW - anche nelle ore più calde.