Corso
Padroneggiare AWS può essere impegnativo, soprattutto quando si tratta di capire due dei suoi servizi principali: Amazon Simple Queue Service (SQS) e Amazon Simple Notification Service (SNS).
Sebbene entrambi i servizi siano integrali nelle soluzioni cloud, sono spesso fraintesi e usati in modo improprio.
In questo articolo analizzerò i ruoli di SQS e SNS, individuerò somiglianze e differenze e mostrerò come usarli insieme per costruire architetture cloud ad alte prestazioni.
SQS vs SNS: risposta breve
Se vai di fretta, ecco le differenze principali:
- SQS è un servizio di coda di messaggi basato su polling per disaccoppiare i servizi, con supporto per comunicazione A2A e conservazione dei messaggi.
- SNS è un servizio di notifiche basato su push per messaggistica in tempo reale, con supporto sia per comunicazione A2A che A2P.
Continua a leggere per una spiegazione più dettagliata, con casi d'uso, diagrammi architetturali e best practice!
Che cos'è Amazon SQS?
Amazon Simple Queue Service (SQS) è un servizio di accodamento dei messaggi completamente gestito che facilita la comunicazione tra componenti software. SQS usa code per disaccoppiare i microservizi, permettendoti di creare workflow asincroni nelle applicazioni.
SQS prevede tre componenti fondamentali:
- Producer: applicazioni che inviano messaggi alla coda.
- Code: una coda archivia i messaggi finché non vengono elaborati. Il periodo di conservazione può variare da 60 secondi a 14 giorni.
- Consumer: servizi che ricevono i messaggi dalla coda.

Diagramma dell'architettura di Amazon SQS, con i componenti principali. Immagine dell'autore.
SQS offre due tipi di code di messaggi:
- Code Standard offrono throughput illimitato, consegna almeno-una-volta (cioè un messaggio viene sempre consegnato) e best-effort ordering.
- Code FIFO offrono alto throughput, elaborazione esattamente-una-volta e consegna first-in-first-out (cioè i messaggi sono ricevuti nell'esatto ordine di invio).
Per maggiori informazioni su questi tipi di code, visita la documentazione AWS.
Amazon SQS è progettato con persistenza dei messaggi per archiviare in modo sicuro tutti i messaggi fino alla loro elaborazione, evitando perdite. SQS consente innanzitutto vari tentativi di elaborazione per un dato messaggio. Se un messaggio non può essere elaborato dopo tutti i tentativi, puoi archiviare quelli non elaborati in una dead-letter queue, che potrà essere esaminata e riprocessata.
Disaccoppiando le applicazioni, Amazon SQS offre numerosi vantaggi. Gestisce un elevato throughput di messaggi, garantendo alte prestazioni anche con carichi di traffico maggiori. Inoltre, consente uno scaling indipendente, assicurando a ciascun servizio le risorse necessarie in base alle proprie esigenze. Migliora anche sicurezza e durabilità, crittografando i messaggi e archiviandoli su server multipli.
Per approfondire questo sistema di accodamento, dai un'occhiata alla nostra guida completa su SQS.
Che cos'è Amazon SNS?
Amazon Simple Notification Service (SNS) è un servizio di messaggistica completamente gestito che supporta la comunicazione application-to-application (A2A) e application-to-person (A2P). È progettato per notifiche in tempo reale e recapita messaggi ad applicazioni e utenti finali in modo scalabile ed efficiente.
Analogamente a SQS, Amazon SNS supporta la persistenza dei messaggi permettendo di creare dead-letter queue per archiviare i messaggi che non possono essere elaborati.
Amazon SNS utilizza un modello di messaggistica publish/subscribe (pub/sub) e comprende 3 parti:
- Publisher: un sistema che crea e invia messaggi a un topic SNS.
- Topic: un punto di accesso che abilita la consegna dei messaggi a più endpoint.
- Subscriber: un subscriber, o consumer, è un endpoint che riceve un messaggio dal topic.

Diagramma dell'architettura del modello di messaggistica SNS. Fonte immagine: AWS
SNS è altamente performante e può inviare messaggi a più subscriber simultaneamente. Per la comunicazione A2A, SNS può recapitare messaggi a AWS Lambda, Amazon Kinesis Firehose e anche ad Amazon SQS. Per la comunicazione A2P, SNS può inviare messaggi direttamente agli utenti via SMS, email o push notification.
Se vuoi padroneggiare AWS e integrare molti dei suoi servizi per creare soluzioni ottimali, valuta il corso AWS Cloud Technology and Services.
Funzionalità come sistemi di allerta, architetture fan-out e notifiche in tempo reale contribuiscono all'elevata robustezza e affidabilità di Amazon SNS. Grazie all'alto throughput di messaggi e alla capacità di supportare comunicazioni A2A e A2P, SNS è spesso un componente fondamentale nelle architetture event-driven.
Differenze fondamentali tra SQS e SNS
Scegliere tra SQS e SNS richiede una solida comprensione delle differenze tra questi servizi di messaggistica. Questa sezione illustra i principali criteri che li distinguono.
Push vs. polling
Amazon SQS utilizza un sistema basato su polling in cui i consumer interrogano periodicamente la coda per verificare la presenza di nuovi messaggi.
Amazon SNS, un sistema basato su push, invia automaticamente i messaggi ai subscriber non appena vengono pubblicati su un topic.
Tipi di destinatari
Amazon SQS supporta esclusivamente la comunicazione A2A, permettendo di inviare messaggi ad altri servizi AWS, come AWS EC2, AWS Lambda, AWS RDS e AWS Redshift.
Amazon SNS supporta comunicazioni A2A e A2P, inviando messaggi a servizi AWS (ad es., AWS S3, AWS EC2) e a contatti utente (ad es., SMS ed email) in qualità di subscriber.
Conservazione dei messaggi
Amazon SQS può archiviare i messaggi fino a 14 giorni, consentendo ai consumer il tempo necessario per elaborarli. Amazon SNS, invece, non conserva i messaggi: li recapita ai subscriber non appena vengono pubblicati.
Modello di consegna dei messaggi
Amazon SQS utilizza un modello uno-a-uno, in cui ogni messaggio è elaborato da un solo consumer. Anche se più consumer effettuano il polling contemporaneamente, solo uno riceverà un dato messaggio. Mentre il consumer selezionato elabora il messaggio, SQS utilizza la funzionalità di visibility timeout per renderlo invisibile agli altri consumer.
Amazon SNS supporta un pattern fan-out, in cui lo stesso messaggio su un topic viene inviato contemporaneamente a tutti i subscriber. Questi subscriber elaborano il messaggio ricevuto in modo indipendente.
Batching
Amazon SQS consente di raggruppare i messaggi in batch, ossia inviarli ai consumer in gruppi. La dimensione del batch è configurabile in AWS.
Amazon SNS non supporta il batching e consente di elaborare un solo messaggio alla volta.
La tabella seguente riassume queste differenze chiave:
|
Criterio |
Amazon SQS |
Amazon SNS |
|
Push vs. polling |
Basato su polling: i consumer interrogano la coda per nuovi messaggi |
Basato su push: invia automaticamente i messaggi ai subscriber |
|
Tipi di destinatari |
Supporta comunicazione A2A |
Supporta comunicazioni A2A e A2P |
|
Conservazione dei messaggi |
Conserva i messaggi fino a 14 giorni |
Non conserva i messaggi |
|
Modello di consegna |
Supporta messaggistica uno-a-uno |
Supporta fan-out (uno-a-molti) |
|
Batching |
Supporta batching dei messaggi |
Non supporta batching dei messaggi |
Quando usare SQS
SQS è l'opzione preferita in un'architettura cloud quando il sistema di consegna dei messaggi richiede:
- Un sistema di polling - i consumer possono scegliere quando effettuare il polling dei messaggi.
- Elaborazione asincrona - i servizi possono elaborare i messaggi in modo indipendente.
- Conservazione dei messaggi - i messaggi possono essere archiviati fino a 14 giorni.
- Consegna garantita dei messaggi - nessun messaggio in coda viene perso.
- Batching - i servizi elaborano i messaggi in gruppi.
Considera il seguente esempio reale: una piattaforma e-commerce vuole elaborare gli ordini dei clienti, il che comporta l'archiviazione dei dati relativi all'ordine in un database RDS.

Diagramma architetturale di un sistema che usa Amazon SQS per elaborare dati—immagine dell'autore.
In questo workflow, i clienti inviano gli ordini, che entrano nella coda SQS. La funzione Lambda (cioè il consumer) effettua il polling della coda, riceve i messaggi e poi scrive i dati nel database RDS.
Usare SQS in questo caso d'uso apporta diversi vantaggi. Poiché SQS disaccoppia il processo, i clienti possono inviare ordini anche quando il database non è operativo. Poiché SQS offre consegna almeno-una-volta, tutti gli ordini verranno elaborati senza rischio di perdita dei messaggi. Infine, SQS supporta il batching, che consente di elaborare i messaggi in gruppi, migliorando l'efficienza.
Amazon SNS qui non sarebbe adatto poiché non conserva i messaggi e li invierebbe immediatamente alla funzione Lambda indipendentemente dallo stato del database. Quindi, se il database diventasse indisponibile, i messaggi potrebbero andare persi. Inoltre, poiché SNS non supporta il batching, elaborerebbe i messaggi uno alla volta, risultando meno ottimale.
Quando usare SNS
SNS è l'opzione preferita in un'architettura cloud quando il sistema di consegna dei messaggi richiede:
- Notifiche in tempo reale - i messaggi sono inviati immediatamente ai subscriber con bassa latenza.
- Distribuzione fan-out - più subscriber possono ricevere lo stesso messaggio simultaneamente.
- Molteplici destinatari di notifica - i messaggi possono essere inviati ad applicazioni (ad es., AWS Lambda) e a utenti finali (ad es., email).
Considera uno scenario in cui uno sviluppatore monitora l'utilizzo della CPU della sua istanza EC2. Per mantenere l'utilizzo basso, vuole monitorare su CloudWatch la metrica di utilizzo CPU e ricevere una notifica ogni volta che supera una data soglia.
Amazon SNS aiuterebbe molto lo sviluppatore nel creare una soluzione, poiché invia notifiche in tempo reale e supporta sia processi A2A che A2P. Grazie al pattern fan-out, SNS può inviare immediatamente notifiche a funzioni Lambda che lavorano per risolvere il problema e allo sviluppatore via email per informarlo dell'allarme scattato.

Diagramma architetturale di un sistema che usa Amazon SNS per il monitoraggio—immagine dell'autore.
Amazon SQS sarebbe meno efficace per questo compito a causa della conservazione dei messaggi. Se gli sviluppatori vogliono reagire a superamenti di soglia, hanno bisogno di avvisi in tempo reale, cosa non possibile se i messaggi sono accumulati nelle code. Inoltre, poiché SQS usa un sistema di polling, i messaggi sono accessibili solo quando un consumer effettua il polling, aumentando la latenza.
Usare SQS e SNS insieme: il meglio di entrambi i mondi
Amazon SQS e Amazon SNS hanno funzionalità e caratteristiche distinte, ma gli utenti AWS possono trarre il massimo da entrambi combinandoli per costruire un sistema di messaggistica efficiente, scalabile e tollerante ai guasti.
Integrare i due servizi è semplice, poiché le code SQS possono essere subscriber di topic SNS. In questo modo, SNS può inviare notifiche in tempo reale alle code SQS, dopodiché SQS disaccoppierà tutti i processi garantendo la consegna dei messaggi.
Considera il seguente esempio: uno sviluppatore AWS sta creando un sistema di invio documenti che estrae contenuti dai documenti inviati dagli utenti finali. Questo sistema deve svolgere due attività per ogni documento inviato:
- Elaborare il documento con un'applicazione di text processing.
- Inviare un'email di conferma all'utente finale.
Lo sviluppatore può combinare SQS e SNS per creare una soluzione efficiente:

Diagramma architetturale di un sistema che usa SNS insieme a SQS—immagine dell'autore.
In questo workflow, quando un utente invia un documento, un messaggio viene inviato al topic SNS, che lo inoltra immediatamente alla funzione Lambda e alla coda SQS. La funzione Lambda si occupa dell'invio dell'email di conferma, mentre la coda SQS gestisce i messaggi, che verranno letti dall'istanza EC2 che ospita l'applicazione di text processing.
Conclusione
Amazon SQS e SNS sono servizi fondamentali nell'ecosistema AWS, ciascuno con vantaggi specifici. SNS offre notifiche in tempo reale, mentre SQS offre un'elaborazione affidabile dei messaggi.
La soluzione di messaggistica ideale per un problema può includere SNS, SQS o entrambi. Comprendendo a fondo i due servizi, gli sviluppatori AWS possono costruire una soluzione di messaggistica adatta alle proprie esigenze di business, garantendo efficienza, scalabilità e resilienza.
Se vuoi portare le tue conoscenze AWS al livello successivo, valuta questi due corsi avanzati:
Oppure preparati alla certificazione AWS Cloud Practitioner con il nostro skill track:
FAQ
Posso integrare Amazon SQS e SNS con altri servizi AWS?
Sì, sia SQS che SNS si integrano perfettamente con vari servizi AWS. Ad esempio, puoi attivare funzioni AWS Lambda con messaggi da SQS o SNS, inviare notifiche ad Amazon S3 quando vengono caricati nuovi file oppure usare Amazon CloudWatch per monitorare le prestazioni di SQS e SNS.
Come garantisco l'affidabilità della consegna dei messaggi con SQS e SNS?
Con SQS, puoi usare le dead-letter queue (DLQ) per intercettare i messaggi che non riescono a essere elaborati dopo vari tentativi, assicurando che nessun dato vada perso. Per SNS, puoi configurare retry o meccanismi di fallback in caso di mancata consegna, ad esempio usando SQS come subscriber di backup di un topic SNS.
Posso combinare SQS e SNS in un'unica architettura?
Sì, SQS e SNS possono essere combinati per creare un'architettura di messaggistica ibrida. Ad esempio, SNS può inviare notifiche in tempo reale a più consumer, incluse le code SQS. Questo ti permette di beneficiare sia delle notifiche in tempo reale (SNS) sia dell'elaborazione affidabile e differita (SQS).
Quali sono i modelli di pricing per SQS e SNS?
Sia SQS che SNS seguono un modello di pricing a consumo. SQS addebita in base al numero di richieste, al trasferimento dati e a funzionalità aggiuntive come il long polling. SNS addebita in base al numero di messaggi pubblicati e al metodo di consegna (ad es., email, SMS o endpoint HTTP). È importante monitorare l'utilizzo per controllare i costi, soprattutto con applicazioni ad alta frequenza.
Come posso ottimizzare le prestazioni quando uso SQS e SNS?
Per ottimizzare le prestazioni, puoi usare il batching con SQS per inviare ed elaborare più messaggi alla volta, riducendo le richieste API e i costi. Con SNS, assicurati che i tuoi subscriber possano gestire un alto throughput configurando l'autoscaling per i servizi di elaborazione (come Lambda o EC2) per gestire in modo efficiente i picchi di traffico.
Come aspirante data scientist, eccello nel trasformare dati grezzi in strategie operative. Mi specializzo nell'utilizzo di Python, SQL e tecniche di machine learning per ricavare soluzioni incisive nell'analisi dei dati e nell'architettura di pipeline ETL robuste che acquisiscono ed elaborano grandi quantità di dati.


