3. GNULINUXMEETING 2016 PALERMO
Microservice Architecture
1
Put each element of functionality into a separate device .
Developing Scalable
Il Microservice è uno stile architettonico in cui grandi
applicazioni software complesse sono suddivise in una serie
di servizi indipendenti.
.
!
Ogni Microservice contiene un servizio responsabile di un
compito specifico.
!
I Microservices interagiscono tra loro creando una rete
software complessa.
Scalability
Elasticity
Agility
Operability and Portability
4. GNULINUXMEETING 2016 PALERMO
Docker Containers
2
I contenitori Docker possono avvolgere pezzi di
software in un file system completo che contiene
tutto ciò di cui ha bisogno per funzionare: codice,
runtime, strumenti di sistema e librerie di sistema ,
assicurando che verrà eseguito in modo coerente in
tutti gli ambienti.
Docker Container
Ogni servizio verrà eseguito nel suo
contenitore Docker, e comunicherà
utilizzando protocolli sincroni come HTTP/
REST o protocolli asincroni come AMQP.
5. GNULINUXMEETING 2016 PALERMO
Problem Solving : Creazione di Pdf da URL
3 Generare PDF da Pagine HTML
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.
6. GNULINUXMEETING 2016 PALERMO
Solution Requirements
4 Creazione di PDF binary o un Json PDF-Base64
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
7. GNULINUXMEETING 2016 PALERMO
Decision Making
5 Software base opensource : html2pdf.it -Generate PDFs from any web-page
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
8. GNULINUXMEETING 2016 PALERMO
Base Software Improvements
6
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
Adds On html2pdf.it
10. GNULINUXMEETING 2016 PALERMO
WorkFlow Html2Pdf
8
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
11. GNULINUXMEETING 2016 PALERMO
Microservice Networking
9 Dialogo tra containers
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
13. GNULINUXMEETING 2016 PALERMO
Olomedia Support Team
Production Manager
Daniele Mondello
! "
C. E. O. Olomedia srl
Resources and Development
Manager
Marcello Vetro
! vetro@olomedia.it "
Ingegnere Informatico
info@danielemondello.it
14. Contact Info
Roberta Randazzo
Software Developer, Programmer
https://github.com/reverserob
https://www.facebook.com/RubiRuben
r.randazzo85@gmail.com
https://twitter.com/RandazzoRoberta
https://www.linkedin.com/in/roberta-randazzo-a35192b7
Thank you.
15. The End Html2Pdf - Web Page to PDF Converter
Microservice, un caso reale.