In questa sessione parleremo di come sviluppare un applicazione di backend a microservizi con nodejs e moleculer.services e come pubblicarla tramite Docker e docker-compose su DigitalOcean. Per parlare di questi argomenti utilizzeremo come esempio l'applicazione che trovate su thebomb.club, sviluppata e pubblicata, come hobby, con le tecnologie menzionate.
5. 5
The bomb
Progetto nato comehobby durante il primo lockdown
Ispirato al gioco in scatola «la bomba»
Gioco di parolemultiplayer: aturnosipassaunabombavirtuale
cheesploderàinuntemporandomeognigiocatoreperpassarela
bombaalprossimodevecomporreunaparolaapartiredauna
sillaba estratta.
thebomb.club
7. 7
Architetturaa microservizi
Opposto del modello monolitico: piccole unità logiche più ridotte possibile. Una
funzione base per ogni servizio.
I servizi comunicano tra loro tramite protocolli standard.
Diversi gradi di isolamento (database/tabella, macchina/container)
Vantaggi: deploy, scalabilità, resilienza, ottimizzazione
Svantaggi: integration test, debugging, deploy manuale.
theoretics()
8. 8
Moleculer.services
Framework NodejS: backenda microservizi ad alte prestazioni e di facile
manutenzione
Offre, di default, i seguenti strumenti: Transporter con auto discovery eload
balancing, caching, sistema di validazione della comunicazione, Fault
Tolerancecon Circuit Breaker, moduli perl’HTTP e Adapter ORM
theoretics()
moleculerjs/moleculer
12. 12
Docker
Sistema di virtualizzazione software in containers: standardunitofsoftware.
Tecnologia preferita peril deploy di applicazioni: indipendente dal sistema
operativo ospite, isola le applicazioni in container assegnando a ciascuno
determinate risorse.
Permettedi controllare perogni containerl’esposizione di eventuali porte,
l’accesso al fs,…
theoretics()
13. 13
Documento chedefinisce la struttura di una immagine Docker.
La struttura viene costruita «astrati»: ogni strato viene eseguito come container separato marisultato degli strati
precedenti.
Ogni immagine può essere caricata su un containerregistry.
Dockerfile theoretics()
17. 17
Dockercompose
Tool (conCLI) di Dockerche permette di definire un’ambiente applicativo
completo formato da più immagini Dockerche interagiscono tra di lorosotto
forma di «servizi»isolati.
All’interno di un file docker-compose.ymlposso definire: quali immagini
devono essereinstanzate, quali volumi e quali porte ogni container avrà, con
quali variabili d’ambiente verrà eseguito, …
theoretics()
Diverso da un modello SOA (service-oriented architecture): il protocollo di comunicazione è standard, solitamente tramite API o protocollo indipendente dai servizi
Vantaggi: semplicità di deploy e time to market più rapido, maggiore scalabilità, resilienza: un guasto non si propaga sull’intero sistema ma si ferma al servizio, libertà di scelta nelle tecnologie da utilizzare per l’implementazione, migliore distribuzione del carico di lavoro
Preparare un progetto con npm i
Preparare redis e postgres già istanziati
Verificare npm run dev
Eseguire docker!!
Container: Standard Unit of software: incapsula una applicazione e tutte le sue dipendenze. Un’immagine container è un pacchetto software leggero, isolato ed eseguibile che contiene tutto quello che serve per eseguire un’applicazione: codice, runtime, librerie di sistema, impostazioni,…
Un’immagine diventa container quando viene eseguita nel Docker Engine, che si assicura che il pacchetto software non cambi nel tempo e sia sempre uguale a se stesso e stateless
Containers: standard. È un’architettura standard per diverse piattaforme
Containers: leggeri. Docker Engine si assicura di condividere correttamente il kernel dell’OS ospite e quindi le immagini contengono solamente il SW necessario
Containers: sicuri: ogni container è isolato nel miglior modo possibile tecnologicamente
Esempio di docker registry: DockerHub
Docker build
Docker images
Docker run
Docker run –d
Docker ps
Docker-compose up
Fai riepilogo
Sviluppo
Definizione containers e dockerfile
Definizione dockercompose