Come si è sviluppato negli ultimi 20 anni lo sviluppo web? Nel Talk tenutosi all'incubatore Arca di Palermo per la masterclass di Angular 4 abbiamo fatto una cavalcata che ci ha portato dalle cgi in Perl ai Microservices
4. /504
PERL PRACTICAL EXTRACTION AND REPORT
LANGUAGE È UN LINGUAGGIO AD ALTO
LIVELLO, DINAMICO, PROCEDURALE E
INTERPRETATO, CREATO NEL 1987 DA LARRY
WALL. NOTO COME LINGUAGGIO PER LO
SVILUPPO DI CGI
1987
Perl il linguaggio Cammello
5. /505
Eseguibile in locale Eseguibile da un browser
Possibilità di formattazione
eseguibile a distanza con permessi
differenti rispetto al file system
LA RIVOLUZIONE DELLE CGI
print "Hello Worldn";
perl hello.plLanciare il comando
1
2
Creare e salvare file hello.pl con il seguente codice:
Creare e salvare file hello.cgi con il seguente codice:
#!/usr/local/bin/perl
print "Content-type: text/htmlnn";
print "<H1>Hello World</H1>n”;
rendere eseguibile sul server hello.ggi e dare i permessi
puntare con il browser a hello.cgi
Hello World in Perl
6. /506
ASP Linguaggio?! NO!
ASP (ACTIVE SERVER PAGES) NON È UN
LINGUAGGIO DI PROGRAMMAZIONE MA UNA
TECNOLOGIA MICROSOFT PER CREAZIONE D
PAG I N E W E B D I N A M I C H E AT T R AV E R S O
LINGUAGGI DI SCRIPT COME VBSCRIPT E JSCRIPT.
1997
7. /507
Integrate nelle pagine HTML
Sono orientate agli oggetti
Necessitano di interprete e non compilazione.
Sfruttavano componenti server ActiveX.
Utilizzo di VBScript o Jscript
Era facile una connessione con access tramite odbc
Potevi usare IIS o PWS
PAGINE IN ASP
<%@ LANGUAGE = JScript %>
<html>
<head>
<title>Pagina in Asp</title>
</head>
<body>
<% Response.Write("Hello World!”); %>
</body>
</html>
1
2
Hello World in ASP
<html>
<head>
<title>Pagina in Asp</title>
</head>
<body>
<script language="VBScript" runat="Server">
response.write "Hello World!"
</script>
</body>
</html>
8. PHP Per pagine personali
PHP (ACRONIMO RICORSIVO DI "PHP: HYPERTEXT
PREPROCESSOR", PREPROCESSORE DI IPERTESTI;
ORIGINARIAMENTE ACRONIMO DI "PERSONAL HOME
PA G E " ) È U N L I N G U A G G I O D I S C R I P T I N G
INTERPRETATO, ORIGINARIAMENTE CONCEPITO PER
LA PROGRAMMAZIONE DI PAGINE WEB DINAMICHE.
1995
9. /509
Integrate nelle pagine HTML
Sono orientate agli oggetti
Necessitano di interprete e non compilazione.
Multipiattaforma
Semplice
Era facile una connessione con mysql tramite odbc
Potevi usare Apache
PAGINE IN PHP
<html>
<head>
<title>Test PHP</title>
</head>
<body>
<?php echo "Hello World!<p>"; ?>
</body>
</html>
Hello World in PHP
17. /5017
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
18. /5018
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
19. /5019
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
20. /50
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
20
21. /5021
Caratteristiche di un Microservice
UTILIZZO
DECENTRATO DEI
DATI
SCALABILITA'
INDiPENDENTE DA
LINGUAGGIO
POSSIBILITA DI
RIUTILIZZO
BUG ISOLATI
23. /5023
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
25. /5025
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
26. /5026
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
27. /5027
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
31. /5031
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
32. /5032
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
34. /5034
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
35. /5035
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
36. /5036
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
37. /5037
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)
38. /5038
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
39. /5039
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
43. /5043
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
44. /5044
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
45. /5045
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
46. /5046
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
47. /5047
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
48. /5048
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