Amazon Simple Queue Service (Amazon SQS) è un servizio Web che permette di memorizzare i messaggi in attesa di invio tramite un sistema di accodamento. Con Amazon SQS, puoi creare con la massima rapidità applicazioni di accodamento di messaggi che possono essere eseguite su qualsiasi computer.

Amazon SQS offre un servizio di accodamento in hosting affidabile, sicuro e altamente scalabile per memorizzare i messaggi in transito tra computer. Con Amazon SQS, puoi trasferire dati tra diversi componenti distribuiti di applicazioni senza perdere messaggi e senza dover attendere che ciascuno dei componenti sia disponibile. Le applicazioni potranno scambiarsi dati sensibili utilizzando la crittografia lato server o SSE (Server-Side Encryption) di Amazon SQS, che si integra con AWS Key Management Service (KMS).

Amazon SQS può essere utile per creare applicazioni distribuite con componenti separati che funzionano con Amazon Elastic Compute Cloud (Amazon EC2) e altri servizi Web infrastrutturali di AWS.

Amazon SQS offre due tipi di coda per i diversi requisiti delle applicazioni:

Code standard
Il tipo di coda predefinito di Amazon SQS è quello standard. Una coda standard consente di aver un numero quasi illimitato di transazioni al secondo. Le code standard garantiscono che un messaggio venga consegnato almeno una volta. Tuttavia, di tanto in tanto (a causa dell'architettura estremamente distribuita che consente un throughput elevato), potrebbe essere consegnata più di una copia di un messaggio. Le code standard assicurano il miglior ordine possibile, ovvero i messaggi vengono generalmente consegnati nello stesso ordine di invio.

Code FIFO – Novità!
La coda FIFO completa la coda standard. Le caratteristiche più importanti di questo tipo di coda sono la consegna FIFO (first-in-first-out) e la singola elaborazione precisa: l’ordine in cui i messaggi vengono inviati e ricevuti viene rigorosamente mantenuto e un messaggio viene consegnato una volta e rimane disponibile fino a quando un cliente lo elabora e lo cancella; i duplicati non sono introdotti nella coda. Le code FIFO supportano inoltre gruppi di messaggi che consentono più flussi ordinati all’interno di un’unica coda. Le code FIFO prevedono una limitazione di 300 transazioni al secondo per operazione API, ma offrono tutte le funzionalità delle code standard.

 

Inizia a usare AWS gratis

Crea un account gratuito
Oppure accedi alla console

Il piano gratuito di AWS include 1 milione di richieste con Amazon Simple Queue Service (SQS).

Visualizza i dettagli del piano gratuito di AWS »

Capital One racconta come sta utilizzando Amazon SQS per la migrazione di numerose applicazioni di core banking al cloud.

sqs_thumb_reInvent2016-migrating-ent-messaging

Si può accedere facilmente ad Amazon SQS tramite la Console di gestione AWS, che fornisce agli utenti un'interfaccia rapida basata sul Web per impostare e gestire Amazon SQS.

Amazon SQS utilizza un'interfaccia semplice, di facile uso ed estremamente flessibile. Le richieste fornite sono le seguenti:

Operazioni di messaggio di base

  • SendMessage: invia messaggi a una coda specifica.
  • ReceiveMessage: restituisce uno o più messaggi da una coda specifica.
  • DeleteMessage: elimina un messaggio ricevuto da una coda specifica.
  • ChangeMessageVisibility: modifica il timeout visibilità di un messaggio ricevuto.

Operazioni di messaggio batch

  • SendMessageBatch: invia più messaggi a una coda specifica.
  • DeleteMessageBatch: elimina più messaggi ricevuti da una coda specifica.
  • ChangeMessageVisibilityBatch: modifica il timeout visibilità di più messaggi ricevuti.

Gestione di coda di base

  • CreateQueue: crea code da utilizzare con il tuo account AWS.
  • ListQueues: elenca le code esistenti.
  • DeleteQueue: elimina una delle code.
  • PurgeQueue: elimina tutti i messaggi in una coda.

Gestione di coda avanzata

  • SetQueueAttributes: controlla le impostazioni della coda quali il timeout visibilità (il tempo durante il quale i messaggi sono bloccati dopo essere stati letti perché non possano essere letti di nuovo), un valore di ritardo o i parametri di coda DLQ.
  • GetQueueAttributes: recupera le informazioni su una coda quali il timeout visibilità, il numero di messaggi nella coda o le dimensioni massime dei messaggi.
  • GetQueueUrl: recupera l'URL coda.
  • AddPermission: aggiunge una condivisione di coda per un altro account AWS per una coda specifica.
  • RemovePermission: elimina un account AWS da una condivisione di coda per una coda specifica.
  • ListDeadLetterSourceQueues: elenca le code collegate a una coda DLQ.

Per ulteriori dettagli, consulta la sezione API Reference della documentazione Amazon SQS.

Il ciclo di vita dei messaggi memorizzati in Amazon SQS è semplice da gestire e al tempo stesso assicura che tutti i messaggi vengano elaborati.

  1. Un sistema che deve inviare un messaggio seleziona una coda Amazon SQS e utilizza la richiesta SendMessage per inviare un nuovo messaggio a questa coda.
  2. Un sistema diverso che necessita di più messaggi da elaborare, chiama ReceiveMessage e il messaggio viene restituito.
  3. Quando il messaggio è stato restituito da ReceiveMessage, non verrà restituito da nessun'altra richiesta ReceiveMessage fino alla scadenza del timeout visibilità. Questo impedisce che più clienti elaborino lo stesso messaggio simultaneamente.
  4. Se il sistema riesce a completare l'elaborazione del messaggio, chiama DeleteMessage, che elimina il messaggio dalla coda in modo che non venga elaborato di nuovo. Se il sistema non riesce a elaborare il messaggio, questo verrà letto da un'altra chiamata ReceiveMessage non appena è scaduto il timeout di visibilità.
  5. Se hai associato una coda DLQ con una coda di origine, i messaggi vengono spostati sulla coda DLQ dopo che è stato raggiunto il numero massimo specificato di tentativi di consegna.
  • Gli sviluppatori possono creare un numero infinito di code Amazon SQS con un numero illimitato di messaggi.
    • Una coda può essere creata in qualunque area geografica.
    • Il payload del messaggio può contenere fino a 256 KB di testo in qualunque formato. Ogni blocco di payload di 64 KB equivale, ai fini di fatturazione, a 1 richiesta. Una singola chiamata API con un payload di 256 KB, ad esempio, sarà fatturata come quattro richieste.
    • I messaggi possono essere inviati, ricevuti o eliminati in batch fino a un totale di 10 messaggi o di 256 KB per batch. Poiché i batch hanno lo stesso costo dei messaggi singoli, SQS può rivelarsi più conveniente per i clienti che utilizzano l'invio in batch.
    • Per inviare messaggi di dimensioni superiori a 256 KB, puoi utilizzare l'Amazon SQS Extended Client Library for Java, che utilizza Amazon S3 per memorizzare il payload dei messaggi.  Un riferimento al payload dei messaggi verrà inviato tramite SQS.
    • Il polling lungo riduce il polling estraneo per minimizzare i costi e ricevere nuovi messaggi il più rapidamente possibile. Quando la coda è vuota, le richieste di polling lungo aspettano fino a 20 secondi l'arrivo del messaggio successivo. Le richieste di polling lungo hanno lo stesso costo delle richieste normali.
    • I messaggi possono essere conservati nella coda fino a 14 giorni.
    • Possono essere inviati e letti simultaneamente.
  • Dopo la ricezione, il messaggio viene bloccato durante l'elaborazione. Questo impedisce che altri computer elaborino lo stesso messaggio contemporaneamente. Se l'elaborazione del messaggio non viene completata, il blocco scade e il messaggio diventa di nuovo disponibile. Se l'applicazione richiede più tempo per l'elaborazione, il timeout del blocco può essere modificato in modo dinamico tramite l'operazione ChangeMessageVisibility.
  • Gli sviluppatori potranno condividere le code Amazon SQS con la massima sicurezza, sia in modo anonimo sia con specifici account AWS. La condivisione di code può inoltre essere limitata in base a indirizzo IP e ora del giorno.
  • NOVITÀ! La crittografia lato server o SSE (Server-Side Encryption) protegge i contenuti dei messaggi nelle code Amazon SQS avvalendosi di chiavi gestite da AWS Key Management Service (AWS KMS). La crittografia SSE crittografa i messaggi al momento della ricezione da parte di Amazon SQS. I messaggi vengono memorizzati una volta crittografati; Amazon SQS procede alla loro decrittografia solo quando vengono inviati ad un utente autorizzato.
  • In integrazione con Amazon Simple Notification Service (SNS), gli sviluppatori possono diffondere messaggi identici a più code SQS standard. Con il fanout, un messaggio pubblicato su un argomento SNS viene distribuito parallelamente su più code SQS standard.  Utilizzando il fanout, gli sviluppatori possono creare applicazioni che traggono vantaggio da un'elaborazione asincrona parallela.  Per esempio, gli sviluppatori possono pubblicare un messaggio su un argomento ogni volta che viene caricata una nuova immagine.  Le elaborazioni indipendenti, che leggono ognuna da una coda separata, possono generare anteprime, effettuare il riconoscimento di immagini e memorizzare i metadati delle immagini. SNS non supporta attualmente l’ordinamento FIFO e, pertanto, il fanout sulle code FIFO non è supportato.
  • Gli sviluppatori possono trattare i messaggi bloccati (quelli che non sono stati elaborati da un consumer) con code DLQ. Quando viene raggiunto il numero massimo di ricezioni per un messaggio, questo viene spostato sulla coda DLQ associata alla coda di origine. Gli sviluppatori possono impostare processi di consumer separati per le DLQ per analizzare e capire perché i messaggi si bloccano. Le DLQ devono essere dello stesso tipo della coda di origine (standard o FIFO).

L'accodamento di messaggi di Amazon SQS può essere utilizzato con altri servizi AWS come Redshift, DynamoDB, RDS, EC2, ECS, Lambda e S3, per aumentare la scalabilità e l'affidabilità delle applicazioni distribuite. Ecco alcuni schemi progettuali comuni:

  • Code di lavoro: separano i componenti di un'applicazione distribuita che possono non elaborare la stessa quantità di lavoro simultaneamente.
  • Operazioni di buffer e batch: aumentano la scalabilità e l'affidabilità della tua architettura e spianano i picchi di volume temporanei senza perdita di messaggi o aumento di latenza.
  • Offload di richiesta: spostano le operazioni lente dai percorsi delle richieste interattive accodando la richiesta.
  • Fanout: integra SQS a Simple Notification Service (SNS) per inviare copie identiche di un messaggio parallelamente a più code.
  • Priorità: utilizza code separate per classificare la priorità del lavoro.
  • Scalabilità: poiché le code dei messaggi separano i tuoi processi, per aumentare il tasso di invio o ricezione dei messaggi basta aggiungere un altro processo. 
  • Resilienza: in caso di errore di una parte del sistema, non è necessario arrestare tutto il sistema. Le code di messaggi separano i componenti del tuo sistema, quindi in caso di errore di un processo che legge i messaggi della coda, i messaggi possono sempre essere aggiunti alla coda per essere elaborati quando il sistema verrà ripristinato.

L'uso di questo servizio è soggetto al contratto con il cliente Amazon Web Services.