Upload
ugo-landini
View
61
Download
0
Embed Size (px)
Citation preview
Ugo LandiniSenior Solution Architect
Red Hat JBoss Fuse: la nuova era dell'integrazione a microservizi
Cos’é l’integrazione?Cos’é il Middleware?Demistifichiamo le BuzzwordIntegrazione: i casi d’usoMiddleware Red Hat per l’integrazioneRed Hat JBoss FuseEnterprise Integration PatternsRuntimeProcesso di SviluppoTooling
AGENDA
Quali sono i problemi?
● Qualche volta si tratta di trasformazione di dati/protocollo➔ Questo… é un micro problema d'integrazione
“Ho bisogno di questa informazione in questo formato specifico attraverso questo protocollo!”
… altre volte si ha un MACRO-problema:
● Qui il focus é sull'interconnessione di diverse sorgenti e destinazioni in maniera efficiente ● anche questo... é un problema d'integrazione.
“Voglio connettere nuove applicazioni e nuove features!”
Integrazione
● L'integrazione può variare da molto semplice a molto complessa
● L’integrazione riduce la complessità totale
“Problema” “Soluzione”
Cos’é il Middleware?
● É un software organizzato in frameworks e blocchi riusabili progettato per risolvere problemi comuni. Standardizza ed accelera lo sviluppo.
Hardware Store
The client
“Digital Transformation”
Contesto:● Le aziende devono modernizzarsi per adattarsi al
cambiamento.● Molti sistemi sono impattati, l'integrazione é una chiave
importante: it delivers innovation.
Cosa significa:● Una opportunità di evolversi e di innovare● Una possibilitá di ri-architettare usando i migliori tool ed i
migliori pattern● Preparare la piattaforma del futuro.
“Micro-Services”
Contesto:● Si parte sempre con un piccolo numero di servizi● Finché non si arriva ad avere un’unico monolite
di servizi strettamente interconnessi● Lo sviluppo, il test, l’hosting e la gestione
diventano un incubo
Cosa significa:● Non é un concetto nuovo.● “Divide et Impera” nel mondo dei servizi.● Obiettivo ideale: unità indipendenti con small
footprint
“API Management”
Contesto:● Una organizzazione perde il controllo per via dell'alto
numero di servizi.● Assenza di un registry centrale con le informazioni sui
servizi● Il Management non ha controllo e visibilitá sulle API.● Aggiungere nuovi clienti diventa complicato.
Cosa significa:● Adozione necessaria quando il numero di servizi aumenta.● Una ‘Best Practice’ architecture per gestire le API.● Felicità ed entusiasmo quando la console di gestione mostra
i KPI
“Internet of Things”
Contesto:● Dispositivi economici che generano una quantità enorme
di dati da gestire● Continuo aumento di dispositivi da connettere● Necessità di analizzare il traffico di dati per prendere
decisioni di business, spesso in real time
Cosa significa:● Use case: migliaia di dispositivi connessi ad 1
gateway.● Alto volume di traffico/messaggi da gestire
Mediation LayerContesto:
● Un’organizzazione cresce e diventa molto complessa, con molti backend a data source diversi.
● i Clienti devono interagire con il sistema.
e.g. Industria Telecomunicazioni:L’azienda comincia ad operare in nuove nazioni, fa delle acquisizioni, deve integrare nuovi sistemi.
File TransferContesto:
● Fle batch sparsi un po’ ovunque nell'organizzazione.
● File che devono essere trasferiti in maniera sicura fra i vari dipartimenti
e.g. Supplier chain:Scambio documenti, Purchase
Orders, etc
(o ‘Data Mapping’)
Data TransformationContesto:
● Sistemi differenti vogliono formati differenti
● Trasformazione dei dati da un formato all’altro
Data Data
e.g. Mobile phones:Trasmissioni “light" per
risparmiare batteria. I dati vanno successivamente
trasformati per invocare le API di backend.
Examples of data formats:● CSV (comma separated values)● XML (e.g. <name>Ugol</name>)● JSON (e.g. “name”: ”Ugol”)● HL7 (standard healthcare)● SWIFT (scambi finanziari)
Intelligent Router Contesto:
● L'organizzazione non ha visibilità/controllo sul traffico che viaggia nella sua rete.
● Uno strato di intelligenza permette di controllare il flusso, per esempio sulla base del contenuto
e.g. Media provider:Ha iniziato fornendo contenuti musicali, ma ha incorporato due nuovi servizi per video e libriIl routing layer integra i tre servizi e permette di avere visibilità e controllo.
Protocol BridgingContesto:
● I servizi sono esposti su protocolli differenti
○ HTTP○ JMS○ REST○ SOAP
● Adattamento ed esposizione di diversi protocolli/versioni
e.g. General EIP Pattern:Durante l’adozione di nuovi
standard e/o tecnologie, Fuse offre la possibilitá di riusare i
servizi legacy”tramite il bridging
Composizione di Servizi
response
A+B
C+D
Contesto:
● Diversi servizi sono già presenti
● Esporre nuovi servizi come combinazione di servizi esistenti
e.g. Travel agency:Offre la prenotazione di voli/treni/macchine/stanze
Combinando i servizi insieme si possono offrire pacchetti “custom", per esempio viaggi di lusso od economici.
Document RepositoryContesto:
● L’azienda genera molti documenti
● Impiegati/utenti devono accedere questi documenti da diverse piattaforme/location
e.g. Healthcare:La storia dei pazienti, le
radiografie, ed in generale i documenti sanitari devono essere visibili da differenti
dipartimenti medici ed ospedali
Business Activity Monitoring EnablementContesto:
● I processi di business vivono in diverse applicazioni/sistemi all'interno dell'azienda
● Un "single pane of glass" per il monitoraggio dei business process
● Enforcement di SLA/KPI
Appllication Application Application
Events Events
Correlation & Processing Dashboards - KPIs & SLAs
Events e.g. Retail:
Gli ordini devono essere tracciati end-to-end
Monitoring degli SLA.
Batch -> Real-TimeContesto:
● Flussi informativi predefiniti (Giornalieri, Orari, Notturni)
● Spesso basati su File/DB● Middleware per
○ Introdurre Event Driven Processing○ Ridurre il Process Time○ Incrementare Responsiveness
2 Day Information Flow
Immediate Information Flow
e.g. E-Commerce:● Aziende che vendono “Servizi” ai clienti● I Clienti sono connessi e pretendono update
immediati○ Stato del pagamento○ Dov’é il mio ordine?
Un produttore auto ha ridotto il tempo di reporting di “quando arriverà la mia auto” da 2 giorni a 5 minuti.
RED HAT JBOSS MIDDLEWAREInnovate faster, in a smarter way
DEV
ELO
PMEN
T TO
OLS
Red
Hat
JB
oss
Dev
elop
er S
tudi
o
MA
NA
GEM
ENT
TOO
LSR
ed H
at J
Bos
s O
pera
tions
Net
wor
k
PHYSICAL VIRTUAL PUBLIC CLOUD PRIVATE CLOUD
AUTOMATE
INTEGRATE
ACCELERATE
Red Hat JBoss BPM SuiteRed Hat JBoss BRMS
Red Hat 3Scale API ManagementRed Hat JBoss FuseRed Hat JBoss A-MQRed Hat JBoss Data Virtualization
Red Hat JBoss Enterprise Application PlatformRed Hat JBoss Data GridRed Hat JBoss Web ServerRed Hat Mobile Application Platform (FeedHenry)
APPLICATION INTEGRATIONAbilita l’integrazione di processi di business
end-to-end per diverse applicazioni
Accelerare lo sviluppo di sistemi integrati.
SOLUZIONI COMPLESSE POTREBBERO RICHIEDERE ENTRAMBE LE TECNOLOGIE
DATA INTEGRATIONAbilita l’accesso ai dati da fonti disparate con una vista
combinata e consistente
Migliorare "business decisions", accelerare lo sviluppo di sistemi di business intelligence.
DUE DIVERSI TIPI DI INTEGRAZIONE
JBoss Fuse
Integration Middleware Products
➢ 65 EIP (Integration patterns)➢ 200+ Connectors (file/db/http/...)➢ 30+ DataFormats (zip/xml/crypt.)➢ 15+ Expression Languages
JBoss A-MQ
Integration Middleware Products➢ Decoupled
Asynchronous Messaging
➢ Highly Scalable
➢ Multi-Protocol access
➢ Cross Language clients
HTTP
JMS
MQTT
AMQP
Simple Example
ApacheActiveMQ
WebSphereMQ
isWidget = xpath("/quote/product = ‘widget’");from(A).filter(isWidget).to(B)
Simple Example
ApacheActiveMQ
WebSphereMQ
Endpoint A = endpoint("activemq:queue:quote");Endpoint B = endpoint("mq:quote");Predicate isWidget = xpath("/quote/product = ‘widget’");from(A).filter(isWidget).to(B);
from (newOrder).choice()
.when(isWidget) .to(widget) otherwise().to(gadget);
Endpoint newOrder = endpoint("activemq:queue:newOrder");
Content Based Router
from (newOrder).choice()
.when(isWidget) .to(widget) otherwise().to(gadget);
Endpoint newOrder = endpoint("activemq:queue:newOrder"); Predicate isWidget = xpath("/order/product = 'widget'");
Content Based Router
from (newOrder).choice()
.when(isWidget) .to(widget) otherwise().to(gadget);
Endpoint newOrder = endpoint("activemq:queue:newOrder"); Predicate isWidget = xpath("/order/product = 'widget'");Endpoint widget = endpoint("activemq:queue:widget"); Endpoint gadget = endpoint("activemq:queue:gadget");
Content Based Router
Throttling
1. Prendere dei files da una directory2. (al massimo 3 files ogni 30 secondi)3. Spedire via JMS in una coda4. Ascoltare su una coda5. Fare upload su un server FTP
1 2 3 4 5
from throttle to from to
Throttling<camelContext> <route> <from uri="file:ugol/inbox?move=.done"/> <throttle maximumRequestsPerPeriod="3" timePeriodMillis="30000”> <to uri="activemq:queue:ugol"/> </throttle> </route> <route> <from uri="activemq:queue:ugol"/> <to uri="ftp://admin:secret@localhost:3333"/> </route></camelContext>
1
2
3
4
5
1 2 3 4 5
Splitter
from("file:inbox") .split(body().tokenize("\n") .marshal(customToXml) .to("activemq:line");
Splitter with Parallel Processing
from("file:inbox") .split(body().tokenize(“\n") .parallelProcessing() .marshal(customToXml) .to("activemq:line");
Splitter with XML Streaming
from("file:inbox") .split().tokenizeXML(“order") .streaming .to("activemq:line");
<orders> <order> <!-- order stuff here --> </order> <order> <!-- order stuff here --> </order>... <order> <!-- order stuff here --> </order></orders>
Error Handling - Try Catch
from("activemq:incoming") .doTry() .marshal().jaxb() .to("mq:QueueWithXmlMessages") .doCatch(Exception.class) .to("activemq:error") .end();
Error Handling - Dead Letter
errorHandler( deadLetterChannel("activemq:error"));
from("activemq:incoming") .marshal().jaxb() .to("mq:QueueWithXmlMessages");
Error Handling - Redelivery
errorHandler( deadLetterChannel("activemq:error") .maximumRedeliveries(5) .redeliveryDelay(5000));
from("activemq:incoming") .marshal().jaxb() .to("mq:QueueWithXmlMessages");
Common Containers
Apache ServiceMixApache ActiveMQApache TomcatJettyWildfly/EAPIBM WebSphereOracle WebLogic/OC4jGlassfishGoogle App EngineAmazon EC2DockerOpenshift…
Deployment Strategy No Container dependency Lightweight Embeddable
Deployment Options Standalone WAR Spring JEE OSGi Docker Cloud
Requisito di Integrazione
• Se il tag A contenuto nel Messaggio M ha un il valore X nel record corrispondente nella tabella B
• Trasforma M (rimuovi t1 tag, aggiungi X tag)
• Aggiungi il tag t3 al Message M (sempre)
Trasformare gli EIP in codice, usando un DSL Java, un DSL XML o un Editor grafico (Eclipse, Web based)
• Web Console HTML5 per Java middleware
• basata su AngularJS, Bootstrap e JavaScript (TypeScript)
• usa Jolokia per accedere a JMX over HTTP/JSON
• hawtio ha molti plugins per Fuse, fabric8, camel, activemq, karaf, JMX…
Hawt.io
• Debugging e Tracing di rotte Camel, con breakpoint
• Editing di rotte Camel
• É in grado di mostrare il sorgente Java di un componente che ha lanciato un eccezione a runtime
Hawt.io