0Pricing
Cloud & IT Cert Prep · Lezione

Scenari di architetture resilienti e ad alta disponibilità

Affrontare scenari di failover di database Multi-AZ, auto scaling in presenza di traffico improvviso e failover con controlli di integrità di Route 53 per consolidare i concetti di affidabilità

Scenari di architetture resilienti e ad alta disponibilità è una lezione Cloud & IT Cert Prep gratuita su CoddyKit. Questa è la lezione 2 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 Cloud & IT Cert Prep, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Cloud & IT Cert Prep include 4 lezioni in totale.

Scenario 1: applicazione web multi-AZ

Scenario: Un'azienda esegue un'applicazione web a due livelli (ALB → EC2 → RDS) e vuole eliminare ogni singolo punto di errore all'interno della Regione AWS. Soluzione: Distribuire le istanze EC2 in un Auto Scaling Group che si estende su almeno 2 Availability Zone dietro un ALB, che è nativamente multi-AZ. Abilitare RDS Multi-AZ per la replica sincrona in standby. Configurare i controlli dello stato sull'ALB per instradare automaticamente il traffico lontano dalle istanze non integre. Con questa architettura, la perdita di una singola AZ attiva il failover automatico a ogni livello.

# Create RDS with Multi-AZ enabled
aws rds create-db-instance \
  --db-instance-identifier prod-mysql \
  --db-instance-class db.t3.large \
  --engine mysql \
  --multi-az \
  --master-username admin \
  --master-user-password Pass123! \
  --allocated-storage 100

# Create ASG across 3 AZs
aws autoscaling create-auto-scaling-group \
  --auto-scaling-group-name web-asg \
  --min-size 2 --max-size 10 --desired-capacity 3 \
  --availability-zones us-east-1a us-east-1b us-east-1c \
  --target-group-arns arn:aws:elasticloadbalancing:us-east-1:123:targetgroup/web-tg/abc

Scenario 2: scalabilità in lettura di RDS sotto carico

Scenario: L'istanza RDS di un'applicazione di e-commerce raggiunge i limiti della CPU durante le ore di punta a causa di query di analisi ad alta intensità di lettura eseguite dal team di business intelligence. Soluzione: Creare delle RDS Read Replicas e indirizzare le query BI all'endpoint della replica. Le Read Replica utilizzano la replica asincrona: per le analisi è accettabile un lieve ritardo. In questo modo il traffico di lettura viene scaricato dall'istanza RDS primaria, riservata alle operazioni di scrittura e alle letture dell'applicazione. Per carichi di lavoro con un'intensità di lettura estremamente elevata, aggiungere un livello ElastiCache davanti a RDS per i dati consultati di frequente.

# Create a Read Replica from the primary RDS instance
aws rds create-db-instance-read-replica \
  --db-instance-identifier prod-mysql-replica \
  --source-db-instance-identifier prod-mysql \
  --db-instance-class db.t3.large \
  --availability-zone us-east-1b

# Application code: use replica endpoint for reads
# Primary endpoint: prod-mysql.cluster.us-east-1.rds.amazonaws.com (writes)
# Replica endpoint: prod-mysql-replica.xyz.us-east-1.rds.amazonaws.com (reads)

Scenario 3: Auto Scaling in caso di picco della CPU

Scenario: Un'API stateless viene eseguita su EC2 dietro un ALB. L'utilizzo della CPU raggiunge il 90% durante l'orario lavorativo e scende quasi a zero di notte. L'azienda vuole che il parco di istanze venga dimensionato automaticamente. Soluzione: Configurare un Auto Scaling Group con una policy di scaling Target Tracking che punti a un utilizzo medio della CPU del 60%. ASG aggiungerà automaticamente istanze quando la CPU supera il 60% e le rimuoverà quando scende sotto il valore obiettivo. Aggiungere un'azione di scaling pianificata per preriscaldare la capacità minima prima dell'inizio dell'orario lavorativo, evitando rallentamenti durante il picco di traffico mattutino.

# Target tracking policy: scale to keep CPU at 60%
aws autoscaling put-scaling-policy \
  --auto-scaling-group-name api-asg \
  --policy-name cpu-tracking \
  --policy-type TargetTrackingScaling \
  --target-tracking-configuration '{
    "PredefinedMetricSpecification": {"PredefinedMetricType": "ASGAverageCPUUtilization"},
    "TargetValue": 60.0,
    "DisableScaleIn": false
  }'

# Scheduled action: pre-warm to 5 instances at 8 AM weekdays
aws autoscaling put-scheduled-update-group-action \
  --auto-scaling-group-name api-asg \
  --scheduled-action-name morning-scale-out \
  --recurrence '0 8 * * MON-FRI' \
  --min-size 5

Scenario 4: failover di Route 53 verso il sito di DR

Scenario: Un'azienda esegue un'applicazione web primaria in us-east-1 e vuole eseguire il failover verso una pagina di manutenzione statica ospitata su S3 in us-west-2 se il sistema primario non è integro. Soluzione: Creare un controllo dello stato di Route 53 che monitori l'endpoint dell'ALB primario. Creare due record Route 53 con una policy di routing di failover: il record primario punta all'ALB ed è associato al controllo dello stato, mentre il record secondario punta al sito statico su S3. Se il controllo dello stato fallisce, Route 53 restituisce automaticamente la risposta DNS del record secondario.

# Create Route 53 health check for primary ALB
aws route53 create-health-check \
  --caller-reference $(date +%s) \
  --health-check-config '{
    "Type": "HTTPS",
    "FullyQualifiedDomainName": "app.example.com",
    "Port": 443,
    "RequestInterval": 30,
    "FailureThreshold": 3
  }'

# Primary failover record (associated with health check)
# Secondary failover record -> S3 static website endpoint
# Route 53 automatically switches if health check fails

Scenario 5: disaccoppiamento con SQS per la resilienza

Scenario: Un backend di elaborazione degli ordini scrive in un database, ma il database a volte non è disponibile durante le finestre di manutenzione, causando la perdita degli ordini. Soluzione: Inserire una coda SQS tra il front end, che accetta gli ordini, e il backend, che li elabora. Gli ordini vengono inseriti immediatamente nella coda, fornendo al cliente una conferma istantanea. I worker in background prelevano gli ordini dalla coda e li elaborano quando il database è disponibile. Durante la manutenzione, gli ordini si accumulano nella coda invece di essere eliminati, garantendo resilienza grazie al disaccoppiamento asincrono.

# SQS-based order decoupling pattern
# 1. Frontend: PUT order to SQS (returns 200 immediately to customer)
aws sqs send-message \
  --queue-url https://sqs.us-east-1.amazonaws.com/123/orders \
  --message-body '{"orderId": "ORD-123", "items": [...]}'

# 2. Backend worker: polls SQS when DB is available
aws sqs receive-message \
  --queue-url https://sqs.us-east-1.amazonaws.com/123/orders \
  --max-number-of-messages 10

# 3. On success: delete message from queue
# 4. On failure: visibility timeout expires -> message reappears for retry
# 5. After max retries: message goes to Dead Letter Queue (DLQ)

Scenario 6: DR Pilot Light

Scenario: Un'azienda necessita di una soluzione di disaster recovery con un RPO di 1 ora e un RTO di 4 ore, disponendo di un budget moderato. Soluzione: Implementare una strategia DR Pilot Light. Mantenere il database principale replicato nella Regione DR utilizzando una RDS Cross-Region Read Replica. I server applicativi non vengono eseguiti nella Regione DR durante il normale funzionamento: viene mantenuto attivo solo il componente 'core' minimo, cioè il database. In caso di disastro, promuovere la Read Replica a istanza autonoma e avviare i server applicativi da AMI precreate utilizzando CloudFormation. L'RTO è dell'ordine delle ore, anziché dei minuti, perché è necessario avviare i server.

# Pilot Light: replicate database to DR Region
aws rds create-db-instance-read-replica \
  --db-instance-identifier prod-mysql-dr \
  --source-db-instance-identifier prod-mysql \
  --db-instance-class db.t3.large \
  --source-region us-east-1 \
  --destination-region us-west-2

# During disaster: promote replica in us-west-2 to standalone
aws rds promote-read-replica \
  --db-instance-identifier prod-mysql-dr \
  --region us-west-2
# Then launch app servers from AMIs using CloudFormation in us-west-2

Scenario 7: coda SQS di messaggi non recapitabili per i messaggi non elaborati

Scenario: I messaggi in una coda SQS non vengono elaborati ripetutamente a causa di un bug nella Lambda consumer. I messaggi continuano a ricomparire e a bloccare la coda. Soluzione: Configurare una Dead-Letter Queue (DLQ) sulla coda principale. Dopo che un messaggio non è stato elaborato per un numero configurabile di volte (maxReceiveCount), SQS lo sposta automaticamente nella DLQ invece di riconsegnarlo all'infinito. In questo modo la coda principale resta disponibile per i messaggi corretti. Impostare un allarme CloudWatch sulla metrica ApproximateNumberOfMessagesVisible della DLQ per avvisare il team di sviluppo quando i messaggi iniziano ad accumularsi nella DLQ.

# Set redrive policy to move failed messages to DLQ after 3 attempts
aws sqs set-queue-attributes \
  --queue-url https://sqs.us-east-1.amazonaws.com/123/orders \
  --attributes '{
    "RedrivePolicy": "{\"deadLetterTargetArn\": \"arn:aws:sqs:us-east-1:123:orders-dlq\", \"maxReceiveCount\": \"3\"}"
  }'

# CloudWatch alarm on DLQ depth
aws cloudwatch put-metric-alarm \
  --alarm-name orders-dlq-depth \
  --metric-name ApproximateNumberOfMessagesVisible \
  --namespace AWS/SQS \
  --dimensions Name=QueueName,Value=orders-dlq \
  --threshold 1 --comparison-operator GreaterThanOrEqualToThreshold \
  --evaluation-periods 1 --period 60 --statistic Sum

Scenario 8: database globale Aurora

Scenario: Un'azienda opera negli Stati Uniti e in Europa. Gli utenti europei riscontrano un'elevata latenza nelle letture del database perché RDS si trova in us-east-1. Soluzione: Utilizzare Amazon Aurora Global Database. Il cluster primario si trova in us-east-1; in eu-west-1 viene aggiunto un cluster secondario di sola lettura. Aurora replica i dati nella Regione secondaria con una latenza tipica inferiore a 1 secondo, utilizzando la replica a livello di storage. Gli utenti europei leggono dal cluster secondario in eu-west-1. In caso di disastro regionale, il secondario può essere promosso a primario in meno di 1 minuto, il miglior RTO tra tutte le opzioni di database multi-Regione di AWS.

# Add a secondary region to an Aurora Global Database
aws rds create-global-cluster \
  --global-cluster-identifier prod-global \
  --source-db-cluster-identifier arn:aws:rds:us-east-1:123:cluster:prod-aurora

# Add secondary Region cluster
aws rds create-db-cluster \
  --db-cluster-identifier prod-aurora-eu \
  --engine aurora-postgresql \
  --global-cluster-identifier prod-global \
  --region eu-west-1

Scenario 9: servizio ECS con ALB e Auto Scaling

Scenario: Un servizio API containerizzato in esecuzione su ECS Fargate deve scalare in base all'utilizzo della CPU e resistere ai guasti delle AZ. Soluzione: Registrare il servizio ECS in un gruppo target dell'Application Load Balancer in modo che il traffico venga distribuito tra i task in esecuzione. Distribuire i task su più AZ specificando più subnet nella configurazione del servizio. Configurare ECS Service Auto Scaling con una policy Target Tracking sull'utilizzo della CPU del servizio ECS, per aumentare e ridurre automaticamente il numero di task. Se un'AZ si guasta, ECS riavvia i task non riusciti nelle AZ integre.

# Create ECS Fargate service with ALB and multi-AZ placement
aws ecs create-service \
  --cluster prod-cluster \
  --service-name api-service \
  --task-definition api-task:5 \
  --desired-count 3 \
  --launch-type FARGATE \
  --network-configuration '{
    "awsvpcConfiguration": {
      "subnets": ["subnet-1a", "subnet-1b", "subnet-1c"],
      "securityGroups": ["sg-app"],
      "assignPublicIp": "DISABLED"
    }
  }' \
  --load-balancers '[{
    "targetGroupArn": "arn:...:targetgroup/api-tg/abc",
    "containerName": "api",
    "containerPort": 8080
  }]'

Scenario 10: failover tramite controllo dello stato con Route 53

Scenario: Un'azienda esegue due istanze EC2 in AZ diverse che servono lo stesso dominio. Vuole che Route 53 smetta automaticamente di inviare traffico a un'istanza non integra. Soluzione: Utilizzare il Weighted Routing di Route 53 con pesi uguali (50/50) e associare un controllo dello stato dell'endpoint a ciascun record. Quando Route 53 rileva che un endpoint non è integro, rimuove il relativo record dalle risposte DNS e invia il 100% del traffico all'endpoint integro. Quando l'istanza torna disponibile e i controlli dello stato hanno nuovamente esito positivo, Route 53 riequilibra automaticamente il traffico: non sono necessarie modifiche DNS manuali.

# Route 53 weighted record with health check association
aws route53 change-resource-record-sets \
  --hosted-zone-id Z1234567890 \
  --change-batch '{
    "Changes": [{
      "Action": "UPSERT",
      "ResourceRecordSet": {
        "Name": "app.example.com",
        "Type": "A",
        "SetIdentifier": "instance-1a",
        "Weight": 50,
        "HealthCheckId": "hc-abc123",
        "TTL": 30,
        "ResourceRecords": [{"Value": "10.0.1.10"}]
      }
    }]
  }'

Scenario 11: DynamoDB Global Tables per l'alta disponibilità multi-Regione

Scenario: Un'applicazione di gioco mobile deve consentire la lettura e la scrittura dei dati dei giocatori con bassa latenza sia da us-east-1 sia da ap-southeast-1. Una tabella DynamoDB in una singola Regione causa un'elevata latenza per gli utenti asiatici. Soluzione: Abilitare DynamoDB Global Tables. Global Tables replica automaticamente i dati nelle Regioni specificate utilizzando la replica multi-master: qualsiasi Regione può accettare scritture. Gli utenti asiatici scrivono e leggono dalla replica in ap-southeast-1 con latenza locale (~5ms). Global Tables gestisce la risoluzione dei conflitti utilizzando una strategia 'vince l'ultima scrittura', basata sui timestamp. L'RTO per un guasto regionale completo è quasi nullo: il traffico viene semplicemente indirizzato alla Regione ancora disponibile.

# Convert a DynamoDB table to a Global Table
# (table must exist in all target Regions first)
aws dynamodb create-global-table \
  --global-table-name PlayerData \
  --replication-group '[{"RegionName": "us-east-1"}, {"RegionName": "ap-southeast-1"}]'

# Add another Region to an existing Global Table
aws dynamodb update-global-table \
  --global-table-name PlayerData \
  --replica-updates '[{"Create": {"RegionName": "eu-west-1"}}]'

Verifica rapida

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

Riepilogo della lezione

In questa lezione ha affrontato scenari riguardanti: ASG e RDS multi-AZ per l'alta disponibilità all'interno della Regione, il routing di failover di Route 53 per il DR tra Regioni, SQS DLQ per isolare i messaggi non elaborati senza bloccare le code e Aurora Global Database per la scalabilità in lettura tra Regioni e il failover con RTO inferiore al minuto. Ora affronteremo scenari di architetture ad alte prestazioni e ottimizzate in termini di costi.

Domande Frequenti

La lezione «Scenari di architetture resilienti e ad alta disponibilità» è gratuita?

Sì — il testo completo di «Scenari di architetture resilienti e ad alta disponibilità» è 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 Cloud & IT Cert Prep, passa a CoddyKit PRO. Il corso Cloud & IT Cert Prep include 4 lezioni in totale.

Cosa imparerò in «Scenari di architetture resilienti e ad alta disponibilità»?

Affrontare scenari di failover di database Multi-AZ, auto scaling in presenza di traffico improvviso e failover con controlli di integrità di Route 53 per consolidare i concetti di affidabilità Eserciti Cloud & IT Cert Prep 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 Cloud & IT Cert Prep?

Non è richiesta alcuna esperienza precedente. Cloud & IT Cert Prep su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 4.

Quanto tempo richiede la lezione «Scenari di architetture resilienti e ad alta disponibilità»?

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 Cloud & IT Cert Prep?

Sì. Ogni lezione Cloud & IT Cert Prep 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. Scenari di architetture sicure
  2. Scenari di architetture resilienti e ad alta disponibilità
  3. Scenari di alte prestazioni e ottimizzazione dei costi
  4. Mini esame completo misto per domini
← Torna a Cloud & IT Cert Prep