83
Camel, Active MQ, CXF, Zookeeper e Karaf: l'integrazione nell'era del Cloud, the Apache way Ugo Landini

Codemotion fuse presentation

Embed Size (px)

DESCRIPTION

Introductory presentation on Fuse technology

Citation preview

Page 1: Codemotion fuse presentation

Camel, Active MQ, CXF, Zookeeper e Karaf: l'integrazione nell'era del

Cloud, the Apache way

!

Ugo Landini

Page 2: Codemotion fuse presentation

Agenda

Page 3: Codemotion fuse presentation

Scope

• Mostrare come sia possibile costruire un sistema di integrazione che sia:

• Resiliente

• Manutenibile

• Flessibile

• ad alte Performance

Page 4: Codemotion fuse presentation

Glossario

Page 5: Codemotion fuse presentation

Glossario• Fabric

• Container

• OSGI

• Rotta (Camel)

• Provisioning

• Versionamento

• Maven/Nexus

• GIT

• Coda

• REST/WS

• Zookeeper

• ESB

• Profiles

• Bundle

• OSGI

• EIP, Enterprise Integration Patterns

• Aggregator

• Splitter

• CBR

• Enrichment

• Multicast

• Wiretap

Page 6: Codemotion fuse presentation

Cos’è un ESB?

Page 7: Codemotion fuse presentation

Cos’è un ESB

• ESB = Enterprise Service Bus

• Termine coniato nei primi anni 2000

• E’ un modello architetturale che permette l’integrazione fra applicazioni (EAI)

• Si basa sull’astrazione di un BUS, in maniera similare all’analogo concetto per le architetture hardware

Page 8: Codemotion fuse presentation

Cos’è un ESB

Page 9: Codemotion fuse presentation

Cos’è un ESB

• Routing delle richieste

• Trasformazione dei dati

• Versionamento dei servizi

• Buffering delle richieste

• Bilanciamento e Scalabilità dei servizi

• Monitoring e controllo

Page 10: Codemotion fuse presentation

Cos’è OSGI?

Page 11: Codemotion fuse presentation

Cos’è OSGI?

• Uno standard per un Java “Modulare”

• permette di “impacchettare” il codice in un bundle (jar)

• gestisce le dipendenze dei bundle

• i bundle OSGI possono essere installati, lanciati, fermati, aggiornati (Lifecycle Management) ed offrire servizi

• OSGI = SOA in una JVM

• la prima versione risale al 2000 e nasce negli ambienti telco.

Page 12: Codemotion fuse presentation

Maven / Nexus

• Maven è lo standard “de facto” del dependency management nel mondo Java

• Nexus è un repository Maven centralizzato che facilita l’approccio “Devops”

• permette di gestire le dipendenze in maniera controllata

• un server che contiene tutti gli “artifatti” del processo di sviluppo

• Coadiuva la gestione dipendenze a runtime di OSGi

Page 13: Codemotion fuse presentation

Cos’è Karaf?

Page 14: Codemotion fuse presentation

Cos’è Karaf

• Lightweight container per OSGI

• Servizi di hot deploy, logging, shell, configuration, provisioning

• JEE component : JBoss = bundle OSGI : Karaf

Page 15: Codemotion fuse presentation

Cos’è Active MQ?

Page 16: Codemotion fuse presentation

Cos’è ActiveMQ

• Il Messaging Broker Open Source più diffuso al mondo

• JMS, AMQP, MQTT, OpenWire, STOMP, REST

• Java, C, C++, C#, Ruby, Perl, Python, PHP

• Pluggable Transport

• in-VM, TCP, SSL, NIO, UDP, JGroups

Page 17: Codemotion fuse presentation
Page 18: Codemotion fuse presentation

Enterprise Integration Patterns

• Lavoro di Hohpe / Woolf

• Divenuto uno standard de facto

• parlare un linguaggio comune

• riutilizzo di know how e soluzioni

• Eliminazione codice custom dalle implementazioni

• performance, bugs, quantità di codice

Page 19: Codemotion fuse presentation

Enterprise Integration Patterns

http://camel.apache.org/eip

Page 20: Codemotion fuse presentation

Cos’è Camel?

Page 21: Codemotion fuse presentation

Cos’è Camel

• Framework Open source che implementa i pattern EIP (>100 componenti)

• mapping 1:1 fra pattern e componenti

• le rotte camel sono gestite tramite OSGI

• per Container si intende il “contenitore” di componenti OSGI

• OSGI : Container = EJB : J2EE Server

Page 22: Codemotion fuse presentation

Camel

Page 23: Codemotion fuse presentation

Cos’è ZooKeeper

Page 24: Codemotion fuse presentation

Cos’è ZooKeeper

• E’ un componente dell’ecosistema di Hadoop

• Serve a costruire logiche di coordinamento

• Sharding, Failover, Discovery, Master election, ecc.

• Usato da HBase, Kafka, Solr, Yahoo, Fuse Fabric8

Page 25: Codemotion fuse presentation

Cos’è Fabric8?

Page 26: Codemotion fuse presentation

Cos’è Fabric8

• Fabric8 sfrutta le caratteristiche di OSGI e Zookeeper per fornire ulteriori servizi:

• Provisioning (configurazioni, codice, container, fabric stesso!)

• Registry centralizzato (configurazioni, load balancing, discovery, fail-over)

• Versionamento (git)

Page 27: Codemotion fuse presentation

Cos’è JBoss Fuse?

Page 28: Codemotion fuse presentation

Cos’è JBoss Fuse

Page 29: Codemotion fuse presentation

Cos’è JBoss Fuse

• Middleware composto da:

• JBoss AMQ (ActiveMQ) per la messaggistica

• Camel per le mediazioni (rotte)

• CXF per i Web Services

• Fabric8 per la governance (registry, provisioning) con Zookeeper, git, hawt.io

• decine di sottocomponenti “minori”

Page 30: Codemotion fuse presentation

Architettura

Page 31: Codemotion fuse presentation

Architettura di esempio

Page 32: Codemotion fuse presentation

ROOT : Zookeeper

Page 33: Codemotion fuse presentation

Provisioning remoto

Page 34: Codemotion fuse presentation

Provisioning remoto

Page 35: Codemotion fuse presentation

Dettaglio Nodi Camel

Page 36: Codemotion fuse presentation

Processo di sviluppo

Page 37: Codemotion fuse presentation

Processo di sviluppo

• Raccolta del requisito di integrazione

• Se il tag A contenuto nel messaggio M ha nel record corrispondente della tabella B il campo X

• Trasformazione del messaggio M (rimozione tag t1, aggiunta tag X)

• Successiva trasformazione del messaggio M aggiungendo un tag t3

Page 38: Codemotion fuse presentation

Processo di sviluppo

“Traduzione” del requisito in Enterprise Integration Patterns

Page 39: Codemotion fuse presentation

Processo di sviluppo

Page 40: Codemotion fuse presentation

Processo di sviluppo

• Riportare gli EIP sotto forma di codice

• usando un DSL Java

• usando un DSL XML

• con un editor grafico (plugin per Eclipse)

Page 41: Codemotion fuse presentation

Processo di sviluppo

Page 42: Codemotion fuse presentation

Processo di sviluppo

Page 43: Codemotion fuse presentation

Processo di sviluppo

• Impacchettare la rotta in un bundle OSGI

• mvn install

• Fare il push sul repository

• mvn deploy

Page 44: Codemotion fuse presentation

Processo di sviluppo

• Tramite CLI console o Web Console, e secondo le strategie di Roll-out aziendale, prelevare il bundle dal repository

• I container selezionati faranno partire automaticamente la rotta se il deploy è andato a buon fine (in caso di autostart, il default)

Page 45: Codemotion fuse presentation

Processo canonico

• Il processo “canonico” dunque è:

• creare una nuova rotta che implementi le nuove regole di business

• creare una nuova versione su Fabric, per esempio 1.1

• effettuare un check facendo un upgrade di un container alla 1.1

• roll-out su tutti i container o roll-back del subset

Page 46: Codemotion fuse presentation

DEFCON 2

• Il processo “DEFCON 2”:

• aprire la console grafica sui server di produzione

• editare la rotta

Page 47: Codemotion fuse presentation

Le console

Page 48: Codemotion fuse presentation

Hawt.io

• Web console

• Progetto open source: Hawt.io

• Accesso completo e remoto:

• container, log, dashboard con strumenti di controllo

• rotte camel, nodi AMQ, API Management, cluster.

Page 49: Codemotion fuse presentation

Hawt.io: vista rotte Camel

Page 50: Codemotion fuse presentation

Hawt.io

• versioni, profili, bundle OSGI, ...

• permette il DEBUG grafico delle rotte camel, con breakpoint

• permette di editare rotte camel, anche su server di PRODUZIONE

• permette di effettuare dei TRACE delle rotte

• può mostrare i SORGENTI di codice Java che ha sollevato un’eccezione

Page 51: Codemotion fuse presentation

Hawt.io: debug remoto e visuale

Page 52: Codemotion fuse presentation

Command Line Console

• Fuse Command Line console

• Basata su SSH

• Controllo totale locale e remoto del sistema

• Scriptabile

Page 53: Codemotion fuse presentation

Command Line Console

Page 54: Codemotion fuse presentation

Performance

Page 55: Codemotion fuse presentation

Performance ActiveMQ

• Persistenza AMQ basata su File system

• Utilizza LevelDB, un nosql di Google

• il Btree di indicizzazione di LevelDB garantisce tempi O(1) per il caricamento dei messaggi

• in altre parole, 3 o 30.000.000 di messaggi persistenti vengono “presi in carico” “istantaneamente” da un broker.

Page 56: Codemotion fuse presentation

Performance ActiveMQ

• LevelDB permette anche eccellenti tempi di scrittura sul file system

• La velocità del disco è il singolo fattore più importante nel tuning.

• Circa 10k msg/secondo da 5kb sostenuti per ore su un laptop moderno con SSD

• Circa 4.5k msg/secondo sostenuti sul server di Amazon (9k msg/secondo con due dischi)

Page 57: Codemotion fuse presentation

Performance Camel

Page 58: Codemotion fuse presentation

Affidabilità

Page 59: Codemotion fuse presentation

High Availability

• AMQ è configurabile in modalità Master - Slave

• 1 Slave per 1 Master

• N Slave per M Master (esempio: 2 Slave per 10 Master)

Page 60: Codemotion fuse presentation

Nodi ActiveMQ

Page 61: Codemotion fuse presentation

Scalabilità

Page 62: Codemotion fuse presentation

Scalabilità ActiveMQ

• AMQ offre diverse topologie per scalare orizzontalmente:

• Network of Brokers

• Client side partitioning

Page 63: Codemotion fuse presentation

Network of Brokers

• I messaggi vengono “inoltrati” fra i brokers

• Store and Forward

• Mono o bi-direzionale

• Questa topologia implica un certo grado di comunicazione fra i broker (chattiness)

• Uno o più hop per raggiungere il server su cui il messaggio è presente

Page 64: Codemotion fuse presentation

Network of Brokers

Page 65: Codemotion fuse presentation

Client side Partitioning

• E’ la topologia che permette di scalare orizzontalmente in maniera illimitata

• I diversi Broker NON sono a conoscenza l’uno dell’altro

• I client “partizionano” i messaggi secondo un criterio qualsiasi

• In questa topologia è possibile avere una singola coda deployata su centinaia di broker

Page 66: Codemotion fuse presentation

Client side Partitioning

Page 67: Codemotion fuse presentation

Client side Partitioning

• E’ la topologia consigliata per ambienti ad altissime performance, insieme al Master/Slave per l’HA

• La natura dei messaggi deve prevedere criteri di partizionamento

• E’ anche possibile avere diversi broker divisi per area geografica per architetture Follow The Sun

Page 68: Codemotion fuse presentation

Success Stories

Page 69: Codemotion fuse presentation

Customers

Page 70: Codemotion fuse presentation

Customers

Page 71: Codemotion fuse presentation

Customers

Page 72: Codemotion fuse presentation

Customers

Page 73: Codemotion fuse presentation

Customers

Page 74: Codemotion fuse presentation

Roadmap

Page 75: Codemotion fuse presentation

JBoss Fuse Roadmap

Page 76: Codemotion fuse presentation

JBoss Fuse Roadmap

!

• JBoss FUSE 6.0

• Aprile 2013

• JBoss FUSE 6.1

• GA da Lunedì 14 Aprile :)

• build 379

• https://repository.jboss.org/nexus/content/repositories/ea/org/jboss/fuse/jboss-fuse-full/

Page 77: Codemotion fuse presentation

Conclusioni

Page 78: Codemotion fuse presentation

Resilienza

!

• Resilienza

• Architettura distribuita

• Failover

• Master/Slave per l’alta affidabilità

• Scalabilità orizzontale: Network of Brokers, Client side partitioning

Page 79: Codemotion fuse presentation

Manutenibilità

!

• Manutenibilità

• OSGI based, ciclo di vita dei componenti standardizzato (con versionamento)

• Console di amministrazione molto potente

• Debug/Trace rotte, gestione log, editing rotte, ...

Page 80: Codemotion fuse presentation

Alte performance

• Alte performance

• da 4.5k a 10k messaggi al secondo per coda (messaggi persistenti “reali” da diversi Kb)

• Possibile dedicare un broker ed un disco per ogni coda (o anche distribuire la stessa coda su più macchine ottenendo facilmente > 100k msg/secondo)

• Tempi O(1) per presa in carico da parte del broker

Page 81: Codemotion fuse presentation

Link e risorse

Page 82: Codemotion fuse presentation

Link e risorse

• Active MQ

• http://activemq.apache.org

• Camel

• https://camel.apache.org

• CXF

• http://cxf.apache.org

• ZooKeeper

• http://zookeeper.apache.org

• Karaf

• http://karaf.apache.org

• Fabric8

• http://fabric8.io

• JBoss FUSE 6.1 EA builds

• https://repository.jboss.org/nexus/content/repositories/ea/org/jboss/fuse/jboss-fuse-full/

• Red Hat Supported!

• https://www.jboss.org/products/fuse.html

Page 83: Codemotion fuse presentation

Thank you!