In questi giorni riflettevo in via generale su come sviluppare un progetto (ancora molto teorico) su un nuovo servizio web, e mi sono imbattuto in una riflessione su un classico problema:
Quanto costeranno i server per mantenere attivo il servizio? Di quanto e cose avremo bisogno?
Ho cominciato girando un po su Google, dando uno sguardo a vari siti di hosting per spulciare prezzi e caratteristiche dei vari server dedicati, devo dire che c'è davvero da perdersi..
Conoscevo abbastanza teoricamente Amazon Web Services e i servizi che offre, e a dirla tutta, pensavo che forse l'utilizzo dei servizi Amazon (S3, EC2 ecc..) fosse troppo complesso, insomma, ero più orientato sul "classico" e non sul "cloud".
Mi sono documentato e ho visto che in generale c'è una grande ignoranza al riguardo, e molti, per inesperienza o scarsa voglia di approfondire preferiscono ancora affidarsi a soluzioni oramai quasi obsolete.
In questo primo post, voglio introdurvi al cloud service per farvi capire realmente il suo valore. In seguito vedremo di trattare l'argomento anche negli aspetti tecnici :D
Innanzitutto cos'è il Cloud Computing?
Il cloud computing può essere immaginato come una raccolta di risorse per il calcolo e la memorizzazione di dati accessibile in larga scala da remoto. La sua forza è senz'altro nella scalabilità e nella flessibilità, ma prima di entrare più nei dettagli facciamo un esempio
Per chiarire un po il concetto, voglio che immaginiate un grande stadio. Questa grande struttura, costruita investendo ingenti capitali, in realtà ha uno sfruttamento limitato, o meglio non viene sfruttata a pieno. Mi verrebbe da pensare che nel corso degli anni, l'uso effettivo di una struttura del genere si aggiri intorno all'1%.
Il cloud computing permette di lavorare come se venisse ogni settimana costruito utilizzato e poi demolito uno stadio, rendendolo sempre efficiente in termini di posti, parcheggi, dimensioni, in base all'evento e le persone da accogliere.
Ovviamente questo esempio è improponibile nella vita reale, invece è una realtà applicabile sui servizi web.
Lo stadio a cui avete appena pensato in realtà può essere agevolmente paragonato ad un infrastruttura come un data center che viene predisposto per ospitare un nuovo sito, un nuovo servizio. Certo è possibile stimare in partenza, almeno in parte, le risorse di cui si avrà bisogno, prevedendo numero di visitatori, utilizzo del sito, risorse necessarie per l'elaborazione dei dati ecc.. Un compito a dire il vero non semplicissimo.
Le situazioni in questo caso potrebbero essere tre:
1. La prima, dove le risorse che abbiamo messo a disposizione sono in realtà scarse e inadeguate, provocando disservizi e magari perdendo molti utenti scontenti e scocciati dalla lentezza del nostro servizio.
2. La seconda, dove in realtà una grande parte delle risorse messe a disposizione non vengono utilizzate e ci troveremmo a sopportare costi elevati senza una vera necessità.
3. Infine la terza, dove le nostre previsione sono state completamente rispettate e le risorse disponibili sono sfruttate quasi a pieno.
Benissimo, anche nella terza situazione, non potremmo ritenerci pienamente "tranquilli".
Mettiamo il caso il nostro nuovo servizio online venga recensito su un importantissimo sito, oppure appaia per esempio nella prima pagina di digg o reddit, un occasione che potrebbe determinare il nostro successo! Cosa accadrebbe? Un disastro..
Per la gran mole di visitatori che accorrerebbero in massa sul nostro sito ci troveremmo sicuramente in una situazione in cui l'infrastruttura rigida su cui è basato il nostro servizio non riuscirebbe a soddisfare tutte le richieste, incorrendo di nuovo in problemi di "insoddisfazione" dei nostri utenti e potenziali clienti.
Le tecniche di cloud computing permettono di risolvere questi problemi in modo agevole ed'esser più efficienti sia sul lato economico che tecnico, fornendo strumenti utili per affrontare situazioni di impennate di traffico, a condizione ovviamente di pianificare correttamente la progettazione dell'architettura.
Il cloud computing offre la possibilità di affrontare svariate esigenze di traffico senza compromettere la funzionalità dei server o portare alla bancarotta.
Nei prossimi post vedremo più nel dettaglio i servizi che Amazon mette a disposizione, e come sfruttarli per le nostre applicazioni web.
