GH GambleHub

Degrado della grazia

1) L'essenza dell'approccio

Il degrado della grazia è un passaggio gestito al sistema in modalità più semplice ma utile quando le risorse sono ridotte, le dipendenze fallite o i picchi di carico. Lo scopo è quello di preservare il valore core per l'utente e la sostenibilità della piattaforma, sacrificando funzionalità e qualità secondarie.

Proprietà chiave:
  • Prevedibilità: scenari predefiniti e «scale» di degrado.
  • Limitazione del raggio di impatto: isolamento di fich e dipendenze.
  • Osservabilità: metriche, fogli e tracciabilità «quale livello di degrado è attivo e perché».
  • Reversibilità: ritorno rapido alla normalità.

2) Principi e limiti

1. Salva l'essenziale: SLA/SLO principale (ad esempio, acquisto, login, ricerca) è la priorità superiore a quella secondaria (avatar, raccomandazioni, animazioni).

2. Fail-open vs fail-closed:
  • Sicurezza, pagamenti, diritti - fail-closed (migliore rifiuto che violazione).
  • Contenuti, suggerimenti, avatar - fail-open con folback.
  • 3. Budget provvisorio: timeout dall'alto verso il basso (client
  • 4. Controllo dei costi: il degrado dovrebbe ridurre il consumo di CPU/IO/rete, non semplicemente nascondere gli errori.

3) Livelli di degrado

3. 1 Client/UX

Skeletons/playsholder e un caricamento «pigro» di widget secondari.
Partial UI: i blocchi critici vengono caricati, quelli secondari vengono nascosti/semplificati.
La cache del client è last-known-good (LKG) con il segno «i dati potrebbero essere obsoleti».
Modalità off-line: coda di comandi con ripetizione in seguito (idempotenza!).

3. 2 gateway Edge/CDN/WAF/API

stale-while-revalidate - Restituisci la cassetta, aggiorniamo lo sfondo.
Rate limiting & load shedding: durante il sovraccarico, ripristiniamo il traffico di sfondo/anonimato.
Geofence/routing ponderato - il traffico viene portato verso la regione sana più vicina.

3. 3 Livello di servizio

Partial response: restituisce parte dei dati + 'warnings'.
Modalità read-only - Disattiva temporaneamente le mutazioni (flag).
Brownout - Disattivazione temporanea di FIC (raccomandazioni, arricchimento).
Adattative concertency riduce dinamicamente il parallelismo.

3. 4 Dati/streaming

Cache come fonte di verità con TTL (temporaneamente): «Meglio approssimativamente che mai».
Ridotta precisione dei modelli/algoritmi (fast path vs accurate path).
Defer/queue - Consente di spostare le operazioni più pesanti in sfondo (outbox/job queue).
Code prioritarie: eventi critici in una classe separata.

4) «Scale» di degrado (playbooks)

Esempio per API di ricerca:
  • L0 (norma) L1 - Nascondi la personalizzazione e i banner di L2: disattivare i sinonimi/fassi-ricerca di L3: limitare le dimensioni della risposta e il timeout a 300 ms di L4: restituire i risultati dal cassetto 5 min di L5: «read-only & cache only» + coda di richieste di ricalcolo.
Per ogni livello vengono registrati:
  • Trigger: sovraccarico CPU> 85% p95> target, errori> soglia, Kafka> soglia, flap delle dipendenze.
  • Azioni: attiva il flag X, riduce la concurrency a N, sposta la sorgente Y alla cache.
  • I criteri di uscita sono 10 minuti di metriche verdi, una scorta di risorse.

5) Politiche decisionali

5. 1 Budget errato e SLO

Usa l'errore-budget burn rate come trigger brownout/shedding.
Criterio: «Se il burn-rate> 4 x entro 15 minuti - includere L2 degrado».

5. 2 Admission control

Limitiamo l'RPS in entrata ai percorsi critici per garantire il p99 e evitare che le code collassino.

5. 3 Priorità

Classi attive> system> background.
Priorità per il tenante (Gold/Silver/Bronze) e giustizia (fair share).

6) Pattern e implementazioni

6. 1 Load shedding (server)

Annullare le richieste prima che si occupino di tutte le risorse.
Restituire «429 »/« 503» con «Retry-After» e spiegare le regole (per i clienti).

Envoy (adaptive concurrency + circuit breaking)

yaml typed_extension_protocol_options:
envoy. filters. http. adaptive_concurrency:
"@type": type. googleapis. com/envoy. extensions. filters. http. adaptive_concurrency. v3. AdaptiveConcurrency gradient_controller_config:
sample_aggregate_percentile: 90 circuit_breakers:
thresholds:
- max_requests: 2000 max_pending_requests: 500 max_connections: 1000

6. 2 Brownout (semplificazione temporanea)

L'idea è quella di ridurre la luminosità quando le risorse sono finite.

kotlin class Brownout(val level: Int) { // 0..3 fun recommendationsEnabled() = level < 2 fun imagesQuality() = if (level >= 2) "low" else "high"
fun timeoutMs() = if (level >= 1) 150 else 300
}

6. 3 Partial response e avvisi

Campo «warnings »/« degradation» nella risposta:
json
{
"items": [...],
"degradation": {
"level": 2,
"applied": ["cache_only", "no_personalization"],
"expiresAt": "2025-10-31T14:20:00Z"
}
}

6. 4 Stale-while-revalidate sul bordo (Nginx)

nginx proxy_cache_valid 200 10m;
proxy_cache_use_stale error timeout http_500 http_502 http_504 updating;
proxy_cache_background_update on;

6. 5 Interruttore read-only (Kubernets + flag)

yaml apiVersion: v1 kind: ConfigMap data:
MODE: "read_only"

The code should check MODE and block mutations with a friendly message.

6. 6 Kafka: backpressure e classi di coda

Passare ai consumatori heavy in «max» più piccoli. poll. record', limitate la produzione di batch-e.
Separare «critici» e «bulk» per top/quote.

6. 7 UI: graceful fallback

Nascondete i widget «pesanti», mostrate kash/skeleton e etichettate chiaramente i dati obsoleti.

7) Esempi di configurazione

7. 1 Istio: outlier + pool di priorità

yaml outlierDetection:
consecutive5xx: 5 interval: 10s baseEjectionTime: 30s maxEjectionPercent: 50

7. 2 Nginx: traffico di sfondo sotto il coltello primo

nginx map $http_x_priority $bucket { default low; high high; }

limit_req_zone $binary_remote_addr zone=perip:10m rate=20r/s;
limit_req_status 429;

server {
location /api/critical/ { limit_req zone=perip burst=40 nodelay; }
location /api/background/ {
limit_req zone = perip burst = 5 nodelay; # stricter
}
}

7. 3 Feature flags / kill-switches

Memorizzare in configurazione dinamica (ConfigMap/Consul) e aggiornare senza rilascio.
Separare per Fic e le bandiere globali e regolare le attivazioni.

8) Osservabilità

8. 1 Metriche

«degradation _ level {service}» è il livello corrente.
'shed _ sollests _ total {route, reason}' - quanto è stato cancellato e perché.
«stale _ responses _ total» - Quanto è stato rilasciato.
`read_only_mode_seconds_total`.
`brownout_activations_total{feature}`.
Bilancio errato: burn-rate, percentuale di violazioni SLO.

8. 2 Tracing

Attributi span: 'degraded = true', 'level = 2', 'reason = upstream _ timeout'.
Link tra retrai/richieste hedged per vedere il contributo alle code.

8. 3 Logi/alert

Eventi di alterazione dei livelli di degrado con cause e proprietario della modifica.
Alert di livello «gonfio» (la degradazione dura troppo a lungo).

9) Gestione dei rischi e della sicurezza

Non degradare l'autenticazione, l'autorizzazione e l'integrità dei dati.
La maschera PII viene salvata in qualsiasi modalità.
Finanze/pagamenti: solo operazioni idipotenti, timeout e rimborsi rigorosi; in caso di dubbio - read-only/hold.

10) Anti-pattern

Degrado silenzioso senza suggerimenti all'utente e senza telemetria.
Tempeste retrae invece di load shedding e brevi timeout.
I tagliandi globali senza segmentazione sono un enorme blast radius.
Mescolare i percorsi prod e quelli leggeri in una sola cache/coda.
Il degrado eterno è brownout come «nuova normalità», criteri di uscita dimenticati.
State-write - Tentativi di scrittura basati su dati obsoleti.

11) Assegno-foglio di implementazione

  • Identificati il kernel di valore e gli script critici dell'utente.
  • Sono state create scale di degrado per servizi/case con inneschi e uscite.
  • Timeout/vincoli e server-side load shedding.
  • Sono stati configurati rate limits e classi di traffico prioritarie.
  • Implementati partial response, read-only, stale-while-revalidate.
  • Le feature flags/kill-switches sono integrate.
  • Metriche/tracking/alert per livelli di degrado e cause.
  • Esercitazioni regolare game day con simulazione di sovraccarico/guasto.
  • Sono stati documentati il SLO e la policy error-budget per la degradazione.

12) FAQ

Q: Quando scegliere brownout e quando scegliere shedding?
A: Se l'obiettivo è di ridurre i costi delle richieste senza guasti - brownout. Se l'obiettivo è proteggere il sistema quando anche la semplificazione non aiuta - shedding access.

Segnalare all'utente il degrado?
A: Per gli script critici, sì. La trasparenza riduce il supporto e l'insoddisfazione.

La cache può essere la fonte della verità?
A: Temporaneamente, sì, con SLA evidenti e etichette di obsolescenza. È proibito per le mutazioni.

Come si fa a non essere rotti?
A: Brevi timeout, backoff esponenziale con jitter, idipotenza e limite di tentativi; ritrae solo operazioni sicure.

13) Riepilogo

Il degrado della grazia è un contratto architettonico e una serie di modalità di funzionamento gestite, incluse da metriche e budget errato. Scale correttamente progettate, timeout rigoroso e shedding, cash folback e brownout, oltre ad una forte osservabilità - e la piattaforma rimane utile e economico anche durante la tempesta.

Contact

Mettiti in contatto

Scrivici per qualsiasi domanda o richiesta di supporto.Siamo sempre pronti ad aiutarti!

Avvia integrazione

L’Email è obbligatoria. Telegram o WhatsApp — opzionali.

Il tuo nome opzionale
Email opzionale
Oggetto opzionale
Messaggio opzionale
Telegram opzionale
@
Se indichi Telegram — ti risponderemo anche lì, oltre che via Email.
WhatsApp opzionale
Formato: +prefisso internazionale e numero (ad es. +39XXXXXXXXX).

Cliccando sul pulsante, acconsenti al trattamento dei dati.