Presentazione alla Google Dev Fest Mediterranean 2016 di Catania con presentazione sulle metodologie di utilizzo di microservices e sui sistemi per monitorare le infrastrutture
2. /392
• Management
• Team Leader
• Quality Manager
• Web Architect
• Healthcare IT Consultant
• UX Expert
General
O.S.
PHP (6 years)
Javascript (11 years)
ASP(13 years)
MySQL (6 years)
HTML, CSS3 (15 years)
Ruby, Rails (1 year)
Python (1 year)
Developer
• Ubuntu, CentOS
• Mac OSX
• Windows
• IOS - Android
• Embedded OS
• Raspai, Pidora
Chi sono e Cosa faccio
3. /393
Nelle Web App abbiamo diversi strati che comunicano tra di
loro. In questo architettura il software, anche se logicamente
suddiviso, risulta essere un unico sistema Monolitico
- Un unico linguaggio di programmazione
- Scalabilità limitata
- Risorse legate all'applicazione
- Tempi di sviluppo non parallelizzabili
- Manutenzione onerosa
- Non completa riutilizzazione del codice
- Difficile sperimentare
Software Monolitico
4. /394
Software costituito da diversi componenti che
operano per effettuare una sola mansione
interconnessi tra di loro.
Punti di forza
- linguaggi di programmazione diversi
- scalabilità illimitata
- HR legata al microservice
- sviluppo parallelizzabile
- manutenzione facilitata
- completa di utilizzazione del codice
- permette la sperimentazione
Software con Microservices
5. /395
Definizione di Microrservices
Sono dei servizi “micro” autonomi, che
fanno una cosa sola (ma bene!) e che
interagiscono tra di loro… in altre parole
dei sistemi distribuiti.
Cosa è un Microservice
6. /39
Definizione di Microrservices
“Lo stile a micro servizi è un approccio
allo sviluppo di una singola applicazione
come insieme di piccoli servizi, ciascuno
dei quali viene eseguito da un proprio
processo e comunica con un meccanismo,
spesso HTTP API”
Definizione di M.Fowler & J. Levis
6
7. /397
Caratteristiche di un Microservice
UTILIZZO
DECENTRATO DEI
DATI
SCALABILITA'
INDiPENDENTE DA
LINGUAGGIO
POSSIBILITA DI
RIUTILIZZO
Bug Isolati
9. /399
Cosa fa
DOCKER?
Docker sviluppata da Docker inc di Salomon
Hykes è un sistema di virtualizzazione basato su
container. Mentre nella virtualizzazione classica
sono virtualizzati programmi e kernel del sistema
operativo nella virtualizzazione per containers
sono virtualizzati software e librerie.
GnuLinuxMeetin
Docker
11. /3911
Platform Automation Deployment Automation Build & Test Automation
Diagnostic & Instrumentation Monitoring & Alerting AuthN/AuthZ
Messaging Channel
Microservice A Microservice B Microservice C Microservice D MicroserviceE
Architettura per Microservices
12. /3912
Generare report più o
meno complessi
Effettuare delle misurazioni
rispetto a delle metriche
Deployment Automation
Collezionare il codice dai
repository remoti
Deployment Automation
Lanciare test statici e dinamici
sul codice
Continuous Delivery
13. /3913
Build Privata Server CI
Lancio di una build privata
Lo sviluppatore effettua una Build Privata
sulla propria postazione così da integrare
eventuali cambiamenti effettuati dagli altri
membri del team e verificato che
l’integrazione dia un sistema funzionante.
Commit sul CVS del codice
Lo sviluppatore conclusa l’attività effettua
un commit sul repository del sistema di
controllo di versione. 5
Lancio SCRIPT su server CI
Il server di CI accortosi del cambiamento
scarica il codice aggiornato e lancia uno
script di build così da integrare questi
cambiamenti e da ricostruire il sistema e ri-
testarlo ed a seguito del risultato della
build, genera un feedback (es: email)
visibile al team
CVS
Flusso di Lavoro per un Microservice
17. /3917
Platform Automation Deployment Automation Build & Test Automation
Diagnostic & Instrumentation Monitoring & Alerting AuthN/AuthZ
Messaging Channel
Microservice A
Microservice B Microservice C Microservice D MicroserviceE
Event
Published
Event
Subscribed
Event
Published/
Subscribed
Architettura per Microservices
18. /3918
Easy to Use!
Runs on all major O.S.
Open Source
Robusta soluzione per messaggistica tra
applicazioni con supporto a diverse
piattaforme di sviluppo
Messaging Channel
20. /3920
Platform Automation Deployment Automation Build & Test Automation
Diagnostic & Instrumentation Monitoring & Alerting AuthN/AuthZ
Messaging Channel
Microservice A Microservice B Microservice C Microservice D MicroserviceE
Event
Published
Event
Subscribed
Event
Published/
Subscribed
Shared
Configuration
Dependency
Management
Architettura per Microservices
21. /3921
01
02 05
06
Canticle.io
Permette di gestire dipendenze
di micorservices.
DATABASE
E’ possibile gestire dipendenze
tramite DB
COMPOSER
Gestisce le dipendenze in PHP
Maven
Strumento per la gestione dei
progetti per la piattaforma Java
Dipendenze e Configurazioni
Dipendenze
Configurazioni
VS
22. /3922
Platform Automation Deployment Automation Build & Test Automation
Diagnostic & Instrumentation Monitoring & Alerting AuthN/AuthZ
Messaging Channel
Microservice A Microservice B Microservice C Microservice D MicroserviceE
Event
Published
Event
Subscribed
Event
Published/
Subscribed
Shared
Configuration
Dependency
ManagementService
Gateway
Architettura per Microservices
23. /3923
Service Gateway
- Fonte: https://www.nginx.com/blog/building-microservices-using-an-api-gateway/
L’API Gateway incapsula l’architettura interna dei microservicese fornisce delle API a misura
di client. Può avere anche responsabilità come autentication, monitoring, load balancing,
caching, request shaping, static response handling (StrongLoop,NodeJS)
24. /3924
Platform Automation Deployment Automation Build & Test Automation
Diagnostic & Instrumentation Monitoring & Alerting AuthN/AuthZ
Messaging Channel
Microservice A
Microservice B Microservice C Microservice D MicroserviceE
Event
Published
Event
Subscribed
Event
Published/
Subscribed
Shared
Configuration
Dependency
Management
Service
Gateway
Service
Routing
Service
Discovery
Architettura per Microservices
25. /3925
Platform Automation Deployment Automation Build & Test Automation
Diagnostic & Instrumentation Monitoring & Alerting AuthN/AuthZ
Messaging Channel
Microservice A Microservice B Microservice C Microservice D Microservice E
Event
Published
Event
Subscribed
Event
Published/
Subscribed
Shared
Configuration
Dependency
ManagementService
Gateway
Service
Routing
Architettura per Microservices
Service
Discovery
30. /3930
Sviluppo di un software
capace di generare pdf da
applicazioni web e quindi da
pagine HTML.
PDF da WEB PAGE
PDF da Pagina WEB
Generare da URL di una pagina web con
accesso protetto, un file in formato PDF
Invio PDF ad altri servizi
La destinazione del file può essere
differente dall’origine che ha generato la
richiesta, secondo le configurazioni della
request.
Soluzione Riutilizzabile in altri sistemi
Riutilizzabile in altri servizi, cioè non legato
o inglobato in ogni singola applicazione e
quindi indipendente dall’ambiente che lo
genera.
Soluzione Automatizzata
Ricevere le request di elaborazione del pdf
e rispondere ad ogni servizio che lo
richiede.
Soluzione Indipendente
Il software resta attivo anche se il
servizio in ricezione o quello in
attesa del pdf va giù.
Soluzione Dinamica
Risponde in modo differente ad ogni
richiesta.
Feature del Microservice
31. /3931
Browser
Visualizzazione nel
Browers di
esecuzione a scopo
di test.
Attachment
File come allegato
scaricato da
browser.
File System
Local Storage
Rest API
Inoltro file ad URL o
Servizio in ascolto
direttamente
connesso
RabbitMQ
Message Broker
che consuma un
coda.
Invio dati come
MESSAGE
Output del Microservice
32. /3932
Framework per realizzare applicazioni Web
in JavaScript, per la scrittura di applicazioni
“server-side” in modalità event-drive.
Garantisce efficienza delle applicazioni
grazie al comportamento asincrono.
Node.JS
Linguaggio che compila in
JavaScript
CoffeeScript
LInguaggio di scripting orientato agli
oggetti e agli eventi
Javascript
Servizio web di hosting per lo sviluppo di progetti
software, che usa il sistema di controllo di versione
Git..
GitHub
Light-weight web application framework
to help organize your web application
into an MVC architecture on the server
side.
Express.js basically helps you manage
everything, from routes, to handling
requests and views.
ExpressJS
Headless browser, Tool che consente
la manipolazione via JavaScript del
DOM, di CSS, JSON, Ajax altre
tecnologie Web client-side da riga di
comando, senza alcun rendering a
video. Utilizzato in tutti quei contesti in
cui si ha bisogno di automatizzare le
tipiche attività di un Web browser
PhantomJS
Tecnologie Utilizzate
33. /3933
Abbiamo implementato html2pdf.it in un container, dotato di REST APIs e collegato a RabbitMQ per metterlo in comunicazione
con altri microservice.
Docker Container
Ambiente indipendente e
automatizzato
Json
Javascript Object Notation
API Rest
Application Programming Interface
REpresentational State Transfer
Stateless architecture that
generally runs over HTTPS/TLS
RabbitMQ
message-oriented middleware,
broker di messaggistica, che
implementa il protocollo Advanced
Message Queuing Protocol
(AMQP)
API
Base Software Improvements
34. /3934
E
Some Title
Goes Here
Il flusso di lavoro parte dunque
da un dato servizio che invia tramite
RabbitMQ un messaggio Json al
Microservice Html2Pdf contenente
un action. Il Nostro Microservice
elabora la action come un http-
request grazie a Node.JS &
Express.JS
Web APP Request
PhantomJS il quale renderizza la
pagina web in un pdf, passando
l’output generato nuovamente a
coffeescript che genera nella
reponse il file binario in formato
Pdf o in Base64.
Microservice Response
HTTP
Request
Produzione del PDF
35. /3935
Html2Pdf
Service 2
Service 1
Control Flow Deployment Storage Backup Networking
i servizi 1,2 e 3 inviano la request
consumando una coda RabbitMQ
che viene inoltrata ad Html2Pdf
Service 1, 2, 3
Restituisce la response come
PDF o Json a RabbitMQ
Html2Pdf Microservice
Cloud in ascolto su Rabbit che riceve le
request consentendo upload e download
dei files .
ownCloud Microservice Le response possono essere restituite ai
servizi di origine oppure inoltrate ad altri
servizi in coda su RabbitMQ.
Routing
Service 3
download upload
Dialogo tra Microservices