Evoluzione del web development dalle cgi ai microservices

51
EVOLUZIONE DEL WEB DEVELOPMENT DALLE CGI AI MICROSERVICES Daniele Mondello

Transcript of Evoluzione del web development dalle cgi ai microservices

Page 1: Evoluzione del web development dalle cgi ai microservices

EVOLUZIONE DEL WEB DEVELOPMENTDALLE CGI AI MICROSERVICES

Daniele Mondello

Page 2: Evoluzione del web development dalle cgi ai microservices

/502

•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

Page 3: Evoluzione del web development dalle cgi ai microservices

/503

TIM BERNERS-LEE

L’inizio: HTMLMARZO 1989

Page 4: Evoluzione del web development dalle cgi ai microservices

/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

Page 5: Evoluzione del web development dalle cgi ai microservices

/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 World\n";

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/perlprint "Content-type: text/html\n\n";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

Page 6: Evoluzione del web development dalle cgi ai microservices

/506

ASP Linguaggio?! NO!

ASP (ACTIVE SERVER PAGES) NON È UN LINGUAGGIO DI PROGRAMMAZIONE MA UNA TECNOLOGIA MICROSOFT PER CREAZIONE DI 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

Page 7: Evoluzione del web development dalle cgi ai microservices

/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>

Page 8: Evoluzione del web development dalle cgi ai microservices

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

Page 9: Evoluzione del web development dalle cgi ai microservices

/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

Page 10: Evoluzione del web development dalle cgi ai microservices

/5010

PHP Il diluvio di CMS

Page 11: Evoluzione del web development dalle cgi ai microservices

/5011

Il diluvio di FRAMEWORK

Page 12: Evoluzione del web development dalle cgi ai microservices

/5012

19951995

I giganti litigano!

Page 13: Evoluzione del web development dalle cgi ai microservices

/5013

09/01/2007APPLE RIVOLUZIONA 3 SETTORI

APPLE rivoluziona lo sviluppo del Web Development

Page 14: Evoluzione del web development dalle cgi ai microservices

/5014

THE HERO! 1996 1996 V 1 NO PDA

…ed il Front End?

Page 15: Evoluzione del web development dalle cgi ai microservices

/5015

Framework per il Front End

Page 16: Evoluzione del web development dalle cgi ai microservices

/5016

Back End vs Front End

Page 17: Evoluzione del web development dalle cgi ai microservices

/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

Page 18: Evoluzione del web development dalle cgi ai microservices

/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

Page 19: Evoluzione del web development dalle cgi ai microservices

/5019

Definizione di MicrorservicesSono 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

Page 20: Evoluzione del web development dalle cgi ai microservices

/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

Page 21: Evoluzione del web development dalle cgi ai microservices

/5021

Caratteristiche di un Microservice

UTILIZZO DECENTRATO DEI

DATISCALABILITA'

INDiPENDENTE DA LINGUAGGIO

POSSIBILITA DI RIUTILIZZO

BUG ISOLATI

Page 22: Evoluzione del web development dalle cgi ai microservices

/5022

L’obiettivo di un Microservice

Micro è l’obiettivo!

Page 23: Evoluzione del web development dalle cgi ai microservices

/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

Page 24: Evoluzione del web development dalle cgi ai microservices

/5024

Microservice A Microservice B Microservice C Microservice D MicroserviceE

Architettura per Microservices

Page 25: Evoluzione del web development dalle cgi ai microservices

/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

Page 26: Evoluzione del web development dalle cgi ai microservices

/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

Page 27: Evoluzione del web development dalle cgi ai microservices

/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

Page 28: Evoluzione del web development dalle cgi ai microservices

/5028

I progetti in Jenkins

Page 29: Evoluzione del web development dalle cgi ai microservices

/5029

Un progetto in Jenkins 1/2

Page 30: Evoluzione del web development dalle cgi ai microservices

/5030

Un progetto in Jenkins 2/2

Page 31: Evoluzione del web development dalle cgi ai microservices

/5031

Platform Automation Deployment Automation Build & Test Automation

Diagnostic & Instrumentation Monitoring & Alerting AuthN/AuthZ

Messaging ChannelMicroservice A

Microservice B Microservice C Microservice D MicroserviceE

Event Published

Event Subscribed

Event Published/Subscribed

Architettura per Microservices

Page 32: Evoluzione del web development dalle cgi ai microservices

/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

Page 33: Evoluzione del web development dalle cgi ai microservices

/5033

Utilizzo Rabbit MQ

Page 34: Evoluzione del web development dalle cgi ai microservices

/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

Page 35: Evoluzione del web development dalle cgi ai microservices

/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

Page 36: Evoluzione del web development dalle cgi ai microservices

/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

Page 37: Evoluzione del web development dalle cgi ai microservices

/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)

Page 38: Evoluzione del web development dalle cgi ai microservices

/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 ManagementService

Gateway

Service Routing

Service Discovery

Architettura per Microservices

Page 39: Evoluzione del web development dalle cgi ai microservices

/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

Page 40: Evoluzione del web development dalle cgi ai microservices

/50

Chi utilizza i Microservices?

40

Page 41: Evoluzione del web development dalle cgi ai microservices

/50

Chaos Monkey

Netflix Control

41

Page 42: Evoluzione del web development dalle cgi ai microservices

/5042

Software Developer Junior

Roberta Randazzo

PROBLEMA: PDF PRINTER PER WEB APP

Esempio pratico di un Microservice

Page 43: Evoluzione del web development dalle cgi ai microservices

/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

Page 44: Evoluzione del web development dalle cgi ai microservices

/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

Page 45: Evoluzione del web development dalle cgi ai microservices

/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 JavaScriptCoffeeScript

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

Page 46: Evoluzione del web development dalle cgi ai microservices

/5046

Abbiamo implementato html2pdf.it in un container, dotato di REST APIs e collegato a RabbitMQ per metterlo in comunicazione con altri microservice.

Docker ContainerAmbiente indipendente e automatizzato

JsonJavascript Object Notation

API RestApplication Programming Interface

REpresentational State Transfer Stateless architecture that

generally runs over HTTPS/TLS

RabbitMQmessage-oriented middleware,

broker di messaggistica, che implementa il protocollo Advanced

Message Queuing Protocol (AMQP)

API

Base Software Improvements

Page 47: Evoluzione del web development dalle cgi ai microservices

/5047

ESome 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

Page 48: Evoluzione del web development dalle cgi ai microservices

/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

Page 49: Evoluzione del web development dalle cgi ai microservices

/5049

Final Result

Risultato Finale

Page 50: Evoluzione del web development dalle cgi ai microservices

/5050

Progettare Microservices

Page 51: Evoluzione del web development dalle cgi ai microservices

GRAZIE PER L’[email protected]

@dmondello

Danielemondello

Daniele Mondello