Upload
italianasoftware
View
319
Download
1
Embed Size (px)
Citation preview
[email protected] | DISI at Unibo | Bologna | Meeting on Microservices 2016
Microservizi scenari del prossimo e del lontano futuro
1
Saverio Giallorenzo
[email protected] | 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;
[email protected] | DISI at Unibo | Bologna | Meeting on Microservices 2016
Microservizi scenari del prossimo e del lontano futuro
3
Saverio Giallorenzo
WARNINGMAY CONTAIN
CHOREOGRAPHIES
[email protected] | 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
[email protected] | 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
[email protected] | 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
[email protected] | 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
[email protected] | 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
[email protected] | 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
[email protected] | 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
[email protected] | DISI at Unibo | Bologna | Meeting on Microservices 2016
“Non è un mio problema”6
Direzione
Vendite
MagazzinoSpedizioni
[email protected] | DISI at Unibo | Bologna | Meeting on Microservices 2016
“Non è un mio problema”6
Direzione
Vendite
MagazzinoSpedizioni
Big Picture
[email protected] | DISI at Unibo | Bologna | Meeting on Microservices 2016
“Non è un mio problema”6
Direzione
Vendite
MagazzinoSpedizioni
Big Picture
Golfo dell’ esecuzione
[email protected] | DISI at Unibo | Bologna | Meeting on Microservices 2016
“Non è un mio problema”6
Direzione
Vendite
MagazzinoSpedizioni
Big Picture
Micro-gestione
Golfo dell’ esecuzione
[email protected] | 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à?
[email protected] | 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à?
[email protected] | 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à?
[email protected] | 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
?
[email protected] | 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
?
=
[email protected] | 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”=
[email protected] | 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”=
[email protected] | 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”=
[email protected] | DISI at Unibo | Bologna | Meeting on Microservices 2016
Uno sguardo al futuro Programmazione Coreografica
8
[email protected] | 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 )
[email protected] | 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 )
[email protected] | 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 )
[email protected] | 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 )
[email protected] | 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 )
[email protected] | 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
[email protected] | 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
[email protected] | 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
[email protected] | 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
[email protected] | DISI at Unibo | Bologna | Meeting on Microservices 2016
Visione Architetturale
12
Vendite Magazzino Spedizioni
WebServer
CRM
GestoreOrdini
GestioneMateriale
GestioneOrdini
GestioneSpedizioni
TrackingSpedizioni
Client Vendite SpedizioniMagazzinoCliente
[email protected] | 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
[email protected] | 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()
}
[email protected] | 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()
}
[email protected] | 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()
}
[email protected] | DISI at Unibo | Bologna | Meeting on Microservices 2016
Netflix
14
Why not peer to peer choreography?
[email protected] | 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?
[email protected] | 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?
[email protected] | 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?
[email protected] | 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.
[email protected] | 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.
[email protected] | 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.
[email protected] | 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.
[email protected] | 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.
[email protected] | 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
[email protected] | 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)
[email protected] | 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
[email protected] | 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
[email protected] | 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
[email protected] | 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
[email protected] | 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
[email protected] | 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
[email protected] | 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
[email protected] | DISI at Unibo | Bologna | Meeting on Microservices 2016
Grazie dell’Attenzione
19
Domande: Saverio( ? ) -> MoM2016( ! )