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