0Pricing
AWS Solutions Architect · Lezione

Controlli di integrità, circuit breaker e logica di retry

Utilizzare i controlli di integrità di ELB, i controlli degli endpoint di Route 53 e i circuit breaker a livello applicativo per rilevare i guasti e reindirizzare automaticamente il traffico

Controlli di integrità, circuit breaker e logica di retry è una lezione AWS Solutions Architect gratuita su CoddyKit. Questa è la lezione 4 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento AWS Solutions Architect, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso AWS Solutions Architect include 4 lezioni in totale.

Perché è importante il rilevamento automatico dei guasti

Nei sistemi distribuiti, i componenti si guastano continuamente: le istanze si arrestano, si verificano partizioni di rete e i servizi downstream vengono sovraccaricati. Senza il rilevamento automatico dei guasti, il traffico continua a essere inviato ai componenti guasti, causando guasti a cascata. AWS offre più livelli di health check: gli health check di ELB rilevano le istanze non integre, gli health check di Route 53 rilevano gli endpoint non integri e Auto Scaling sostituisce le istanze guaste. I pattern a livello applicativo, come circuit breaker e retry, completano il quadro della resilienza.

Controlli di integrità di ELB

I controlli di integrità di Elastic Load Balancer inviano periodicamente richieste alle destinazioni registrate per determinare se sono integre. È possibile configurare il percorso del controllo di integrità (ad esempio /health), il protocollo, la porta, l'intervallo (30 secondi per impostazione predefinita) e la soglia di integrità/non integrità (il numero di successi o errori consecutivi). Quando una destinazione non supera i controlli di integrità, ELB interrompe l'instradamento del traffico verso di essa. La destinazione viene rivalutata continuamente e aggiunta nuovamente non appena supera la soglia di integrità.

# Configure ALB target group health check
aws elbv2 modify-target-group \
  --target-group-arn arn:aws:elasticloadbalancing::123:targetgroup/my-tg/abc \
  --health-check-protocol HTTPS \
  --health-check-port 443 \
  --health-check-path /health \
  --health-check-interval-seconds 15 \
  --healthy-threshold-count 2 \
  --unhealthy-threshold-count 3 \
  --matcher HttpCode=200

Controlli di integrità di Route 53

I controlli di integrità di Route 53 monitorano gli endpoint da più posizioni in tutto il mondo e funzionano insieme all'instradamento DNS con failover. Ne esistono tre tipi: i controlli degli endpoint interrogano direttamente l'URL dell'applicazione. I controlli calcolati combinano più controlli di integrità secondari usando la logica AND/OR (utile per il monitoraggio complesso). I controlli basati sugli allarmi di CloudWatch delegano a CloudWatch la determinazione dello stato di integrità: sono utili quando non è possibile esporre un endpoint di integrità pubblico o quando servono decisioni sullo stato basate sulle metriche.

# Create endpoint health check
aws route53 create-health-check \
  --caller-reference ref-$(date +%s) \
  --health-check-config '{
    "Type": "HTTPS",
    "FullyQualifiedDomainName": "api.example.com",
    "Port": 443,
    "ResourcePath": "/health",
    "RequestInterval": 10,
    "FailureThreshold": 2,
    "EnableSNI": true
  }'

Controlli di integrità di Auto Scaling

Gli Auto Scaling Groups possono usare due tipi di controlli di integrità: i controlli di integrità EC2 rilevano i guasti delle istanze a livello di hypervisor (errore del controllo dello stato dell'istanza). I controlli di integrità di ELB sono più consapevoli dello stato dell'applicazione: un'istanza potrebbe essere in esecuzione ma restituire errori, e i controlli di integrità di ELB lo rilevano. È possibile configurare ASG affinché utilizzi i controlli di integrità di ELB, in modo che anche i guasti a livello applicativo attivino la sostituzione dell'istanza, non solo i guasti dell'infrastruttura EC2 sottostante.

# Configure ASG to use ELB health checks
aws autoscaling update-auto-scaling-group \
  --auto-scaling-group-name my-asg \
  --health-check-type ELB \
  --health-check-grace-period 300

# Grace period: time after launch before health checks start
# Prevents premature termination during startup

Il pattern del circuit breaker

Un circuit breaker è un pattern a livello applicativo che previene i guasti a cascata monitorando le chiamate a un servizio downstream e interrompendole temporaneamente quando i guasti superano una soglia. Il circuito ha tre stati: Closed (funzionamento normale), Open (la soglia di guasti è stata superata e le chiamate vengono bloccate immediatamente) e Half-Open (dopo un timeout, viene consentito un numero limitato di chiamate di test per verificare se il servizio è stato ripristinato). AWS App Mesh e SDK applicativi come Resilience4j implementano questo pattern.

# Circuit breaker states
# CLOSED: All calls pass through
#   failureCount < threshold -> stay CLOSED
#   failureCount >= threshold -> open circuit

# OPEN: All calls fail immediately
#   After timeout -> enter HALF-OPEN

# HALF-OPEN: Allow limited test calls
#   Success -> return to CLOSED
#   Failure -> return to OPEN

# Example threshold: 5 failures in 10 seconds -> OPEN

AWS App Mesh per il circuit breaker

AWS App Mesh è un service mesh che implementa circuit breaker, tentativi e criteri di timeout a livello infrastrutturale, senza modifiche al codice. È possibile definire i criteri del circuit breaker nella configurazione del virtual node o del virtual router. Quando un servizio upstream diventa non integro, il proxy Envoy di App Mesh apre automaticamente il circuito e restituisce immediatamente gli errori invece di attendere i timeout. Questo è particolarmente utile nelle architetture a microservizi eseguite su ECS o EKS.

# App Mesh virtual node with circuit breaker
# (JSON configuration)
{
  'spec': {
    'listeners': [{
      'outlierDetection': {
        'consecutiveErrors': 5,
        'interval': {'unit': 'ms', 'value': 10000},
        'baseEjectionDuration': {'unit': 's', 'value': 30},
        'maxEjectionPercent': 50
      }
    }]
  }
}

Logica dei tentativi e backoff esponenziale

La logica dei tentativi ripete automaticamente le operazioni non riuscite, ma una logica ingenua (un nuovo tentativo immediato in un ciclo serrato) può peggiorare le situazioni di sovraccarico. Il backoff esponenziale aumenta esponenzialmente il tempo di attesa tra i tentativi: 1s, 2s, 4s, 8s... Questo riduce il carico su un servizio in difficoltà e gli dà il tempo di riprendersi. Il jitter (la randomizzazione degli intervalli tra i tentativi) previene il problema dell'assalto simultaneo, in cui tutti i client riprovano contemporaneamente dopo una breve interruzione. AWS SDK implementa automaticamente il backoff esponenziale con jitter.

# AWS SDK retries with exponential backoff automatically
# Default retry config for most AWS services:
# Max retries: 3-5 (varies by service)
# Base delay: 100ms
# Max delay: ~20 seconds

# Python boto3 custom retry configuration
import boto3
from botocore.config import Config

config = Config(
    retries={'max_attempts': 5, 'mode': 'adaptive'}
)
client = boto3.client('s3', config=config)

Idempotenza per tentativi sicuri

I tentativi sono sicuri solo se le operazioni sono idempotenti, ovvero se l'esecuzione della stessa operazione più volte produce lo stesso risultato. Ad esempio, la creazione di un oggetto S3 con la stessa chiave è idempotente (produce lo stesso risultato). L'invio due volte di un ordine, invece, crea due ordini: non è idempotente. Progetti le API in modo idempotente usando chiavi di idempotenza fornite dal client: il server memorizza il risultato della prima richiesta e restituisce lo stesso risultato per le richieste successive con la stessa chiave. DynamoDB, SQS e API Gateway supportano i pattern basati sulle chiavi di idempotenza.

# SQS message deduplication ID for FIFO queues
aws sqs send-message \
  --queue-url https://sqs.us-east-1.amazonaws.com/123/orders.fifo \
  --message-body '{"orderId":"ord-123","items":[...]}' \
  --message-group-id 'customer-456' \
  --message-deduplication-id 'ord-123-attempt-1'

# SQS deduplicates messages with same ID for 5 minutes

Configurazione dei timeout

Senza timeout espliciti, un servizio downstream lento fa sì che i thread rimangano bloccati indefinitamente, esaurendo il pool di connessioni e causando guasti a cascata. Imposti i timeout a ogni livello: timeout di connessione (tempo necessario per stabilire la connessione TCP), timeout di lettura (tempo necessario per ricevere una risposta) e timeout complessivo della richiesta. In AWS, configuri il timeout di inattività di ELB (60 s per impostazione predefinita), il timeout di esecuzione di Lambda (massimo 15 min) e il timeout di integrazione di API Gateway (massimo 29 s). I timeout attivano la logica di tentativi o del circuit breaker.

# Lambda: set execution timeout
aws lambda update-function-configuration \
  --function-name my-function \
  --timeout 30

# ALB: configure idle timeout
aws elbv2 modify-load-balancer-attributes \
  --load-balancer-arn <ALB-ARN> \
  --attributes Key=idle_timeout.timeout_seconds,Value=60

# API Gateway: integration timeout max 29000ms

Dead Letter Queue per l'elaborazione non riuscita

Quando l'elaborazione dei messaggi non riesce ripetutamente, una Dead Letter Queue (DLQ) raccoglie i messaggi che non è stato possibile elaborare dopo il numero massimo di tentativi di ricezione. Configuri le DLQ per le code SQS e le mappature delle origini eventi di Lambda, per evitare che i messaggi problematici blocchino indefinitamente la coda. I messaggi nella DLQ possono essere analizzati, rielaborati dopo la correzione del bug o archiviati. Le DLQ sono un componente essenziale delle architetture resilienti basate sugli eventi.

# Configure DLQ on SQS queue
aws sqs set-queue-attributes \
  --queue-url https://sqs.us-east-1.amazonaws.com/123/main-queue \
  --attributes '{
    "RedrivePolicy": "{\"deadLetterTargetArn\":\"arn:aws:sqs:us-east-1:123:dlq\",\"maxReceiveCount\":3}"
  }'

# After 3 failed processing attempts, message goes to DLQ

Monitoraggio dei guasti con CloudWatch

Per comprendere i modelli di guasto, i controlli di integrità e i circuit breaker richiedono un monitoraggio efficace. CloudWatch è il livello di osservabilità: crei allarmi per ELB UnHealthyHostCount (istanze che non superano i controlli di integrità), la frequenza di Lambda Errors, SQS NumberOfMessagesSentToDLQ (messaggi inviati alla DLQ) e RequestCountPerTarget del gruppo di destinazioni. Configuri notifiche SNS affinché il team reperibile venga avvisato immediatamente quando i controlli di integrità automatici rilevano un degrado.

# CloudWatch alarm for unhealthy hosts
aws cloudwatch put-metric-alarm \
  --alarm-name 'ALB-UnhealthyHosts' \
  --alarm-description 'Alert when targets fail health checks' \
  --metric-name UnHealthyHostCount \
  --namespace AWS/ApplicationELB \
  --period 60 \
  --evaluation-periods 2 \
  --threshold 1 \
  --comparison-operator GreaterThanOrEqualToThreshold \
  --alarm-actions arn:aws:sns:us-east-1:123:ops-team

Verifica rapida

Verifichi la comprensione dei concetti AWS Solutions Architect (SAA-C03) presentati in questa lezione.

Riepilogo della lezione

In questa lezione ha imparato che: i controlli di integrità di ELB e Route 53 automatizzano il rilevamento dei guasti a livello infrastrutturale, i circuit breaker prevengono i guasti a cascata interrompendo le chiamate ai servizi non integri e il backoff esponenziale con jitter rende sicuri i tentativi in condizioni di carico. Le Dead Letter Queue raccolgono i messaggi non elaborati per consentirne l'analisi. Ora esamineremo RTO, RPO e i livelli di disaster recovery.

Domande Frequenti

La lezione «Controlli di integrità, circuit breaker e logica di retry» è gratuita?

Sì — il testo completo di «Controlli di integrità, circuit breaker e logica di retry» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso AWS Solutions Architect, passa a CoddyKit PRO. Il corso AWS Solutions Architect include 4 lezioni in totale.

Cosa imparerò in «Controlli di integrità, circuit breaker e logica di retry»?

Utilizzare i controlli di integrità di ELB, i controlli degli endpoint di Route 53 e i circuit breaker a livello applicativo per rilevare i guasti e reindirizzare automaticamente il traffico Eserciti AWS Solutions Architect con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare AWS Solutions Architect?

Non è richiesta alcuna esperienza precedente. AWS Solutions Architect su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 4 di 4.

Quanto tempo richiede la lezione «Controlli di integrità, circuit breaker e logica di retry»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione AWS Solutions Architect?

Sì. Ogni lezione AWS Solutions Architect include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Alta disponibilità e tolleranza ai guasti: definizioni e compromessi
  2. Pattern Multi-AZ per servizi stateful
  3. Active-active e active-passive in più Region
  4. Controlli di integrità, circuit breaker e logica di retry
← Torna a AWS Solutions Architect