19
Community - Cloud AWS su Google+ Cloud AWS Amazon Web Services cloud-aws.com Amazon SQS - Simple Queue Service Hangout 13 del 19.05.2014 Davide Riboldi Massimo Della Rovere Oggi vedremo il servizio di Amazon SQS per le gestione dei messaggi in un’applicazione scalabile CLOUD AWS #cloudaws

PRD-013 - Amazon SQS

Embed Size (px)

Citation preview

Community - Cloud AWS su Google+

Cloud AWS

Amazon Web Services

cloud-aws.com

Amazon SQS - Simple Queue Service

Hangout 13 del 19.05.2014

● Davide Riboldi● Massimo Della Rovere

Oggi vedremo il servizio di Amazon SQS per le gestione dei messaggi in un’applicazione scalabile

CLOUD AWS

#cloudaws

Amazon SQS - Introduzione

Cloud AWS

● Amazon SQS è un sistema di code che consente alle applicazioni, in maniera veloce e affidabile, di accodare messaggi da scambiarsi tra di loro in maniera asincrona, ogni messaggio a sua volta può generare altre elaborazioni più specifiche.

● Questo sistema permette di creare ambienti altamente scalabili e convertire applicazioni complesse in diverse unità di elaborazione più semplici e indipendenti tra di loro, migliorando la loro affidabilità e le performance del processo.

Amazon SQS - Introduzione

Cloud AWS

● Per capirci possiamo immaginare uno scenario qualsiasi, ad esempio abbiamo un’applicazione web che riceve delle richieste di upload video, questa applicazione invece di convertire il video, generare le immagini di copertina etc, accoda un messaggio.

● Questo sarà elaborato da un componente diverso, magari anche su server diversi che farà risparmiare molto tempo all’applicazione principale che a sua volta non deve attendere il ciclo completo per elaborare la prossima richiesta di upload.

Amazon SQS - Funzionamento

Cloud AWS

ApplicazioneUpload Video Conversioni

Copertine

ApplicazioneConversione

ApplicazioneCopertine

Messaggio

Messaggio

SQS

SQS

Amazon SQS - Funzionamento

Cloud AWS

● Ogni componente di una applicazione può creare messaggi in una coda fail-safe. I messaggi possono contenere fino a 256 KB di testo in qualsiasi formato e vengono recuperati tramite le API.

● La coda agisce come da buffer tra il componente che produce e memorizza i dati e il componente che riceve i dati per l’elaborazione. Questo significa che la coda risolve i problemi che nascono quando il componente che produce i dati produce più lavoro di quanto il componente di ricezione possa elaborare.

Amazon SQS - Alcune caratteristiche

Cloud AWS

● Amazon assicura la consegna di ogni messaggio almeno una volta e supporta multipli Readers e Writers che interagiscano con la stessa coda. Una singola coda può essere utilizzata da molti componenti di applicazioni distribuite senza la necessità che questi si coordino l’uno con l’altro.

● Uno dei compromessi risultanti è che SQS non garantisce il first in, first out. Per molte applicazioni distribuite ogni messaggio ha una sua autonomia e siccome tutti i messaggi vengono recapitati, l’ordine non è più importante.

Amazon SQS - Caratteristiche principali

Cloud AWS

● Redundant infrastructure: garantisce almeno una volta la consegna dei messaggi, accesso concorrente e alta disponibilità per l’invio e il recupero dei messaggi.

● Multiple writers and readers: più parti possono inviare e ricevere messaggi allo stesso tempo. Amazon SQS blocca i messaggi durante la loro elaborazione.

● Configurable settings per queue: le code non devono essere necessariamente tutte uguali, ad esempio una coda può essere ottimizzata per una tipologia di messaggi che richiedono più tempo di elaborazione rispetto ad altre.

Amazon SQS - Caratteristiche principali

Cloud AWS

● Variable message size: i messaggi possono arrivare ad una dimensione massima di (256KB). Per i messaggi di dimensione superiore è possibile utilizzare Amazon S3.

● Access control: è possibile gestire i permessi su chi può inviare il messaggio alla coda e su chi è autorizzato a ricevere il messaggio dalla coda.

● Delay queues: viene impostato per definire il tempo di ritardo per l’invio di tutti i messaggi che sono stati inseriti. Se questo valore viene modificato, il nuovo valore avrà effetto solo per i messaggi che verranno accodati dopo la modifica.

Amazon SQS - Architettura scalabile

Cloud AWS

SQS HTML

SQS Images

SQS PDF

SQS ect,etc

DATABASE

Esempio di un semplice

spider

Lettura delle pagine WEB

SQS

SQS

SQS

Amazon SQS - Cancellazione di una coda

Cloud AWS

● Una coda può essere cancellata in qualsiasi momento, piena o vuota che sia. Amazon SQS può cancellare una coda senza preavviso se non risulta una delle seguenti azioni per almeno 30 giorni consecutivi: SendMessage, ReceiveMessage, DeleteMessage, GetQueueAttributes etc,ect.

● Si tratta di una violazione della destinazione d’uso di Amazon SQS se si creano ripetutamente code e poi le si lasciano inattive, o se si archiviano quantità eccessive di dati. Infatti le code sono studiate per processare messaggi il prima possibile e non per memorizzare informazioni permanenti.

Amazon SQS - Message Order

Cloud AWS

● Amazon SQS fa del suo meglio per preservare l'ordine dei messaggi, ma a causa della natura distribuita della coda non è possibile garantire che i messaggi vengano ricevuti nello stesso ordine in cui vengono inviati.

● Se il proprio sistema richiede che venga preservato l'ordine, si raccomanda di inserire una informazione della sequenza in ogni messaggio, così da poter riordinare i messaggi una volta che questi vengono ricevuti.

Amazon SQS - At-Least-Once Delivery

Cloud AWS

● Amazon SQS memorizza il messaggio su più server per motivi di ridondanza. Potrebbe capitare che uno dei server che mantiene una copia del messaggio non sia più disponibile.

● In questo caso la copia del messaggio sul server non disponibile non verrà cancellata, ed è possibile che si possa ricevere un’ulteriore copia quando si ricevono i messaggi.

● Per questo motivo bisogna disegnare una applicazione che sia idempotente (ovvero, l’applicazione non deve risentirne se viene processato lo stesso messaggio più di una volta).

Amazon SQS - Queue URLs

Cloud AWS

● Quando si crea una nuova coda bisogna fornire un nome che sia univoco all’interno dell’ambito di tutte le code possedute da un account AWS. Amazon SQS assegna ad ogni coda creata un identificativo chiamato “queue url” che include il nome della coda e altri componenti di Amazon SQS.

● Qui di seguito vi riportiamo un’esempio di queue URL per una coda chiamata “queue” posseduta da un’account presente su amazon aws e identificato come 123456789012:

http://sqs.us-east-1.amazonaws.com/123456789012/queue

Amazon SQS - Message ID

Cloud AWS

● Ad ogni messaggio viene assegnato un “message ID” che Amazon SQS ci restituisce durante la risposta ad un chiamata API di tipo “SendMessage”.

● Questo Id è utile per identificare la chiave del messaggio, ma non è possibile utilizzarlo per cancellare il messaggio all’interno della coda.

● La lunghezza massima di un message ID è di 100 caratteri.

Amazon SQS - Receipt Handles

Cloud AWS

● Ogni volta che si riceve un messaggio da una coda, noi riceviamo un puntatore per questo messaggio. Il puntatore viene associato all’atto di ricevere il messaggio. Per cancellare il messaggio o per cambiare la visibilità del messaggio bisogna fornire il “receipt handle” e non il “message ID”.

● Questo significa che bisogna sempre ricevere il messaggio prima di poterlo cancellare (non è possibile inserire un messaggio in una coda e quindi richiamarlo). La lunghezza massima del puntatore di messaggio è di 1024 caratteri.

Amazon SQS - Visibility Timeout

Cloud AWS

● Parlando di un sistema distribuito non c’è alcuna garanzia che il componente possa ricevere il messaggio (una connessione interrotta o un componente bloccato). Per questo, Amazon SQS non cancella il messaggio e deve essere la nostra applicazione a cancellarlo dalla coda dopo averlo ricevuto.

● Il messaggio una volta ricevuto rimane nella sua coda, nello stesso tempo però non si desidera che gli altri componenti ricevano nuovamente il messaggio, pertanto il messaggio viene bloccato utilizzando il “visibility timeout”. Durante questo tempo il messaggio non viene consegnato.

Amazon SQS - Visibility Timeout

Cloud AWS

Visibility Timeout (seconds)Time

Request

Messageretuned

Messageretuned

RequestRequest Request

Message notretuned

Message notretuned

Amazon SQS - Visibility Timeout

Cloud AWS

● Ogni coda che viene create su Amazon SQS è impostata con un visibility timeout di default di 30 secondi, ovviamente è possibile cambiare questo valore come desideriamo.

● Quando si riceve un messaggio è possibile impostare un valore speciale di visibility timeout per i messaggi ricevuti senza modificare il timeout generale della coda.

● Se si ha un sistema che produce messaggi che richiedono una quantità variabile di tempo per l’elaborazione si consiglia di creare più code con diversi valori di visibility timeout.