SlideShare une entreprise Scribd logo
1  sur  44
Implementare flussi di integrazione usando microservizi
Dipartimento IT Monrif S.p.A
balint.maschio@monrif.net
Agenda
• I microservizi servono veramente ?
• Come possiamo definire un microservizio?
• Perché Jolie come linguaggio per i microservizi?
• Selezione dei microservizi come paradigma per l’integrazione
• Sviluppo di una visione a microservizi all interno di un dipartimento
IT
• Progetti sviluppati ed esempi di utilizzo di alcune caratteristiche di
Jolie
• Partecipare ad una community open project ha dei vantaggi?
• Domande
Mi presento
• Background in Fisica
• Lavoro presso Monrif S.p.A dal 2015.
• In precedenza ho lavorato per un azienda di consulenza
occupandomi di System Integration
• Mi occupo principalmente di System Integration
• Contribuisco allo sviluppo del progetto open source Jolie
Utilità dei microservizi
• I microservizi sono solo una moda o servono veramente?
• Aziende come Uber Netflix Amazon hanno dichiarato di usarli
• Allora i microservizi sono una cosa complicata che solo grandi
aziende possono usare?
• I microservizi sono legati solo ad aziende che operano nel web?
Cose è un (micro)servizio?
• Durante la conferenza “Microservices 2017” ad Odense
(Danimarca) si è cercato di dare una definizione formale di cosa
costituisca un microservizio.
• Tante idee sono presenti tra gli operatori del settore ed una singola
definizione non è ancora stata data
• Uno possibile metrologia è quella di analizzare le caratteristiche
possedute da un microservizio.
(Micro)servizio attraverso le sue caratteristiche
Scalabile
Disaccoppiato
Agnostico alla
tecnologia
Deploy
indipendente
Modulare
Moltiplicazione di
funzionalità
Leva sui processi
Ed in Monrif come abbiamo declinato queste
caratteristiche ?
• Moltiplicazione delle funzionalità
• Attraverso microservizi domain bounded abbiamo esposto
funzionalità che prima erano legate ad uno specifico applicativo
• Attraverso l’orchestrazione di microservizi siamo in grado di
creare nuove funzionalità
• Leva sui processi
• Attraverso processi più flessibili e tracciabili siamo in grado di
fornire maggiore valore all’azienda
• Processi più efficienti aumentano il valore percepito dell’IT al
interno dell’organizzazione
Jolie come linguaggio per i microservizi
• E’ vero che il paradigma a microservizi è agnostico al linguaggio
ma…
• Se doveste programmare ad oggetti usereste Assembler o
Java?
• Jolie è stato pensato come linguaggio per microservizi avendo:
• Una solida base teorica ( sviluppata all’Università di Bologna)
• Una sintassi coerente con il paradigma.
• Delle primitive fortemente orientate alla composizione di servizi
• Delle primitive di composizione architetturale
Jolie usato in un ambiente industriale
• L’introduzione di Jolie in Monrif ha permesso di :
• Cominciare la razionalizzazione dei processi di integrazione
• Cominciare ad esporre parte dei processi e dei dati
aziendali a terze parti
• Costruire una serie di punti di accesso comuni ai dati
aziendali riutilizzabili da diversi processi.
Il problema: un sistema eterogeneo cresciuto nel tempo
ERP
DMS
e-com
e-banking
CMS
HR
SW
Sales Management
software
Media
collaboration
Management
Logistic and
distribution
software
Production
and production
line software
Il sistema prima dell’introduzione dei microservizi
ERP
DMS
e-com
e-banking
CMS
HR
SW
Sales Management
software
Media
collaboration
Management
Logistic and
distribution
software
Production
and production
line software
CSV
PDF+
TXT
CSV
CSV
CSV
CSV
Il sistema prima dell’introduzione dei microservizi
• La maggiore parte dei processi di scambio dati tra i diversi
software veniva eseguito in maniera asincrona con l’utilizzo di
batch job
• I batch job sono difficili da monitorare e possono richiedere una
considerevole quantità di tempo per completare la loro attività
• Spesso si basano su connessioni 1 a 1 tra i due software coinvolti
• Tale configurazione porta alla proliferazione di sviluppi
personalizzati ogni qualvolta ci sia la necessità di realizzare un
nuovo scambio di dati.
• Questo rende più oneroso il lavoro di un dipartimento IT.
E se usassimo dei microservizi per scambiarci dei dati?
CC
O
A
p
p
1
A
p
p
3
A
p
p
2
O
C
SOAP
I microservizi visti dall’interno di una azienda che non sia una software
house
• Considerando che il team IT per formazione non è un team di
sviluppo software, i microservizi vengono visti come
• Gestibili da un team con limitate risorse di tempo
• Utilizzabili in progetti amministrati a step incrementali dividendo
domini operativi in processi ben definiti.
• Step implementativi piccoli che possono essere gestiti da piccoli
team
• Il deployment di piccoli step implementativi permette una più
agevole spegnimento delle soluzioni 1 a 1
• Progetti gestiti in questa maniera possono fallire senza avere
grossi impatti finanziari o organizzativi all’interno dell’azienda
Che tipi di microservizi usiamo in Monrif
• Connettori e microservizi di dati: quei microservizi che agiscono sulle
basi di dati o su software nativi attraverso connettori specifici.
• Orchestratori: quei microservizi che utilizzano le operazioni esposte
da altri microservizi o servizi terzi per implementare specifici flussi
aziendali
• Event Handler: quei microservizi che sono in grado di rispondere ad
uno specifico messaggio o trigger esterno.
• Sincronizzatori: quei microservizi che eseguono task periodicamente
Gestione dei documenti aziendali
S
A
P
D
M
S
RFC
HTTP
RFC Server
RFC
H
H
C
O
ArchiveLink
RFC Client
D
C
Mapper
Workflow
DNS Connector
H
API JSON
O
HR
SW
Leonardo
SODEP
SOAP
DB
CONNECTION
D
XML Service
H
API JSON
SODEP
Alcune caratteristiche di Jolie utilizzate in questo progetto
• Agnostico al protocollo
• Importazione del documento WSDL in maniera automatica
• Switch da chiamate sincrone ( RequestResponse ) a processi
asincroni attraverso la continuation
Agnostico al protocollo
inputPort myPort{
.location: ‘’socket:localhost:8000’’
.interface: myInterface
.protocol: http
}
execution{ concurrent }
main{
[myOperation (req)(res){
res.node1 = res.node2
}]
}
Cambio
protocollo
inputPort myPort{
.location: ‘’socket:localhost:8000’’
.interface: myInterface
.protocol: sodep
}
execution{ concurrent }
main{
[myOperation (req)(res){
res.node1 = res.node2
}]
}
Agnostico al protocollo
• Non è necessario scrivere una singola riga di codice per decodificare il
messaggio dal protocollo alla variabile Jolie e viceversa
• Questo è importate perché il programmatore non deve sapere niente del
mio protocollo ma può concertarsi solo sul contenuto informativo del
messaggio
• Non dovendo gestire la traduzione del messaggio posso anche fare
servizi PassThrough che fanno protocol transformation
• Se devo cambiare il protocollo o aggiungere una porta per un altro client
non devo modificare niente nel mio codice
Importazione del WSDL
• Trasformo il mio WSDL in una file di interfaccia Jolie usando wsdl2jolie
• E poi lavoro con strutture ad alberi all’interno del mio codice Jolie trattando il
tipo WSDL come qualsiasi altro tipo di variabile in Jolie
• Questo legame tra gli elementi del WSDL con quelli di Jolie permette al
programmatore di pensare veramente a (micro)servizi concentrandosi
sul messaggio e non dovendo passare per trasformazioni
Messaggio Servizio Oggetto Servizio Messaggio
Operazioni Request Response lente
O
Leonardo
D
C
HTML
Form
HTTP POST
Carico il file Processo il file
E se il processo è lento
come evito il timeout?
Continuation
main{
[ loadFile (req)(res){
// Della logica
op1@PortaServizioDato(req1)(res1)
//altra logica
op3@PortaServizioConnettore (req3)
(res3)
}]
}
main{
[ loadFile (req)(res){
//scope della RequestResponse
//logica di salvataggio e presa in consegna
}]{
// la porta HTTP ha già risposto qua
// Della logica
op1@PortaServizioDato(req1)(res1)
//altra logica
op3@PortaServizioConnettore (req3) (res3)
}
}
Un po' di dati sull’implementazione
• Gestione completa delle fatture
• Gestione dei documenti di Puchasing Chain
• Gestione dei documenti di logistica
• Più di 20K documenti al mese
• L’introduzione di un nuovo documento impatta su alcuni microservizi e
non sull’intera architettura
• I cambiamenti di interfacce avvengono alla richiesta di una nuova
implementazione di logica o di flusso
Gestione di impianto
S
A
P
RFC
RFC Server
RFC
H
C
O
D
LDAP
Service
Sincronizer
OSODEP
SODEP
C
Leonardo
DB service
D
AccountManager
Alcune caratteristiche di Jolie utilizzate in questo progetto
• Embedding di servizi java (LDAP Service).
• Temporizzazione di processi attraverso un sincronizzatore
Se esiste in Java può esistere in Jolie
public class LdapService extends JavaService {
@RequestResponse
public void checkCredential(Value request)
throws FaultException {
// il tuo codice Java
// Prendi spunto dalle librerie Jolie
}
}
embedding
Interface LdapInterface{
RequestResponse:
checkCredential (reqType) (respType)
}
outputPort Ldap {
Interfaces: LdapInterface
}
embedded {
Java:"joliex.ldap. LdapService " in Ldap
}
Sincronizazione
inputPort InputPortUpdateInterface {
Location: "local"
Protocol: sodep{
.debug = true
}
Interfaces: UpdateInterface
}
init{
timeout=1000;
timeout.operation="UpdateProductionStructure";
setNextTimeout@Time ( timeout )
}
main{
[UpdateProductionStructure(request)(response){
// il tuo codice
timeout=1000;
timeout.operation="UpdateProductionStructure";
setNextTimeout@Time ( timeout )
}
}
Un po' di dati sull’implementazione
• Possibilità di interagire con dati SAP attraverso un’applicazione HTML
JQuery
• Usare un servizio LDAP per autenticare gli utenti
• Gestione delle sezioni e della visibilità dei dati attraverso un servizio
di AccountManagement
• Allineamento dei dati da SAP attraverso un servizio di
sincronizzazione
Marketing API
S
A
P
RFC
C
O
SODEP
Leonardo
D
Sales Management
software
DB connection
C
M
S
API Google MAP
S
D
Logistic and
distribution
software
e-com
Alcune caratteristiche di Jolie utilizzate in questo progetto
• Aggregazione e Service decoration
• Utilizzo API REST attraverso l’uso degli alias
Aggregazione e service decoration
S S
Interfaccia 2
Interfaccia 2
Interfaccia 1
• Vogliamo esporre l’interfaccia2 attraverso un frontend HTTP
• Vogliamo aggiungere un livello di controllo accesso per tutta interfaccia2 senza dover modificare i tipi o
la logica delle operazioni aggregate
Aggregazione e Service decoration
outputPort childServicePort{
Location: "socket://localhost:8001"
Protocol: sodep
Interfaces: Interface2
}
type AuthenticationData: void {
.ApplicationName:string
}
interface extender AuthInterfaceExtender {
RequestResponse: *(AuthenticationData)(undefined) throws ApplicationNotAllowed
}
inputPort InputPortHttp {
Protocol: http
Interfaces: Interface1
Location: "socket://localhost:8000"
Aggregates: childServicePort with AuthInterfaceExtender
}
courier InputPortHttp {
[interface Interface2( request )(response)] {
if (request.ApplicationName == "NameApplicazione" )
{
forward ( request ) (response)
} else{
throw (ApplicationNotAllowed)
}
}
}
Utilizzo API REST attraverso l’uso degli alias
S
• Vogliamo utilizzare API fornite da terze parti come quelle di Google o Auth0
• Così da poter utilizzare funzionalità esterne all’interno dei microservizi Jolie
Utilizzo API REST attraverso l’uso degli alias
outputPort Auth0Port {
Location: "socket://monrifnet-test.eu.auth0.com:443/"
Protocol: https{
.method -> method;
.debug= false;
.debug.showContent =false;
.format ="json";
.contentType ="application/json";
.compression = false;
.osc.token.alias = "oauth/token";
.osc.revoke.alias = "oauth/revoke";
.osc.logout.alias = "v2/logout";
.osc.user.alias = "api/v2/users/%!{idAuth0}";
.headers.www_authenticate = "status";
.addHeader.header[0] = "Authorization";
.addHeader.header[0].value -> AutorizationValue;
.keepAlive=false
}
Interfaces:Auth0Interface
}
Un po' di dati sull’implementazione
• Possibilità di utilizzare i controlli standard SAP attraverso un
connettore specifico
• Possibilità di utilizzare API esterne all’interno di un flusso progettato in
Jolie
• Possibilità di esporre API all’esterno in maniera rapida ed efficiente
Penso a servizi parlo a servizi programmo a servizi
Mi servirebbe che …
Funzionalità 1
Funzionalità 2
Parlo con il mio reparto IT
Guardo al mio pool di servizi e:
• Creo un nuovo servizio
nativo
• Orchestro
• Aggrego
• Espando
Microservizio come leva per i miei processi
OOP
Processi
MSP
Processi
Non solo programmazione ma anche gestione
• Jolie come linguaggio a microservizi non ha bisogno di un sistema di
deployment ed un microservizio Jolie esiste quando è messo in
esecuzione ma….
• In un ambiente industriale è fondamentale avere delle procedure per
gestire controllare e monitorare il software
• Grazie al nostro partner tecnologico abbiamo messo in piedi una
infrastruttura software di controllo e monitoraggio dei microservizi
Jolie evitando il deployment classico
• Questo ha aumentato ulteriormente in valore della soluzione
migliorando il processo di individuazione degli errori e dei
malfunzionamenti
Jolie in Monrif fino adesso
• Più di 40 microservizi presenti in produzione
• Più di 2 milioni di messaggi scambiati tra i microservizi mensilmente
• Progetti attivi e in continuazione evoluzione
• Progetto Documentale
• Progetto HR
• Progetto Marketing
• Progetto gestione centralizzata dei Clienti
Innovazione: il vero valore della mia istruzione
Core
Values
Ma una volta uscito dall’università come innovo??
• Mantieni i legami con i tuoi colleghi
• Mantieni i legami con l’università ( non è solo un posto dove hai passato 5 anni della tua vita)
• Sii generoso con la tua conoscenza
• Registrativi a delle mailing list che parlano degli argomenti che vi interessano
• Unisciti ad un open project come Jolie
• Un open project ti da la possibilità di
• Tenerti aggiornato sui trend tecnologi della comunità di sviluppatori e dell’industria
• Ti permette di influenzare e non solo utilizzare la tecnologia
• Allarga la tua prospettiva professionale ad una comunità internazionale
La rete della collaborazione
Sviluppo
il
linguaggio
Documento
il
linguaggio
Test
sul
linguaggio
Sviluppo
Tools
Seguo
il
linguaggio
Diffondo
il
linguaggio
Sono interessato ed ora?
Se voglio fare parte di una comunità sui microservizi che unisca l'accademia con l’industria
https://groups.google.com/forum/#!forum/microservices-community.
Se voglio seguire o contribuire alla community di Jolie
Mailing list : jolie-devel@googlegroups.com
Sito Ufficiale: http://www.jolie-lang.org/
GitHub: https://github.com/jolie/jolie
Domande ora o più avanti
Mantieni i legami con i tuoi colleghi
Mantieni i legami con l’università
Sii generoso con la tua conoscenza
Il Mantra della collaborazione
Quindi mi trovate a
email: balint.maschio@monrif.net
Linkedin : https://www.linkedin.com/in/balint-maschio-b37475132/

Contenu connexe

Similaire à Presentazione Unibo

Cloud e innovazione
Cloud e innovazioneCloud e innovazione
Cloud e innovazioneXPeppers
 
Rendere flessibili e trasformare architetture IT di vecchio tipo: passaggio d...
Rendere flessibili e trasformare architetture IT di vecchio tipo:passaggio d...Rendere flessibili e trasformare architetture IT di vecchio tipo:passaggio d...
Rendere flessibili e trasformare architetture IT di vecchio tipo: passaggio d...Emanuele Della Valle
 
MySQL Day Milano 2018 - Le architetture a microservizi
MySQL Day Milano 2018 - Le architetture a microserviziMySQL Day Milano 2018 - Le architetture a microservizi
MySQL Day Milano 2018 - Le architetture a microserviziPar-Tec S.p.A.
 
Dalla virtualizzazione al private cloud: Il Patronato INCA rinnova la fiducia...
Dalla virtualizzazione al private cloud: Il Patronato INCA rinnova la fiducia...Dalla virtualizzazione al private cloud: Il Patronato INCA rinnova la fiducia...
Dalla virtualizzazione al private cloud: Il Patronato INCA rinnova la fiducia...Babel
 
Il mercato SOA: futuro e prospettive
Il mercato SOA: futuro e prospettiveIl mercato SOA: futuro e prospettive
Il mercato SOA: futuro e prospettiveEmanuele Della Valle
 
MySQL Tech Tour 2015 - Soluzioni di alta disponibilità con MySQL
MySQL Tech Tour 2015 - Soluzioni di alta disponibilità con MySQLMySQL Tech Tour 2015 - Soluzioni di alta disponibilità con MySQL
MySQL Tech Tour 2015 - Soluzioni di alta disponibilità con MySQLPar-Tec S.p.A.
 
Le 7 sfide da affrontare nella migrazione da monolite a miniservizi
Le 7 sfide da affrontare nella migrazione da monolite a miniserviziLe 7 sfide da affrontare nella migrazione da monolite a miniservizi
Le 7 sfide da affrontare nella migrazione da monolite a miniserviziLuca Acquaviva
 
.NET Microservices
.NET Microservices.NET Microservices
.NET MicroservicesLuca Congiu
 
Design Patterns - Enterprise Patterns (part 2)
Design Patterns - Enterprise Patterns (part 2)Design Patterns - Enterprise Patterns (part 2)
Design Patterns - Enterprise Patterns (part 2)Fabio Armani
 
MySQL Day Roma 2019 - Le architetture a microservizi e MySQL
MySQL Day Roma 2019 - Le architetture a microservizi e MySQLMySQL Day Roma 2019 - Le architetture a microservizi e MySQL
MySQL Day Roma 2019 - Le architetture a microservizi e MySQLPar-Tec S.p.A.
 
Design Patterns - enterprise patterns (part I)
Design Patterns - enterprise patterns (part I)Design Patterns - enterprise patterns (part I)
Design Patterns - enterprise patterns (part I)Fabio Armani
 
Un backend per tutte le stagioni con Spring
Un backend per tutte le stagioni con SpringUn backend per tutte le stagioni con Spring
Un backend per tutte le stagioni con SpringMarcello Teodori
 
Software modularity, microservices ed headless platform all in one. Liferay: ...
Software modularity, microservices ed headless platform all in one. Liferay: ...Software modularity, microservices ed headless platform all in one. Liferay: ...
Software modularity, microservices ed headless platform all in one. Liferay: ...Commit University
 
Introduzione al Domain Driven Design (DDD)
Introduzione al Domain Driven Design (DDD)Introduzione al Domain Driven Design (DDD)
Introduzione al Domain Driven Design (DDD)DotNetMarche
 
Designing with microservices - Daniele Mondello
Designing with microservices - Daniele MondelloDesigning with microservices - Daniele Mondello
Designing with microservices - Daniele MondelloDaniele Mondello
 
Win05 accesso ai dati in win 8
Win05   accesso ai dati in win 8Win05   accesso ai dati in win 8
Win05 accesso ai dati in win 8DotNetCampus
 
Azure dayroma java, il lato oscuro del cloud
Azure dayroma   java, il lato oscuro del cloudAzure dayroma   java, il lato oscuro del cloud
Azure dayroma java, il lato oscuro del cloudRiccardo Zamana
 

Similaire à Presentazione Unibo (20)

Webinar: "DevOps e Orchestrazione Bimodale dei Processi IT"
Webinar: "DevOps e Orchestrazione Bimodale dei Processi IT"Webinar: "DevOps e Orchestrazione Bimodale dei Processi IT"
Webinar: "DevOps e Orchestrazione Bimodale dei Processi IT"
 
Cloud e innovazione
Cloud e innovazioneCloud e innovazione
Cloud e innovazione
 
Rendere flessibili e trasformare architetture IT di vecchio tipo: passaggio d...
Rendere flessibili e trasformare architetture IT di vecchio tipo:passaggio d...Rendere flessibili e trasformare architetture IT di vecchio tipo:passaggio d...
Rendere flessibili e trasformare architetture IT di vecchio tipo: passaggio d...
 
MySQL Day Milano 2018 - Le architetture a microservizi
MySQL Day Milano 2018 - Le architetture a microserviziMySQL Day Milano 2018 - Le architetture a microservizi
MySQL Day Milano 2018 - Le architetture a microservizi
 
Dalla virtualizzazione al private cloud: Il Patronato INCA rinnova la fiducia...
Dalla virtualizzazione al private cloud: Il Patronato INCA rinnova la fiducia...Dalla virtualizzazione al private cloud: Il Patronato INCA rinnova la fiducia...
Dalla virtualizzazione al private cloud: Il Patronato INCA rinnova la fiducia...
 
Il mercato SOA: futuro e prospettive
Il mercato SOA: futuro e prospettiveIl mercato SOA: futuro e prospettive
Il mercato SOA: futuro e prospettive
 
MySQL Tech Tour 2015 - Soluzioni di alta disponibilità con MySQL
MySQL Tech Tour 2015 - Soluzioni di alta disponibilità con MySQLMySQL Tech Tour 2015 - Soluzioni di alta disponibilità con MySQL
MySQL Tech Tour 2015 - Soluzioni di alta disponibilità con MySQL
 
Le 7 sfide da affrontare nella migrazione da monolite a miniservizi
Le 7 sfide da affrontare nella migrazione da monolite a miniserviziLe 7 sfide da affrontare nella migrazione da monolite a miniservizi
Le 7 sfide da affrontare nella migrazione da monolite a miniservizi
 
.NET Microservices
.NET Microservices.NET Microservices
.NET Microservices
 
Design Patterns - Enterprise Patterns (part 2)
Design Patterns - Enterprise Patterns (part 2)Design Patterns - Enterprise Patterns (part 2)
Design Patterns - Enterprise Patterns (part 2)
 
MySQL Day Roma 2019 - Le architetture a microservizi e MySQL
MySQL Day Roma 2019 - Le architetture a microservizi e MySQLMySQL Day Roma 2019 - Le architetture a microservizi e MySQL
MySQL Day Roma 2019 - Le architetture a microservizi e MySQL
 
Design Patterns - enterprise patterns (part I)
Design Patterns - enterprise patterns (part I)Design Patterns - enterprise patterns (part I)
Design Patterns - enterprise patterns (part I)
 
Un backend per tutte le stagioni con Spring
Un backend per tutte le stagioni con SpringUn backend per tutte le stagioni con Spring
Un backend per tutte le stagioni con Spring
 
Tesi8
Tesi8Tesi8
Tesi8
 
Software modularity, microservices ed headless platform all in one. Liferay: ...
Software modularity, microservices ed headless platform all in one. Liferay: ...Software modularity, microservices ed headless platform all in one. Liferay: ...
Software modularity, microservices ed headless platform all in one. Liferay: ...
 
Introduzione al Domain Driven Design (DDD)
Introduzione al Domain Driven Design (DDD)Introduzione al Domain Driven Design (DDD)
Introduzione al Domain Driven Design (DDD)
 
Che cosa sono i microservizi?
Che cosa sono i microservizi?Che cosa sono i microservizi?
Che cosa sono i microservizi?
 
Designing with microservices - Daniele Mondello
Designing with microservices - Daniele MondelloDesigning with microservices - Daniele Mondello
Designing with microservices - Daniele Mondello
 
Win05 accesso ai dati in win 8
Win05   accesso ai dati in win 8Win05   accesso ai dati in win 8
Win05 accesso ai dati in win 8
 
Azure dayroma java, il lato oscuro del cloud
Azure dayroma   java, il lato oscuro del cloudAzure dayroma   java, il lato oscuro del cloud
Azure dayroma java, il lato oscuro del cloud
 

Presentazione Unibo

  • 1. Implementare flussi di integrazione usando microservizi Dipartimento IT Monrif S.p.A balint.maschio@monrif.net
  • 2. Agenda • I microservizi servono veramente ? • Come possiamo definire un microservizio? • Perché Jolie come linguaggio per i microservizi? • Selezione dei microservizi come paradigma per l’integrazione • Sviluppo di una visione a microservizi all interno di un dipartimento IT • Progetti sviluppati ed esempi di utilizzo di alcune caratteristiche di Jolie • Partecipare ad una community open project ha dei vantaggi? • Domande
  • 3. Mi presento • Background in Fisica • Lavoro presso Monrif S.p.A dal 2015. • In precedenza ho lavorato per un azienda di consulenza occupandomi di System Integration • Mi occupo principalmente di System Integration • Contribuisco allo sviluppo del progetto open source Jolie
  • 4. Utilità dei microservizi • I microservizi sono solo una moda o servono veramente? • Aziende come Uber Netflix Amazon hanno dichiarato di usarli • Allora i microservizi sono una cosa complicata che solo grandi aziende possono usare? • I microservizi sono legati solo ad aziende che operano nel web?
  • 5. Cose è un (micro)servizio? • Durante la conferenza “Microservices 2017” ad Odense (Danimarca) si è cercato di dare una definizione formale di cosa costituisca un microservizio. • Tante idee sono presenti tra gli operatori del settore ed una singola definizione non è ancora stata data • Uno possibile metrologia è quella di analizzare le caratteristiche possedute da un microservizio.
  • 6. (Micro)servizio attraverso le sue caratteristiche Scalabile Disaccoppiato Agnostico alla tecnologia Deploy indipendente Modulare Moltiplicazione di funzionalità Leva sui processi
  • 7. Ed in Monrif come abbiamo declinato queste caratteristiche ? • Moltiplicazione delle funzionalità • Attraverso microservizi domain bounded abbiamo esposto funzionalità che prima erano legate ad uno specifico applicativo • Attraverso l’orchestrazione di microservizi siamo in grado di creare nuove funzionalità • Leva sui processi • Attraverso processi più flessibili e tracciabili siamo in grado di fornire maggiore valore all’azienda • Processi più efficienti aumentano il valore percepito dell’IT al interno dell’organizzazione
  • 8. Jolie come linguaggio per i microservizi • E’ vero che il paradigma a microservizi è agnostico al linguaggio ma… • Se doveste programmare ad oggetti usereste Assembler o Java? • Jolie è stato pensato come linguaggio per microservizi avendo: • Una solida base teorica ( sviluppata all’Università di Bologna) • Una sintassi coerente con il paradigma. • Delle primitive fortemente orientate alla composizione di servizi • Delle primitive di composizione architetturale
  • 9. Jolie usato in un ambiente industriale • L’introduzione di Jolie in Monrif ha permesso di : • Cominciare la razionalizzazione dei processi di integrazione • Cominciare ad esporre parte dei processi e dei dati aziendali a terze parti • Costruire una serie di punti di accesso comuni ai dati aziendali riutilizzabili da diversi processi.
  • 10. Il problema: un sistema eterogeneo cresciuto nel tempo ERP DMS e-com e-banking CMS HR SW Sales Management software Media collaboration Management Logistic and distribution software Production and production line software
  • 11. Il sistema prima dell’introduzione dei microservizi ERP DMS e-com e-banking CMS HR SW Sales Management software Media collaboration Management Logistic and distribution software Production and production line software CSV PDF+ TXT CSV CSV CSV CSV
  • 12. Il sistema prima dell’introduzione dei microservizi • La maggiore parte dei processi di scambio dati tra i diversi software veniva eseguito in maniera asincrona con l’utilizzo di batch job • I batch job sono difficili da monitorare e possono richiedere una considerevole quantità di tempo per completare la loro attività • Spesso si basano su connessioni 1 a 1 tra i due software coinvolti • Tale configurazione porta alla proliferazione di sviluppi personalizzati ogni qualvolta ci sia la necessità di realizzare un nuovo scambio di dati. • Questo rende più oneroso il lavoro di un dipartimento IT.
  • 13. E se usassimo dei microservizi per scambiarci dei dati? CC O A p p 1 A p p 3 A p p 2 O C SOAP
  • 14. I microservizi visti dall’interno di una azienda che non sia una software house • Considerando che il team IT per formazione non è un team di sviluppo software, i microservizi vengono visti come • Gestibili da un team con limitate risorse di tempo • Utilizzabili in progetti amministrati a step incrementali dividendo domini operativi in processi ben definiti. • Step implementativi piccoli che possono essere gestiti da piccoli team • Il deployment di piccoli step implementativi permette una più agevole spegnimento delle soluzioni 1 a 1 • Progetti gestiti in questa maniera possono fallire senza avere grossi impatti finanziari o organizzativi all’interno dell’azienda
  • 15. Che tipi di microservizi usiamo in Monrif • Connettori e microservizi di dati: quei microservizi che agiscono sulle basi di dati o su software nativi attraverso connettori specifici. • Orchestratori: quei microservizi che utilizzano le operazioni esposte da altri microservizi o servizi terzi per implementare specifici flussi aziendali • Event Handler: quei microservizi che sono in grado di rispondere ad uno specifico messaggio o trigger esterno. • Sincronizzatori: quei microservizi che eseguono task periodicamente
  • 16. Gestione dei documenti aziendali S A P D M S RFC HTTP RFC Server RFC H H C O ArchiveLink RFC Client D C Mapper Workflow DNS Connector H API JSON O HR SW Leonardo SODEP SOAP DB CONNECTION D XML Service H API JSON SODEP
  • 17. Alcune caratteristiche di Jolie utilizzate in questo progetto • Agnostico al protocollo • Importazione del documento WSDL in maniera automatica • Switch da chiamate sincrone ( RequestResponse ) a processi asincroni attraverso la continuation
  • 18. Agnostico al protocollo inputPort myPort{ .location: ‘’socket:localhost:8000’’ .interface: myInterface .protocol: http } execution{ concurrent } main{ [myOperation (req)(res){ res.node1 = res.node2 }] } Cambio protocollo inputPort myPort{ .location: ‘’socket:localhost:8000’’ .interface: myInterface .protocol: sodep } execution{ concurrent } main{ [myOperation (req)(res){ res.node1 = res.node2 }] }
  • 19. Agnostico al protocollo • Non è necessario scrivere una singola riga di codice per decodificare il messaggio dal protocollo alla variabile Jolie e viceversa • Questo è importate perché il programmatore non deve sapere niente del mio protocollo ma può concertarsi solo sul contenuto informativo del messaggio • Non dovendo gestire la traduzione del messaggio posso anche fare servizi PassThrough che fanno protocol transformation • Se devo cambiare il protocollo o aggiungere una porta per un altro client non devo modificare niente nel mio codice
  • 20. Importazione del WSDL • Trasformo il mio WSDL in una file di interfaccia Jolie usando wsdl2jolie • E poi lavoro con strutture ad alberi all’interno del mio codice Jolie trattando il tipo WSDL come qualsiasi altro tipo di variabile in Jolie • Questo legame tra gli elementi del WSDL con quelli di Jolie permette al programmatore di pensare veramente a (micro)servizi concentrandosi sul messaggio e non dovendo passare per trasformazioni Messaggio Servizio Oggetto Servizio Messaggio
  • 21. Operazioni Request Response lente O Leonardo D C HTML Form HTTP POST Carico il file Processo il file E se il processo è lento come evito il timeout?
  • 22. Continuation main{ [ loadFile (req)(res){ // Della logica op1@PortaServizioDato(req1)(res1) //altra logica op3@PortaServizioConnettore (req3) (res3) }] } main{ [ loadFile (req)(res){ //scope della RequestResponse //logica di salvataggio e presa in consegna }]{ // la porta HTTP ha già risposto qua // Della logica op1@PortaServizioDato(req1)(res1) //altra logica op3@PortaServizioConnettore (req3) (res3) } }
  • 23. Un po' di dati sull’implementazione • Gestione completa delle fatture • Gestione dei documenti di Puchasing Chain • Gestione dei documenti di logistica • Più di 20K documenti al mese • L’introduzione di un nuovo documento impatta su alcuni microservizi e non sull’intera architettura • I cambiamenti di interfacce avvengono alla richiesta di una nuova implementazione di logica o di flusso
  • 24. Gestione di impianto S A P RFC RFC Server RFC H C O D LDAP Service Sincronizer OSODEP SODEP C Leonardo DB service D AccountManager
  • 25. Alcune caratteristiche di Jolie utilizzate in questo progetto • Embedding di servizi java (LDAP Service). • Temporizzazione di processi attraverso un sincronizzatore
  • 26. Se esiste in Java può esistere in Jolie public class LdapService extends JavaService { @RequestResponse public void checkCredential(Value request) throws FaultException { // il tuo codice Java // Prendi spunto dalle librerie Jolie } } embedding Interface LdapInterface{ RequestResponse: checkCredential (reqType) (respType) } outputPort Ldap { Interfaces: LdapInterface } embedded { Java:"joliex.ldap. LdapService " in Ldap }
  • 27. Sincronizazione inputPort InputPortUpdateInterface { Location: "local" Protocol: sodep{ .debug = true } Interfaces: UpdateInterface } init{ timeout=1000; timeout.operation="UpdateProductionStructure"; setNextTimeout@Time ( timeout ) } main{ [UpdateProductionStructure(request)(response){ // il tuo codice timeout=1000; timeout.operation="UpdateProductionStructure"; setNextTimeout@Time ( timeout ) } }
  • 28. Un po' di dati sull’implementazione • Possibilità di interagire con dati SAP attraverso un’applicazione HTML JQuery • Usare un servizio LDAP per autenticare gli utenti • Gestione delle sezioni e della visibilità dei dati attraverso un servizio di AccountManagement • Allineamento dei dati da SAP attraverso un servizio di sincronizzazione
  • 29. Marketing API S A P RFC C O SODEP Leonardo D Sales Management software DB connection C M S API Google MAP S D Logistic and distribution software e-com
  • 30. Alcune caratteristiche di Jolie utilizzate in questo progetto • Aggregazione e Service decoration • Utilizzo API REST attraverso l’uso degli alias
  • 31. Aggregazione e service decoration S S Interfaccia 2 Interfaccia 2 Interfaccia 1 • Vogliamo esporre l’interfaccia2 attraverso un frontend HTTP • Vogliamo aggiungere un livello di controllo accesso per tutta interfaccia2 senza dover modificare i tipi o la logica delle operazioni aggregate
  • 32. Aggregazione e Service decoration outputPort childServicePort{ Location: "socket://localhost:8001" Protocol: sodep Interfaces: Interface2 } type AuthenticationData: void { .ApplicationName:string } interface extender AuthInterfaceExtender { RequestResponse: *(AuthenticationData)(undefined) throws ApplicationNotAllowed } inputPort InputPortHttp { Protocol: http Interfaces: Interface1 Location: "socket://localhost:8000" Aggregates: childServicePort with AuthInterfaceExtender } courier InputPortHttp { [interface Interface2( request )(response)] { if (request.ApplicationName == "NameApplicazione" ) { forward ( request ) (response) } else{ throw (ApplicationNotAllowed) } } }
  • 33. Utilizzo API REST attraverso l’uso degli alias S • Vogliamo utilizzare API fornite da terze parti come quelle di Google o Auth0 • Così da poter utilizzare funzionalità esterne all’interno dei microservizi Jolie
  • 34. Utilizzo API REST attraverso l’uso degli alias outputPort Auth0Port { Location: "socket://monrifnet-test.eu.auth0.com:443/" Protocol: https{ .method -> method; .debug= false; .debug.showContent =false; .format ="json"; .contentType ="application/json"; .compression = false; .osc.token.alias = "oauth/token"; .osc.revoke.alias = "oauth/revoke"; .osc.logout.alias = "v2/logout"; .osc.user.alias = "api/v2/users/%!{idAuth0}"; .headers.www_authenticate = "status"; .addHeader.header[0] = "Authorization"; .addHeader.header[0].value -> AutorizationValue; .keepAlive=false } Interfaces:Auth0Interface }
  • 35. Un po' di dati sull’implementazione • Possibilità di utilizzare i controlli standard SAP attraverso un connettore specifico • Possibilità di utilizzare API esterne all’interno di un flusso progettato in Jolie • Possibilità di esporre API all’esterno in maniera rapida ed efficiente
  • 36. Penso a servizi parlo a servizi programmo a servizi Mi servirebbe che … Funzionalità 1 Funzionalità 2 Parlo con il mio reparto IT Guardo al mio pool di servizi e: • Creo un nuovo servizio nativo • Orchestro • Aggrego • Espando
  • 37. Microservizio come leva per i miei processi OOP Processi MSP Processi
  • 38. Non solo programmazione ma anche gestione • Jolie come linguaggio a microservizi non ha bisogno di un sistema di deployment ed un microservizio Jolie esiste quando è messo in esecuzione ma…. • In un ambiente industriale è fondamentale avere delle procedure per gestire controllare e monitorare il software • Grazie al nostro partner tecnologico abbiamo messo in piedi una infrastruttura software di controllo e monitoraggio dei microservizi Jolie evitando il deployment classico • Questo ha aumentato ulteriormente in valore della soluzione migliorando il processo di individuazione degli errori e dei malfunzionamenti
  • 39. Jolie in Monrif fino adesso • Più di 40 microservizi presenti in produzione • Più di 2 milioni di messaggi scambiati tra i microservizi mensilmente • Progetti attivi e in continuazione evoluzione • Progetto Documentale • Progetto HR • Progetto Marketing • Progetto gestione centralizzata dei Clienti
  • 40. Innovazione: il vero valore della mia istruzione Core Values
  • 41. Ma una volta uscito dall’università come innovo?? • Mantieni i legami con i tuoi colleghi • Mantieni i legami con l’università ( non è solo un posto dove hai passato 5 anni della tua vita) • Sii generoso con la tua conoscenza • Registrativi a delle mailing list che parlano degli argomenti che vi interessano • Unisciti ad un open project come Jolie • Un open project ti da la possibilità di • Tenerti aggiornato sui trend tecnologi della comunità di sviluppatori e dell’industria • Ti permette di influenzare e non solo utilizzare la tecnologia • Allarga la tua prospettiva professionale ad una comunità internazionale
  • 42. La rete della collaborazione Sviluppo il linguaggio Documento il linguaggio Test sul linguaggio Sviluppo Tools Seguo il linguaggio Diffondo il linguaggio
  • 43. Sono interessato ed ora? Se voglio fare parte di una comunità sui microservizi che unisca l'accademia con l’industria https://groups.google.com/forum/#!forum/microservices-community. Se voglio seguire o contribuire alla community di Jolie Mailing list : jolie-devel@googlegroups.com Sito Ufficiale: http://www.jolie-lang.org/ GitHub: https://github.com/jolie/jolie
  • 44. Domande ora o più avanti Mantieni i legami con i tuoi colleghi Mantieni i legami con l’università Sii generoso con la tua conoscenza Il Mantra della collaborazione Quindi mi trovate a email: balint.maschio@monrif.net Linkedin : https://www.linkedin.com/in/balint-maschio-b37475132/