Microservizi, scenari del prossimo e del lontano futuro

Post on 22-Jan-2017

319 views 1 download

transcript

saverio.giallorenzo@gmail.com | DISI at Unibo | Bologna | Meeting on Microservices 2016

Microservizi scenari del prossimo e del lontano futuro

1

Saverio Giallorenzo

saverio.giallorenzo@gmail.com | DISI at Unibo | San Francisco | September Microservices Meetup

Buon Pomeriggio

2

Saverio

Post-doc presso il Dipartimento di Informatica - Scienza e Ingegneria dell’Università di Bologna.

Tematiche di ricerca:- Programmazione concorrente

e distribuita;- Coreografie, Tipi Sessione e

Algebre di Processi.- Microservizi;- Jolie;

saverio.giallorenzo@gmail.com | DISI at Unibo | Bologna | Meeting on Microservices 2016

Microservizi scenari del prossimo e del lontano futuro

3

Saverio Giallorenzo

WARNINGMAY CONTAIN

CHOREOGRAPHIES

saverio.giallorenzo@gmail.com | DISI at Unibo | Bologna | Meeting on Microservices 2016

I Limiti di oggi

4

There is no effort without error and

shortcoming.“Citizenship in a Republic”, Theodore Roosevelt, 1910

saverio.giallorenzo@gmail.com | DISI at Unibo | Bologna | Meeting on Microservices 2016

I Limiti di oggi

4

There is no effort without error and

shortcoming.

innovation

“Citizenship in a Republic”, Theodore Roosevelt, 1910

saverio.giallorenzo@gmail.com | DISI at Unibo | Bologna | Meeting on Microservices 2016

Programmazione distribuita5

Vendite Magazzino Spedizioni

richiestapreventivo

confermadisponibilità

optinvio

preventivo

prodotti nondisponibili

optapprovazionepreventivo

annullamentopreventivo

inoltro ordineinvio ordine

invio tracking code

conferma ricezione

confermaconsegna

Vendite Magazzino Spedizioni

saverio.giallorenzo@gmail.com | DISI at Unibo | Bologna | Meeting on Microservices 2016

Programmazione distribuita5

Vendite Magazzino Spedizioni

richiestapreventivo

confermadisponibilità

optinvio

preventivo

prodotti nondisponibili

optapprovazionepreventivo

annullamentopreventivo

inoltro ordineinvio ordine

invio tracking code

conferma ricezione

confermaconsegna

Cosa c’è qua dentro (e.g., error tracing)?

Vendite Magazzino Spedizioni

saverio.giallorenzo@gmail.com | DISI at Unibo | Bologna | Meeting on Microservices 2016

Programmazione distribuita5

Vendite Magazzino Spedizioni

richiestapreventivo

confermadisponibilità

optinvio

preventivo

prodotti nondisponibili

optapprovazionepreventivo

annullamentopreventivo

inoltro ordineinvio ordine

invio tracking code

conferma ricezione

confermaconsegna

Cosa c’è qua dentro (e.g., error tracing)?

Funzionalità interna?O del corriere? Docs/APIs?

Vendite Magazzino Spedizioni

saverio.giallorenzo@gmail.com | DISI at Unibo | Bologna | Meeting on Microservices 2016

Programmazione distribuita5

Vendite Magazzino Spedizioni

richiestapreventivo

confermadisponibilità

optinvio

preventivo

prodotti nondisponibili

optapprovazionepreventivo

annullamentopreventivo

inoltro ordineinvio ordine

invio tracking code

conferma ricezione

confermaconsegna

Cosa c’è qua dentro (e.g., error tracing)?

Funzionalità interna?O del corriere? Docs/APIs?

Vendite Magazzino Spedizioni

saverio.giallorenzo@gmail.com | DISI at Unibo | Bologna | Meeting on Microservices 2016

Programmazione distribuita5

Vendite Magazzino Spedizioni

richiestapreventivo

confermadisponibilità

optinvio

preventivo

prodotti nondisponibili

optapprovazionepreventivo

annullamentopreventivo

inoltro ordineinvio ordine

invio tracking code

conferma ricezione

confermaconsegna

Cosa c’è qua dentro (e.g., error tracing)?

Funzionalità interna?O del corriere? Docs/APIs?

In serie o parallelo?

Vendite Magazzino Spedizioni

saverio.giallorenzo@gmail.com | DISI at Unibo | Bologna | Meeting on Microservices 2016

“Non è un mio problema”6

Direzione

Vendite

MagazzinoSpedizioni

saverio.giallorenzo@gmail.com | DISI at Unibo | Bologna | Meeting on Microservices 2016

“Non è un mio problema”6

Direzione

Vendite

MagazzinoSpedizioni

Big Picture

saverio.giallorenzo@gmail.com | DISI at Unibo | Bologna | Meeting on Microservices 2016

“Non è un mio problema”6

Direzione

Vendite

MagazzinoSpedizioni

Big Picture

Golfo dell’ esecuzione

saverio.giallorenzo@gmail.com | DISI at Unibo | Bologna | Meeting on Microservices 2016

“Non è un mio problema”6

Direzione

Vendite

MagazzinoSpedizioni

Big Picture

Micro-gestione

Golfo dell’ esecuzione

saverio.giallorenzo@gmail.com | DISI at Unibo | Bologna | Meeting on Microservices 2016

“Non è un mio problema”6

Direzione

Vendite

MagazzinoSpedizioni

Big Picture

Micro-gestione

Golfo dell’ esecuzione

Coordinamento?Responsabilità?

saverio.giallorenzo@gmail.com | DISI at Unibo | Bologna | Meeting on Microservices 2016

“Non è un mio problema”6

Direzione

Vendite

MagazzinoSpedizioni

Big Picture

Micro-gestione

Golfo dell’ esecuzione Golfo della

Valutazione

Coordinamento?Responsabilità?

saverio.giallorenzo@gmail.com | DISI at Unibo | Bologna | Meeting on Microservices 2016

“Non è un mio problema”6

Direzione

Vendite

MagazzinoSpedizioni

Big Picture

Micro-gestione

Golfo dell’ esecuzione Golfo della

Valutazione

Coordinamento?Responsabilità?

saverio.giallorenzo@gmail.com | DISI at Unibo | Bologna | Meeting on Microservices 2016

Architetture scalabili7

Vendite Magazzino Spedizioni

WebServer

CRM

GestoreOrdini

GestioneMateriale

GestioneOrdini

GestioneSpedizioni

TrackingSpedizioni

WebServer

WebServer

GestoreOrdini

GestioneOrdini

GestioneOrdini

GestioneOrdini

preventivo

tracking

?

saverio.giallorenzo@gmail.com | DISI at Unibo | Bologna | Meeting on Microservices 2016

Architetture scalabili7

Vendite Magazzino Spedizioni

WebServer

CRM

GestoreOrdini

GestioneMateriale

GestioneOrdini

GestioneSpedizioni

TrackingSpedizioni

WebServer

WebServer

GestoreOrdini

GestioneOrdini

GestioneOrdini

GestioneOrdini

preventivo

tracking

?

=

saverio.giallorenzo@gmail.com | DISI at Unibo | Bologna | Meeting on Microservices 2016

Architetture scalabili7

Vendite Magazzino Spedizioni

WebServer

CRM

GestoreOrdini

GestioneMateriale

GestioneOrdini

GestioneSpedizioni

TrackingSpedizioni

WebServer

WebServer

GestoreOrdini

GestioneOrdini

GestioneOrdini

GestioneOrdini

preventivo

tracking

?

ricollegare le frecce ad ogni “scalata”=

saverio.giallorenzo@gmail.com | DISI at Unibo | Bologna | Meeting on Microservices 2016

Architetture scalabili7

Vendite Magazzino Spedizioni

WebServer

CRM

GestoreOrdini

GestioneMateriale

GestioneOrdini

GestioneSpedizioni

TrackingSpedizioni

WebServer

WebServer

GestoreOrdini

GestioneOrdini

GestioneOrdini

GestioneOrdini

preventivo

tracking

?

ricollegare le frecce ad ogni “scalata”=

saverio.giallorenzo@gmail.com | DISI at Unibo | Bologna | Meeting on Microservices 2016

Architetture scalabili7

Vendite Magazzino Spedizioni

WebServer

CRM

GestoreOrdini

GestioneMateriale

GestioneOrdini

GestioneSpedizioni

TrackingSpedizioni

WebServer

WebServer

GestoreOrdini

GestioneOrdini

GestioneOrdini

GestioneOrdini

preventivo

tracking

?

ricollegare le frecce ad ogni “scalata”=

saverio.giallorenzo@gmail.com | DISI at Unibo | Bologna | Meeting on Microservices 2016

Uno sguardo al futuro Programmazione Coreografica

8

saverio.giallorenzo@gmail.com | DISI at Unibo | Bologna | Meeting on Microservices 2016

Enter AIOCJ

9

Vendite Magazzino Spedizioni

richiestapreventivo

confermadisponibilità

optinvio

preventivo

prodotti nondisponibili

optapprovazionepreventivo

annullamentopreventivo

inoltro ordineinvio ordine

invio tracking code

conferma ricezione

confermaconsegna

Vendite Magazzino Spedizioni

ordine@Cliente = getInput( "Inserire richiesta prodotti" );

richiesta_prev: Cliente( ordine ) -> Vendite( ordine );

conferma_disp: Vendite( ordine ) -> Magazzino( materiale )

saverio.giallorenzo@gmail.com | DISI at Unibo | Bologna | Meeting on Microservices 2016

Visione Architetturale

10

ordine@Cliente = getInput( "Inserire richiesta prodotti" );

richiesta_prev: Cliente( ordine ) -> Vendite( ordine );

conferma_disp: Vendite( ordine ) -> Magazzino( materiale )

saverio.giallorenzo@gmail.com | DISI at Unibo | Bologna | Meeting on Microservices 2016

Visione Architetturale

10

Client Vendite SpedizioniMagazzino

ordine@Cliente = getInput( "Inserire richiesta prodotti" );

richiesta_prev: Cliente( ordine ) -> Vendite( ordine );

conferma_disp: Vendite( ordine ) -> Magazzino( materiale )

saverio.giallorenzo@gmail.com | DISI at Unibo | Bologna | Meeting on Microservices 2016

Visione Architetturale

10

Client Vendite SpedizioniMagazzino

ordine@Cliente = getInput( "Inserire richiesta prodotti" );

richiesta_prev: Cliente( ordine ) -> Vendite( ordine );

conferma_disp: Vendite( ordine ) -> Magazzino( materiale )

saverio.giallorenzo@gmail.com | DISI at Unibo | Bologna | Meeting on Microservices 2016 11

Vendite Magazzino Spedizioni

richiestapreventivo

confermadisponibilità

optinvio

preventivo

prodotti nondisponibili

optapprovazionepreventivo

annullamentopreventivo

inoltro ordineinvio ordine

invio tracking code

conferma ricezione

confermaconsegna

Vendite Magazzino Spedizioni

include controlloDisp from “socket://magazzino:8000"

ordine@Cliente = getInput( "Inserire richiesta prodotti" );

richiesta_prev: Cliente( ordine ) -> Vendite( ordine );

conferma_disp: Vendite( ordine ) -> Magazzino( materiale );

disp@Magazzino = controlloDisp( materiale )

saverio.giallorenzo@gmail.com | DISI at Unibo | Bologna | Meeting on Microservices 2016 11

Vendite Magazzino Spedizioni

richiestapreventivo

confermadisponibilità

optinvio

preventivo

prodotti nondisponibili

optapprovazionepreventivo

annullamentopreventivo

inoltro ordineinvio ordine

invio tracking code

conferma ricezione

confermaconsegna

Vendite Magazzino Spedizioni

include controlloDisp from “socket://magazzino:8000"

ordine@Cliente = getInput( "Inserire richiesta prodotti" );

richiesta_prev: Cliente( ordine ) -> Vendite( ordine );

conferma_disp: Vendite( ordine ) -> Magazzino( materiale );

disp@Magazzino = controlloDisp( materiale )

Cosa c’è qua dentro

saverio.giallorenzo@gmail.com | DISI at Unibo | Bologna | Meeting on Microservices 2016 11

Vendite Magazzino Spedizioni

richiestapreventivo

confermadisponibilità

optinvio

preventivo

prodotti nondisponibili

optapprovazionepreventivo

annullamentopreventivo

inoltro ordineinvio ordine

invio tracking code

conferma ricezione

confermaconsegna

Vendite Magazzino Spedizioni

include controlloDisp from “socket://magazzino:8000"

ordine@Cliente = getInput( "Inserire richiesta prodotti" );

richiesta_prev: Cliente( ordine ) -> Vendite( ordine );

conferma_disp: Vendite( ordine ) -> Magazzino( materiale );

disp@Magazzino = controlloDisp( materiale )

Cosa c’è qua dentro

saverio.giallorenzo@gmail.com | DISI at Unibo | Bologna | Meeting on Microservices 2016 11

Vendite Magazzino Spedizioni

richiestapreventivo

confermadisponibilità

optinvio

preventivo

prodotti nondisponibili

optapprovazionepreventivo

annullamentopreventivo

inoltro ordineinvio ordine

invio tracking code

conferma ricezione

confermaconsegna

Vendite Magazzino Spedizioni

include controlloDisp from “socket://magazzino:8000"

ordine@Cliente = getInput( "Inserire richiesta prodotti" );

richiesta_prev: Cliente( ordine ) -> Vendite( ordine );

conferma_disp: Vendite( ordine ) -> Magazzino( materiale );

disp@Magazzino = controlloDisp( materiale )

Cosa c’è qua dentro

saverio.giallorenzo@gmail.com | DISI at Unibo | Bologna | Meeting on Microservices 2016 11

Vendite Magazzino Spedizioni

richiestapreventivo

confermadisponibilità

optinvio

preventivo

prodotti nondisponibili

optapprovazionepreventivo

annullamentopreventivo

inoltro ordineinvio ordine

invio tracking code

conferma ricezione

confermaconsegna

Vendite Magazzino Spedizioni

include controlloDisp from “socket://magazzino:8000"

ordine@Cliente = getInput( "Inserire richiesta prodotti" );

richiesta_prev: Cliente( ordine ) -> Vendite( ordine );

conferma_disp: Vendite( ordine ) -> Magazzino( materiale );

disp@Magazzino = controlloDisp( materiale )

Cosa c’è qua dentro

saverio.giallorenzo@gmail.com | DISI at Unibo | Bologna | Meeting on Microservices 2016

Visione Architetturale

12

Vendite Magazzino Spedizioni

WebServer

CRM

GestoreOrdini

GestioneMateriale

GestioneOrdini

GestioneSpedizioni

TrackingSpedizioni

Client Vendite SpedizioniMagazzinoCliente

saverio.giallorenzo@gmail.com | DISI at Unibo | Bologna | Meeting on Microservices 2016

Visione Architetturale

12

Vendite Magazzino Spedizioni

WebServer

CRM

GestoreOrdini

GestioneMateriale

GestioneOrdini

GestioneSpedizioni

TrackingSpedizioni

Client Vendite SpedizioniMagazzino

Funzione controlloDisp

Cliente

saverio.giallorenzo@gmail.com | DISI at Unibo | Bologna | Meeting on Microservices 2016 13

Vendite Magazzino Spedizioni

richiestapreventivo

confermadisponibilità

optinvio

preventivo

prodotti nondisponibili

optapprovazionepreventivo

annullamentopreventivo

inoltro ordineinvio ordine

invio tracking code

conferma ricezione

confermaconsegna

Vendite Magazzino Spedizioni

include controlloDisp from “socket://magazzino:8000”

include calcPreventivo from “socket://vendite:8001"

ordine@Cliente = getInput( "Inserire richiesta prodotti" );

richiesta_prev: Cliente( ordine ) -> Vendite( ordine );

conferma_disp: Vendite( ordine ) -> Magazzino( materiale );

disp@Magazzino = controlloDisp( materiale );if ( disp )@Magazzino {

preventivo@Vendite = calcPreventivo( ordine );

invio_prev: Vendite( preventivo ) -> Cliente( preventivo );

} else {

prodotto_non_disp: Vendite() -> Cliente()

}

saverio.giallorenzo@gmail.com | DISI at Unibo | Bologna | Meeting on Microservices 2016 13

Vendite Magazzino Spedizioni

richiestapreventivo

confermadisponibilità

optinvio

preventivo

prodotti nondisponibili

optapprovazionepreventivo

annullamentopreventivo

inoltro ordineinvio ordine

invio tracking code

conferma ricezione

confermaconsegna

Vendite Magazzino Spedizioni

include controlloDisp from “socket://magazzino:8000”

include calcPreventivo from “socket://vendite:8001"

ordine@Cliente = getInput( "Inserire richiesta prodotti" );

richiesta_prev: Cliente( ordine ) -> Vendite( ordine );

conferma_disp: Vendite( ordine ) -> Magazzino( materiale );

disp@Magazzino = controlloDisp( materiale );if ( disp )@Magazzino {

preventivo@Vendite = calcPreventivo( ordine );

invio_prev: Vendite( preventivo ) -> Cliente( preventivo );

} else {

prodotto_non_disp: Vendite() -> Cliente()

}

saverio.giallorenzo@gmail.com | DISI at Unibo | Bologna | Meeting on Microservices 2016 13

Vendite Magazzino Spedizioni

richiestapreventivo

confermadisponibilità

optinvio

preventivo

prodotti nondisponibili

optapprovazionepreventivo

annullamentopreventivo

inoltro ordineinvio ordine

invio tracking code

conferma ricezione

confermaconsegna

Vendite Magazzino Spedizioni

include controlloDisp from “socket://magazzino:8000”

include calcPreventivo from “socket://vendite:8001"

ordine@Cliente = getInput( "Inserire richiesta prodotti" );

richiesta_prev: Cliente( ordine ) -> Vendite( ordine );

conferma_disp: Vendite( ordine ) -> Magazzino( materiale );

disp@Magazzino = controlloDisp( materiale );if ( disp )@Magazzino {

preventivo@Vendite = calcPreventivo( ordine );

invio_prev: Vendite( preventivo ) -> Cliente( preventivo );

} else {

prodotto_non_disp: Vendite() -> Cliente()

}

saverio.giallorenzo@gmail.com | DISI at Unibo | Bologna | Meeting on Microservices 2016

Netflix

14

Why not peer to peer choreography?

saverio.giallorenzo@gmail.com | DISI at Unibo | Bologna | Meeting on Microservices 2016

Netflix

We found it was harder to scale with growing business needs and complexities. Some of the issues associated with the approach are:

14

Why not peer to peer choreography?

saverio.giallorenzo@gmail.com | DISI at Unibo | Bologna | Meeting on Microservices 2016

Netflix

We found it was harder to scale with growing business needs and complexities. Some of the issues associated with the approach are:

Process flows are “embedded” within the code of multiple application.

14

Why not peer to peer choreography?

saverio.giallorenzo@gmail.com | DISI at Unibo | Bologna | Meeting on Microservices 2016

Netflix

We found it was harder to scale with growing business needs and complexities. Some of the issues associated with the approach are:

Process flows are “embedded” within the code of multiple application.Often, there is tight coupling and assumptions around input/output, SLAs etc, making it harder to adapt to changing needs.

14

Why not peer to peer choreography?

saverio.giallorenzo@gmail.com | DISI at Unibo | Bologna | Meeting on Microservices 2016

Netflix (cont’d)

15

Why not peer to peer choreography?

We found it was harder to scale with growing business needs and complexities. Some of the issues associated with the approach are:

Process flows are “embedded” within the code of multiple application.Often, there is tight coupling and assumptions around input/output, SLAs etc, making it harder to adapt to changing needs.

saverio.giallorenzo@gmail.com | DISI at Unibo | Bologna | Meeting on Microservices 2016

Netflix (cont’d)

15

Why not peer to peer choreography? Vero se si lascia il dominio delle

coreografie. Facendo un parallelo, sarebbe come scrivere in C e cercare di modificare il codice assembly compilato.

We found it was harder to scale with growing business needs and complexities. Some of the issues associated with the approach are:

Process flows are “embedded” within the code of multiple application.Often, there is tight coupling and assumptions around input/output, SLAs etc, making it harder to adapt to changing needs.

saverio.giallorenzo@gmail.com | DISI at Unibo | Bologna | Meeting on Microservices 2016

Netflix (cont’d)

15

Why not peer to peer choreography? Vero se si lascia il dominio delle

coreografie. Facendo un parallelo, sarebbe come scrivere in C e cercare di modificare il codice assembly compilato.

Vero il contrario. Le coreografie aiutano a rendere chiare le funzioni (I/Os).

We found it was harder to scale with growing business needs and complexities. Some of the issues associated with the approach are:

Process flows are “embedded” within the code of multiple application.Often, there is tight coupling and assumptions around input/output, SLAs etc, making it harder to adapt to changing needs.

saverio.giallorenzo@gmail.com | DISI at Unibo | Bologna | Meeting on Microservices 2016

Netflix (cont’d)

15

Why not peer to peer choreography? Vero se si lascia il dominio delle

coreografie. Facendo un parallelo, sarebbe come scrivere in C e cercare di modificare il codice assembly compilato.

Vero il contrario. Le coreografie aiutano a rendere chiare le funzioni (I/Os). Le coreografie scritte in AIOCJ si possono adattare a runtime!

We found it was harder to scale with growing business needs and complexities. Some of the issues associated with the approach are:

Process flows are “embedded” within the code of multiple application.Often, there is tight coupling and assumptions around input/output, SLAs etc, making it harder to adapt to changing needs.

saverio.giallorenzo@gmail.com | DISI at Unibo | Bologna | Meeting on Microservices 2016

Netflix (cont’d)

15

Why not peer to peer choreography? Vero se si lascia il dominio delle

coreografie. Facendo un parallelo, sarebbe come scrivere in C e cercare di modificare il codice assembly compilato.

Vero il contrario. Le coreografie aiutano a rendere chiare le funzioni (I/Os). Le coreografie scritte in AIOCJ si possono adattare a runtime!

We found it was harder to scale with growing business needs and complexities. Some of the issues associated with the approach are:

Process flows are “embedded” within the code of multiple application.Often, there is tight coupling and assumptions around input/output, SLAs etc, making it harder to adapt to changing needs.

saverio.giallorenzo@gmail.com | DISI at Unibo | Bologna | Meeting on Microservices 2016

Visione Architetturale (Part II)

16

Vendite Magazzino Spedizioni

WebServer

CRM

GestoreOrdini

GestioneMateriale

GestioneOrdini

GestioneSpedizioni

TrackingSpedizioni

Client Vendite SpedizioniMagazzinoCliente

saverio.giallorenzo@gmail.com | DISI at Unibo | Bologna | Meeting on Microservices 2016 17

Vendite Magazzino Spedizioni

WebServer

CRM

GestoreOrdini

GestioneMateriale

GestioneOrdini

GestioneSpedizioni

TrackingSpedizioni

Cliente Vendite SpedizioniMagazzino

WebServerWeb

Server

GestoreOrdiniGestoreOrdini

Load Balancer

Circuit Breaker

WebGateway

Visione Architetturale (Part III)

saverio.giallorenzo@gmail.com | DISI at Unibo | Bologna | Meeting on Microservices 2016 18

There is no effort without error and

shortcoming.

innovation

“Citizenship in a Republic”, Theodore Roosevelt, 1910

I Limiti di Oggi

saverio.giallorenzo@gmail.com | DISI at Unibo | Bologna | Meeting on Microservices 2016 18

There is no effort without error and

shortcoming.

innovation

“Citizenship in a Republic”, Theodore Roosevelt, 1910

saverio.giallorenzo@gmail.com | DISI at Unibo | Bologna | Meeting on Microservices 2016 18

There is no effort without error and

shortcoming.

innovation

“Citizenship in a Republic”, Theodore Roosevelt, 1910

Lo Standard diDomani

saverio.giallorenzo@gmail.com | DISI at Unibo | Bologna | Meeting on Microservices 2016 18

There is no effort without error and

shortcoming.

innovation

“Citizenship in a Republic”, Theodore Roosevelt, 1910

Lo Standard diDomani

saverio.giallorenzo@gmail.com | DISI at Unibo | Bologna | Meeting on Microservices 2016

La programmazione distribuita è (più) semplice;

18

There is no effort without error and

shortcoming.

innovation

“Citizenship in a Republic”, Theodore Roosevelt, 1910

Lo Standard diDomani

saverio.giallorenzo@gmail.com | DISI at Unibo | Bologna | Meeting on Microservices 2016

La programmazione distribuita è (più) semplice;

Responsabilità e APIs formali;

18

There is no effort without error and

shortcoming.

innovation

“Citizenship in a Republic”, Theodore Roosevelt, 1910

Lo Standard diDomani

saverio.giallorenzo@gmail.com | DISI at Unibo | Bologna | Meeting on Microservices 2016

La programmazione distribuita è (più) semplice;

Responsabilità e APIs formali;

Architetture scalabili e affidabili.

18

There is no effort without error and

shortcoming.

innovation

“Citizenship in a Republic”, Theodore Roosevelt, 1910

Lo Standard diDomani

saverio.giallorenzo@gmail.com | DISI at Unibo | Bologna | Meeting on Microservices 2016

Grazie dell’Attenzione

19

Domande: Saverio( ? ) -> MoM2016( ! )