0Pricing
AWS Solutions Architect · Lezione

Scenari di alte prestazioni e ottimizzazione dei costi

Rispondere a domande basate su scenari riguardanti strategie di caching, ottimizzazione delle query dei data lake, compromessi tra Reserved e Spot e architetture con read replica

Scenari di alte prestazioni e ottimizzazione dei costi è una lezione AWS Solutions Architect gratuita su CoddyKit. Questa è la lezione 3 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.

Scenario 1: caching per ridurre il carico del database

Scenario: Il database RDS MySQL di un sito di notizie gestisce il 90% di traffico in lettura per contenuti degli articoli che cambiano al massimo una volta all'ora. La CPU del database ha un utilizzo medio dell'80%, i costi stanno aumentando e la latenza per query è di 200ms. Soluzione: Aggiungere un cluster ElastiCache Redis davanti a RDS utilizzando il pattern lazy loading (cache-aside). L'applicazione controlla prima la cache: in caso di cache hit, restituisce l'articolo memorizzato in meno di 1ms. In caso di cache miss, interroga RDS, restituisce il risultato e lo scrive nella cache con un TTL di 1 ora. Risultato previsto: cache hit rate del 90%, CPU di RDS inferiore al 20% e latenza inferiore a 5ms per le risposte memorizzate nella cache.

import boto3, json

elasticache = boto3.client('elasticache')
redis_client = None  # assume redis-py client connected to ElastiCache endpoint

def get_article(article_id):
    cache_key = 'article:' + str(article_id)
    # Check cache first
    cached = redis_client.get(cache_key)
    if cached:
        return json.loads(cached)  # cache hit: <1ms
    # Cache miss: query RDS
    article = rds_query('SELECT * FROM articles WHERE id = %s', article_id)
    # Write to cache with 1-hour TTL
    redis_client.setex(cache_key, 3600, json.dumps(article))
    return article

Scenario 2: CloudFront per la distribuzione di risorse statiche

Scenario: Gli utenti dell'area Asia-Pacifico attendono 2-4 secondi per il caricamento di un'applicazione web ospitata su EC2 in us-east-1. L'applicazione distribuisce risorse statiche di grandi dimensioni, come immagini, JS e CSS. Soluzione: Posizionare una distribuzione CloudFront davanti all'ALB. Configurare un comportamento di caching per il percorso /static/* con un TTL lungo, ad esempio 1 settimana, in modo che i file statici vengano memorizzati nelle edge location CloudFront vicine agli utenti asiatici. Le richieste API dinamiche ignorano la cache con TTL=0. Gli utenti asiatici caricano le risorse statiche da un'edge location di Singapore o Tokyo in meno di 100ms, invece di attendere i round trip verso us-east-1.

# CloudFront origin for ALB + separate behaviour for static assets
aws cloudfront create-distribution --distribution-config '{
  'Origins': {
    'Quantity': 1,
    'Items': [{
      'Id': 'alb-origin',
      'DomainName': 'my-alb.us-east-1.elb.amazonaws.com',
      'CustomOriginConfig': {"HTTPSPort": 443, "OriginProtocolPolicy": "https-only"}
    }]
  },
  'CacheBehaviors': {
    'Quantity': 1,
    'Items': [{
      'PathPattern': '/static/*',
      'DefaultTTL': 604800,
      'MaxTTL': 604800
    }]
  },
  'DefaultCacheBehavior': {"DefaultTTL": 0}
}'

Scenario 3: dimensionamento corretto con Compute Optimizer

Scenario: Un'azienda dispone di 500 istanze EC2, molte delle quali sono state configurate 3 anni fa con tipi di istanza sovradimensionati. La fattura AWS è elevata, ma l'azienda non sa quali istanze siano sovradimensionate. Soluzione: Abilitare AWS Compute Optimizer, che è gratuito e utilizza 14 giorni di metriche CloudWatch. Compute Optimizer analizza l'utilizzo effettivo di CPU, memoria, rete e disco di ogni istanza e fornisce consigli per il dimensionamento corretto. Per una t3.xlarge con un utilizzo medio della CPU dell'8% verrebbe consigliato il ridimensionamento a t3.small. Applicando i consigli a tutte le 500 istanze, in genere i costi EC2 si riducono del 20–40%.

# Enable Compute Optimizer at account level
aws compute-optimizer update-enrollment-status \
  --status Active

# Get EC2 instance recommendations
aws compute-optimizer get-ec2-instance-recommendations \
  --filters Name=Finding,Values=OVER_PROVISIONED \
  --query 'instanceRecommendations[*].{Instance: instanceArn, Current: currentInstanceType, Recommended: recommendationOptions[0].instanceType}' \
  --output table

Scenario 4: Spot Instance per l'elaborazione batch

Scenario: Un'azienda di genomica esegue processi batch notturni che durano 8 ore e possono essere ripetuti se interrotti. Il costo EC2 On-Demand per questi processi è di 10.000 $ al mese. Soluzione: Utilizzare EC2 Spot Instances per il parco dedicato all'elaborazione batch. Le Spot Instances utilizzano capacità EC2 inutilizzata disponibile con uno sconto fino al 90%. Per i processi batch tolleranti alle interruzioni, utilizzare AWS Batch, che accoda nuovamente automaticamente i processi Spot non riusciti e utilizza un parco misto, composto da Spot e da un fallback On-Demand minimo. Risparmio previsto: riduzione del 70–90% dei costi di calcolo, da 10.000 $ a 1.000–3.000 $ al mese.

# AWS Batch compute environment with Spot instances
aws batch create-compute-environment \
  --compute-environment-name spot-genomics \
  --type MANAGED \
  --state ENABLED \
  --compute-resources '{
    "type": "SPOT",
    "bidPercentage": 60,
    "minvCpus": 0,
    "maxvCpus": 256,
    "instanceTypes": ["optimal"],
    "subnets": ["subnet-1a", "subnet-1b"],
    "securityGroupIds": ["sg-batch"],
    "instanceRole": "arn:aws:iam::123456789012:instance-profile/ecsInstanceRole",
    "spotIamFleetRole": "arn:aws:iam::123456789012:role/AmazonEC2SpotFleetRole"
  }' \
  --service-role arn:aws:iam::123456789012:role/AWSBatchServiceRole

Scenario 5: DynamoDB On-Demand per traffico variabile

Scenario: Una classifica di gioco utilizza DynamoDB con throughput assegnato. Durante il lancio dei giochi, il traffico aumenta di 50 volte e la tabella limita le richieste. Al di fuori dei lanci, il throughput è quasi nullo e la capacità assegnata viene sprecata. Soluzione: Passare DynamoDB alla modalità di capacità On-Demand. On-Demand si adatta istantaneamente a qualsiasi throughput senza pianificazione manuale della capacità e addebita i costi per richiesta anziché per unità assegnata. Si paga solo per le richieste effettuate, senza costi per capacità inutilizzata tra un lancio e l'altro. On-Demand comporta un costo per richiesta leggermente superiore, ma garantisce l'assenza di throttling e nessuna gestione della capacità.

# Switch existing DynamoDB table to On-Demand mode
aws dynamodb update-table \
  --table-name Leaderboard \
  --billing-mode PAY_PER_REQUEST

# Verify the change
aws dynamodb describe-table \
  --table-name Leaderboard \
  --query 'Table.BillingModeSummary.BillingMode'

Scenario 6: S3 Intelligent-Tiering per accessi imprevedibili

Scenario: Un'azienda archivia milioni di immagini generate dagli utenti in S3 Standard. I modelli di accesso sono imprevedibili: alcune immagini vengono consultate ogni giorno, altre non vengono consultate per mesi. L'azienda vuole ridurre i costi di archiviazione senza gestire manualmente le policy del ciclo di vita. Soluzione: utilizzare S3 Intelligent-Tiering. Il servizio sposta automaticamente gli oggetti tra i diversi tier in base ai modelli di accesso: Frequent Access (Standard), Infrequent Access (nessun accesso da almeno 30 giorni), Archive Instant Access (90+ giorni) e Archive Access (90+ giorni, con attivazione esplicita). Intelligent-Tiering non applica costi di recupero. Il costo di monitoraggio è di 0,0025 $ per 1.000 oggetti al mese, trascurabile per dataset di grandi dimensioni.

# Move objects to Intelligent-Tiering via lifecycle policy
aws s3api put-bucket-lifecycle-configuration \
  --bucket user-images-bucket \
  --lifecycle-configuration '{
    "Rules": [{
      "ID": "AutoTier",
      "Status": "Enabled",
      "Filter": {},
      "Transitions": [{
        "Days": 0,
        "StorageClass": "INTELLIGENT_TIERING"
      }]
    }]
  }'

Scenario 7: compromesso tra Athena e Redshift

Scenario: Una startup vuole eseguire query sulle tabelle di un data lake S3. Esegue circa 10 query ad hoc alla settimana. Un fornitore propone Amazon Redshift con un cluster dc2.large. Soluzione per una startup: iniziare con Amazon Athena: nessun costo per l'infrastruttura e pagamento solo dei dati analizzati (circa 5 $/TB). 10 query alla settimana su dati Parquet ben partizionati potrebbero costare meno di 5 $ al mese. Redshift dc2.large costa circa 180 $ al mese in modo continuativo. Redshift diventa conveniente solo quando la concorrenza delle query è elevata (50+ query al giorno) oppure è richiesta una risposta in meno di un secondo. La parola chiave «ad hoc, infrequenti» indica chiaramente Athena.

# Athena cost estimate for 10 queries/week:
# Assume each query scans 5 GB of Parquet data
# 10 queries x 5 GB = 50 GB / week = 200 GB / month
# Athena cost: 200 GB x $0.005/GB = $1.00 / month
#
# Redshift dc2.large cost: $0.25/hr x 24hr x 30days = $180/month
#
# For 10 queries/week -> Athena saves $179/month
# Breakeven: when queries scan >36 TB/month or concurrency >50/day -> use Redshift

Scenario 8: scelta del tipo di volume EBS

Scenario: Un server di database relazionale richiede 64.000 IOPS con latenza ridotta e costante. Il volume EBS gp3 attuale sta raggiungendo il proprio limite di IOPS. Soluzione: eseguire l'upgrade a io2 Block Express (tipo di volume EBS progettato per database con carichi I/O intensivi). io2 Block Express supporta fino a 256.000 IOPS per volume e una latenza inferiore al millisecondo. È più costoso di gp3 (0,125 $/GB + 0,065 $/IOPS provisioned al mese), ma è l'unica opzione EBS che soddisfa requisiti di almeno 64.000 IOPS. Per i carichi di lavoro dei database in cui la latenza è critica e il limite di 16.000 IOPS di gp3 non è sufficiente, io2 è l'unica scelta EBS praticabile.

# Create io2 Block Express volume with 64,000 IOPS
aws ec2 create-volume \
  --volume-type io2 \
  --size 500 \
  --iops 64000 \
  --availability-zone us-east-1a \
  --encrypted

# EBS volume type IOPS limits summary:
# gp3: up to 16,000 IOPS (default 3,000, configurable)
# io1: up to 64,000 IOPS (on Nitro instances)
# io2 Block Express: up to 256,000 IOPS
# st1 (throughput HDD): no IOPS focus, max 500 MB/s throughput
# sc1 (cold HDD): lowest cost, 250 MB/s max, rarely accessed data

Scenario 9: Reserved Instances per carichi di lavoro costanti

Scenario: Un'azienda esegue continuamente 20 istanze EC2 r6i.4xlarge per un'applicazione di produzione e prevede che i requisiti rimangano invariati per 3 anni. Il costo attuale On-Demand per queste istanze è di 80.000 $ all'anno. Soluzione: acquistare Standard Reserved Instances di 3 anni (oppure Compute Savings Plans) con pagamento All Upfront per ottenere lo sconto massimo. Le Standard Reserved Instances offrono uno sconto fino al 72% rispetto a On-Demand. Le istanze sono in esecuzione 24 ore su 24, 7 giorni su 7, con un carico di lavoro prevedibile: il profilo tipico per le Reserved Instances. Riduzione dei costi prevista: 80.000 $ × 0,72 = 22.400 $ all'anno rispetto agli 80.000 $ all'anno di On-Demand, con un risparmio di 57.600 $ all'anno.

# Reserved Instance purchase decision matrix:
# On-Demand:          No commitment, highest price, any workload
# 1-yr RI (All Up):   40% discount, 1-yr commitment, specific instance type
# 3-yr RI (All Up):   60-72% discount, 3-yr commitment, best for stable workloads
# Compute Savings Plan: 66% max discount, flexible instance family/size/Region
# EC2 Spot:           90% discount, interruptible, batch/stateless only
#
# Rule: if usage > 70% of the time for >1 year -> buy RI or Savings Plan
# Rule: if usage < 50% -> stick with On-Demand
# Rule: if usage pattern is steady 3yr -> 3yr RI All Upfront maximises savings

Scenario 10: costi di Lambda rispetto a EC2 per traffico variabile

Scenario: Un'azienda esegue una REST API su un'istanza EC2 t3.micro che costa 8 $ al mese. L'API riceve 1 milione di richieste al mese, ognuna con un tempo di elaborazione di 100 ms. Il team chiede se Lambda sarebbe più economico. Analisi: costo di Lambda: 1.000.000 di richieste × 0,0000002 $ = 0,20 $ (costo delle richieste) + 1.000.000 × 0,1 s × 128 MB di memoria × tariffa = circa 1,67 $ (costo di calcolo) = circa 1,87 $ al mese. Lambda è più economico di EC2 per questa API a basso traffico. Quando il traffico supera circa 40 milioni di richieste al mese, EC2 diventa più conveniente. Utilizzare il Lambda Cost Calculator per trovare il punto di pareggio per ogni carico di lavoro.

# Lambda vs EC2 cost rough break-even calculation:
# Lambda costs: $0.20 per 1M requests + $0.0000166667 per GB-second
# At 128 MB memory, 100ms duration:
#   GB-seconds per request = 0.128 GB x 0.1s = 0.0128 GB-s
#   Cost per request = $0.0000166667 x 0.0128 = $0.000000213 compute
#   + $0.0000002 request fee = $0.000000413 total per request
#
# EC2 t3.micro: $0.0104/hr x 720 hrs = $7.49/month
# Break-even: $7.49 / $0.000000413 = ~18 million requests/month
# Below 18M requests/month -> Lambda cheaper
# Above 18M requests/month -> EC2 cheaper (if utilisation is high)

Scenario 11: Global Accelerator per API dinamiche

Scenario: Un'API globale che serve utenti in Europa, negli Stati Uniti e in Asia presenta una latenza incoerente perché il traffico attraversa percorsi Internet imprevedibili. È stato preso in considerazione CloudFront, ma le risposte dell'API sono dinamiche e non possono essere memorizzate nella cache. Soluzione: utilizzare AWS Global Accelerator. Il servizio fornisce globalmente due anycast IP addresses statici. Il traffico degli utenti entra nel backbone globale AWS dalla AWS edge location più vicina e viaggia sulla rete privata AWS fino all'origine nella Regione di destinazione, evitando il tratto centrale congestionato della rete Internet pubblica. Global Accelerator migliora del 20-60% i tempi di risposta delle API dinamiche e fornisce un failover immediato quando un endpoint regionale non è integro.

# Create a Global Accelerator for an ALB
aws globalaccelerator create-accelerator \
  --name my-api-accelerator \
  --ip-address-type IPV4 \
  --enabled

# Add a listener and endpoint group pointing to ALB
aws globalaccelerator create-listener \
  --accelerator-arn arn:aws:globalaccelerator::123:accelerator/abc \
  --protocol TCP \
  --port-ranges '[{"FromPort": 443, "ToPort": 443}]'

# Endpoint group in us-east-1 with ALB
aws globalaccelerator create-endpoint-group \
  --listener-arn arn:aws:globalaccelerator::123:listener/xyz \
  --endpoint-group-region us-east-1 \
  --endpoint-configurations '[{"EndpointId": "arn:aws:elasticloadbalancing:...", "Weight": 100}]'

Verifica rapida

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

Riepilogo della lezione

In questa lezione ha affrontato scenari riguardanti: il lazy loading di ElastiCache per ridurre l'utilizzo della CPU di RDS dall'80% al 20%, Spot Instances e AWS Batch per risparmiare il 70-90% sui costi dei job batch, Athena per query ad hoc poco frequenti rispetto a Redshift per analisi ad alta concorrenza e S3 Intelligent-Tiering per modelli di accesso imprevedibili senza costi di recupero. Il prossimo argomento è il capstone finale: un mini esame a tempo con domande miste per valutare la Sua preparazione.

Domande Frequenti

La lezione «Scenari di alte prestazioni e ottimizzazione dei costi» è gratuita?

Sì — il testo completo di «Scenari di alte prestazioni e ottimizzazione dei costi» è 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 «Scenari di alte prestazioni e ottimizzazione dei costi»?

Rispondere a domande basate su scenari riguardanti strategie di caching, ottimizzazione delle query dei data lake, compromessi tra Reserved e Spot e architetture con read replica 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 3 di 4.

Quanto tempo richiede la lezione «Scenari di alte prestazioni e ottimizzazione dei costi»?

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. 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 AWS Solutions Architect