Il servizio

Heroku (http://heroku.com) è una Platform As A Service (PAAS) in cloud che supporta diversi linguaggi (Java, php, node, ruby, e altri).
In pratica con heroku non si ha una vera macchina o un hosting, ma una serie di servizi in cloud che tutti insieme contribuiscono a creare il tuo ambiente. Quindi la CPU è un servizio, il database è un altro servizio, il file system anche, e così via.
Heroku mette a disposizione solamente il servizio di esecuzione dell’applicazione, il resto è da integrare con altri servizi accessori (detti add-on) che sono completamente integrati con la piattaforma stessa.
La conformazione della struttura costringe a scrivere le applicazioni in modo differente rispetto al solito, facendo uso di connessioni e stream al posto di accessi a risorse locali.

Deploy

Aggiornare la propria applicazione su heroku è semplicissimo, basta un push Git.
Heroku mette a disposizione un repository Git per ogni applicazione creata, quindi collegandolo al proprio repository di sviluppo si può gestire la messa online: quando il momento è propizio basta fare commit di tutto e inviare le modifiche al repository heroku. A quel punto heroku noterà i cambiamenti e provvederà a fare la build della nuova applicazione e riavviare i servizi.

Il nostro caso d’uso

Noi abbiamo scelto di sperimentare heroku così:

  • linguaggio: node.js (heroku)
  • database: mongodb (heroku add-on)
  • gestione immagini: cloud dedicato (heroku add-on)
  • logging: Papertrail (heroku add-on)
  • monitoring performance: NewRelic (heroku add-on)

La scelta di node.js è stata fatta per sperimentare questo sistema molto usato per la realizzazione di micro service (piccoli servizi rest). La scelta è risultata vincente considerando la grande quantità di librerie presenti per node, che quindi si è integrato perfettamente con mongo e gli altri servizi add-on.
Unica nota dolente è abituarsi a ragionare in termini asincroni. Quasi tutto il javascript che gira su node utilizza la logica asincrona, la quale spesso mette in difficoltà chi proviene da linguaggi classici come java o php. Tuttavia un ottimo consiglio è la libreria async, che con le sue funzioni permette in modo semplice di rendere sincroni certi processi rendendo il risultato finale più leggibile e comprensibile rispetto all’uso classico di callback annidate.
Per quanto riguarda le altre opzioni rese disponibili dagli add-on di heroku possiamo dire che sono ben integrate e il loro utilizzo è davvero semplice e trasparente.
L’add-on per il database mongodb rende disponibile una connessione e poi il resto risiede tutto sul cloud.
Il servizio di hosting delle immagini è semplicissimo, si esegue un upload a partire da un file o anche da uno stream di byte.
Il servizio di logging e quello di monitoring completano la piattaforma permettendo di generare degli alert (via mail, via slack o altri sistemi di comunicazione) basati sull’analisi dei log che avvisano se avviene qualche errore mentre il monitoraggio campiona le performance e l’affidabilità dell’applicazione.
Infine un add-on Scheduler messo a disposizione da heroku stessa permette di programmare l’avvio di script con cadenza fissa in completa autonomia.

Da dove iniziare

Per iniziare consiglio l’ottimo get started (https://devcenter.heroku.com/start) messo a disposizione da Heroku per i differenti linguaggi, serve a familiarizzare con la piattaforma e con i comandi dei tools messi a disposizione.

Conclusioni

Per finire Heroku è una piattaforma affidabile e davvero di alto livello, ottimo sia per piccoli che grandi progetti. Noi abbiamo utilizzato tutte risorse gratuite, sicuramente per progetti di più grandi dimensioni o che richiedono maggiori risorse, l’aspetto del costo è una variabile da tenere in considerazione in relazione però ai servizi offerti.
Voi avete già provato Heroku? Cosa ne pensate?