Amazon ElastiCache per rendere più veloci le WEBAPP
da Massimo Della Rovere · pubblicato il 30 agosto, 2014 · modificato il 5 giugno, 2017

Un sistema di cache permette di memorizzare il risultato di un’elaborazione in modo tale da servire immediatamente lo stesso risultato quando viene richiesta la stessa elaborazione, evitando di eseguire nuovamente tutto il processo. Questo non solo diminuisce il carico di lavoro dei nostri server ma permette di abbassare in maniera significativa il tempo di risposta legato ad una singola richiesta.

Esistono diversi sistemi di cache, quelli legati al filesystem, quelli RAM e altri chiamati ibridi, che sono un misto tra i primi due. I sistemi di cache più veloci sono quelli RAM proprio come il servizio di Amazon ElastiCache che affronteremo in questo articolo. In realtà il servizio ElastiCache si basa sul prodotto Memcached che permette la creazione di un sistema complesso di cluster RAM cache. Vedremo in seguito i dettagli.

Introduzione

Tramite questo servizio possiamo configurare un sistema di cache con tutta la quantità di memoria RAM che necessitiamo, in maniera semplice e veloce, senza perdere tempo nella configurazione di prodotti software molto complessi. Il servizio di ElastiCache si basa su due prodotti opensource, Memcached e Redis. Il primo è un sistema di cache ad oggetti abbastanza popolare e si integra al 100% con il servizio di ElastiCache, mentre il secondo è basato su una tabella hash che può essere utile nei casi di ridondanza.

Amazon ElastiCache è un servizio autogestito, infatti si fa carico anche di tutte le azioni che riguardano la risoluzione di errori tra i vari nodi e proporziona le risorse necessarie in base al carico di lavoro richiesto. Come risultato si ottiene una continuità di servizio e delle performance sempre di alta qualità. Attraverso la sua integrazione con il servizio di Amazon CloudWatch è possibile controllare le metriche che riguardano i vari nodi.

Il prezzo del servizio è basato sulla stessa metodologia di Amazon EC2, infatti esiste un prezzo orario diverso in base al tipo di istanza che viene selezionata. Anche per questo servizio esiste la possibilità di utilizzare un’istanza micro gratuitamente un’anno e poter effettuare tutte le prove collegate al nostro applicativo web. Per aumentare la potenza dell’istanza o il numero dei nodi possiamo utilizzare la console o le API.

Creazione di un cluster

Per avviare il nostro primo sistema di cluster sotto AWS dobbiamo andare nella console, selezionare la regione geografica e il servizio di ElastiCache. Una volta eseguita questa operazione ci dovrebbe comparire la pagina iniziale della dashboard, la quale indicherà i tre passi principali che dovremo eseguire: Avvio, Connessione e Gestione.

Amazon Elasticache

Come potete vedere dalla schermata allegata, prima dobbiamo avviare un cluster cache, in cui indicheremo il software da utilizzare, il numero di nodi e diverse opzioni legate alla configurazione iniziale, dopo di che dovremo eseguire una connessione, definendo le autorizzazioni di accesso e le connessioni EC2, solo a questo punto, sempre tramite la console è possibile modificare e monitorare le risorse legate al cluster in questione.

Se lanciamo la creazione del cluster cache dalla management console ci verrà presentato un wizard in cui devono essere specificate le opzioni. I parametri che bisogna indicare sono abbastanza intuitivi ma vediamoli comunque insieme:

Amazon Elasticache

Nome del cluster: dobbiamo indicare un nome univoco nell’ambito della nostra regione geografica, il quale identificherà la configurazione globale di tutto il cluster cache.

Cache port: indica la porta IP su cui il servizio di cache potrà essere interrogato o gestito tramite la nostra applicazione. Per default ci verrà proposta la porta 11211 o la 6379 a seconda se scegliamo per la cache il motore di Memcached o quello di Redis.

Numero nodi: in questo campo bisogna indicare il numero dei nodi iniziali che bisogna associare al cluster durante l’avvio. Ovviamente questo valore potrà essere modificato anche successivamente in base a delle nuove necessità legate al traffico generale.

Zona preferita: possiamo indicare le zone in cui vogliamo avviare i nodi del cluster, ad esempio con “no preference” il servizio sceglie una sola zona geografica per tutti i nodi del cluster, con le altre opzioni invece possiamo avviare i nodi su zone diverse.

Subnet group: nel caso in cui il cluster debba appartenere ad una VPC possiamo indicare il gruppo di sottorete che abbiamo configurato nel servizio di Virtual Private Cloud. Per ulteriori informazioni vi consiglio di vedere la documentazione su VPC.

Engine: indica il motore software che bisogna utilizzare nel nostro sistema di cache, in questo momento sono supportati solo i sistemi Memcached e Redis. Le opzioni presenti nella schermata di creazione possono differire a seconda del motore selezionato.

Notifiche SNS: tramite questo campo possiamo attivare le notifiche SNS e scegliere un topic esistente. Se il topic non è presente nel nostro account AWS, possiamo selezionare il link “manual ARN input” e inserire l’endpoint SNS manualmente.

Tipo nodo: qui possiamo selezionare il tipo di istanza che vogliamo associare al nostro cluster, le istanze disponibili sono di diversi tipi, differiscono per potenza di CPU, valore di RAM e velocità di trasmissione. Per ulteriori informazioni andate su Istanze Cache.

Auto update: quando selezioniamo il tipo di engine, dobbiamo scegliere la versione del software da utilizzare, se vengono rilasciati alcuni aggiornamenti che riguardano solo le minor release e questo campo è attivato, il software si aggiornerà automaticamente.

Connessione al cluster

Una volta che abbiamo avviato il cluster e definito le autorizzazioni possiamo collegarci ad esso tramite l’endpoint che viene indicato nella dashboard. Per vedere tutte queste informazioni basta selezionare il menu “cache clusters” e selezionare il nome del cluster interessato. Vi riporto qui di seguito un’esempio di cluster Memcached.

Amazon Elasticache

Come potete notare ho selezionato un cluster di nome “otherplus-test-cache” che gira con un engine di tipo Memcached, con un solo nodo e in una zona di disponibilità ben precisa. Subito dopo viene indicato il valore di endpoint che è composto dal nostro nome più una stringa generata dal servizio e la porta che abbiamo selezionato durante l’avvio, indicata nel capitolo precedente. A seguire in basso tutte le altre informazioni.

Se facciamo click sul link che indica il valore endpoint ci verranno visualizzati due URL, il primo da utilizzare per la configurazione e il secondo per collegarsi al nodo, possiamo anche fare una prova tramite il semplice telnet utilizzando il secondo endpoint.

telnet otherplus-test-cache.m9p69w.0001.euw1.cache.amazonaws.com 11211

Trying 10.276.283.128...
Connected to ec2-52-66-152-103.eu-west-1.compute.amazonaws.com.
Escape character is '^]'.

Se avete configurato correttamente le autorizzazioni e il collegamento riesce, potete procedere all’inserimento dei comandi Memcached, qui vi riporto un semplice esempio, ma nella documentazione ufficiale trovate tutti i comandi disponibili nel prodotto.

telnet otherplus-test-cache.m9p69w.0001.euw1.cache.amazonaws.com 11211

Trying 10.276.283.128...
Connected to ec2-52-66-152-103.eu-west-1.compute.amazonaws.com.
Escape character is '^]'.

set mykey 0 0 5   // Imposto una chiave di lunghezza 5
hello             // Indico il valore della chiave
STORED            // Risposta del servizio

get mykey         // Richiedo la chiave di nome mykey  
VALUE mykey 0 5   // Risposta del servizio
hello             // Risposta del servizio
END               // Risposta del servizio

get nofoundkey    // Richiedo una chiave che non esiste
END               // Risposta del servizio

quit              // Chiusura della sessione telnet
Connection closed by foreign host.

Con il primo comando definiamo una chiave di 5 caratteri a cui assegniamo il valore di (hello), il servizio dovrebbe rispondere con una stringa STORED. Nelle righe successive richiediamo il valore della chiave memorizzata e il valore di una chiave che non esiste, nel primo caso ci ritorna la struttura e il valore della chiave, nel secondo caso ci deve ritornare solo una stringa di END. Per concludere chiudiamo la sessione telnet.

Framework SDK

Ovviamente i comandi tramite sessione telnet sono utili solo per fare delle prove, in realtà quello che avremmo bisogno sono dei SDK che possiamo utilizzare nelle nostre applicazioni in base al linguaggio di programmazione utilizzato. Per quanto riguarda le API di ElastiCache ho visto che sono implementate su Java e PHP, mentre sugli altri framework SDK bisognerebbe controllare nella documentazione ufficiale.

Guida completa su AWS

Questo articolo appartiene ad una serie di pubblicazioni che costituiscono una guida completa dedicata agli Amazon Web Services.  Molti servizi che trattiamo in questo blog vengono anche spiegati con dei video che trovate nel nostro canale youtube. Se volete seguire questo percorso didattico iscrivetevi alla community Cloud AWS.

condividi