Almeno una volta nella vita ogni sviluppatore si sarร chiesto: quale metodologia utilizzo per lo sviluppo di software? Una domanda che apre un mondo di possibilitร , con le ricerche online che anzichรฉ offrirci un valido aiuto rischiano di farci perdere senza fornire una reale risposta.
Twelve-Factor App, la nuova metodologia per lo sviluppo Saas
Presentata per la prima volta da Adam Wiggins nel 2011 all’interno diย Heroku, una platform-as-a-service company, la metodologia Twelve-Factor App รจ stata disegnata da alcuni sviluppatori per dare risposte specifiche ed efficaci a tutti coloro che progettano software come servizi e applicazioni cloud native utilizzando l’architettura tipica dei microservizi.
Da qualche anno infatti il software viene sempre piรน di frequente fornito come servizio o Software as a Service (SaaS): la metodologia 12-factor app รจ orientata proprio a questo tipo di applicazioni, con l’obiettivo di ridurre tempi e costi di sviluppo, garantire la piena compatibilitร su varie piattaforme e con le versioni precedenti, creare sistemi leggeri e scalabili con un uso ridotto di risorse. Una soluzione particolarmente idonea per lo sviluppo di applicazioni container-based che possono essere Api, crawler/bot, soluzioni IoT, WebApp.
Questo video mostra bene come costruire microservizi con il pattern 12-Factor App:
Ci teniamo a specificare che queste metodologie non vanno prese come imposizioni dallโalto, ma come una serie di best practice per ottenere software robusti e scalabili. Crediamo che per chi lavora nel settore avere una metodologia funzionante e condivisa dalla community sia un ottimo punto di partenza: nel nostro caso, quando sviluppiamo un applicativo o svolgiamo consulenza su applicativi di altri cerchiamo sempre di fare un paragone andando a individuare fra i 12 punti cosa si discosta cosรฌ da valutarne rischi o punti critici.
Metodologia 12-factor per lo sviluppo di applicazioni: linee guida e nostre osservazioni
Sulla pagina ufficiale di Twelwe-Factor App รจ riportato l’elenco dei 12 fattori, un insieme di regole e linee guida per lo sviluppo di software Saas:
I. Codebase
Una sola codebase sotto controllo di versione, tanti deploymentII. Dipendenze
Dipendenze dichiarate e isolateIII. Configurazione
Memorizza le informazioni di configurazione nellโambienteIV. Backing Service
Tratta i backing service come โrisorseโV. Build, release, esecuzione
Separare in modo netto lo stadio di build dallโesecuzioneVI. Processi
Esegui lโapplicazione come uno o piรน processi statelessVII. Binding delle Porte
Esporta i servizi tramite binding delle porteVIII. Concorrenza
Scalare attraverso il process modelIX. Rilasciabilitร
Massimizzare la robustezza con avvii veloci e chiusure non bruscheX. Paritร tra Sviluppo e Produzione
Mantieni lo sviluppo, staging e produzione simili il piรน possibileXI. Log
Tratta i log come stream di eventiXII. Processi di Amministrazione
Esegui i task di amministrazione/management come processi una tantum
Partendo da questi punti desideriamo offrire il nostro parere e le sensazioni finora vissute, sulla base delle esperienze acquisite nei nostri processi di sviluppo.
I primi 4 punti sono molto focalizzati sul versionamento del codice e sulle sue dipendenze e configurazioni. Nel punto 3 la metodologia indica “La configurazione di unโapplicazione รจ tutto quello che puรฒ variare da un deployment allโaltroโ: non รจ cosรฌ anomalo trovare sorgenti di software con allโinterno le configurazioni che ne determinano il comportamento. Una separazione ben definita ci permette dโinstallare il nostro applicativo in quanti ambienti vogliamo, svolgere tutti i test ed infine pubblicare le modifiche in produzione senza dover toccare il codice: lโapplicativo rimane sempre lo stesso, รจ lโambiente in cui viene calato che condivide con esso le configurazioni.
Legato al precedente arriva il punto 4 sui backing service, ossia tutti i servizi esterni, locali o remoti, alla nostra applicazione che vengono usati per connettersi a un database, inviare mail, condividere contenuti socialโฆ Il fatto di trattare tutte queste risorse senza distinzione tra locali o meno ci permette di essere molto piรน agili nel collegarle o scollegarle durante il deployment.
I punti 4, 5 e 6 credo siano tra i nostri preferiti, poichรฉ offrono il giusto indirizzo per creare app scalabili, robuste e integrate con altre. Anche qui torna il concetto di “Pets VS Cattleโ visto nel precedente articolo: le nostre app sono appositamente progettare per essere โdate in pastoโ al cloud e per saper gestire i carichi di lavoro in modo dinamico, con istanze che possono partire, fermarsi o fallire senza che sia necessario il nostro intervento. Per chi volesse farsi unโidea di tutte le potenzialitร del settore consigliamo di approfondire le tecnologie legate ai containers o il mondo serverless (possibile fonte: Container by Google)
Per ulteriori approfondimenti tecnici clicca qui. Se hai bisogno di un aiuto per lo sviluppo software con metodologia 12-Factor App contattaci.