1. JBoss
Data Grid
Infinispan
Ugo Landini
Solution Architect, Red Hat
versione 1.4
06 Aug 2014
3. Agenda
• NoSQL: introduzione
• Consistent Hashing e CAP Theorem
• Cos’è un Data Grid
• Infinispan/JDG features
4. Big Data
new generation of technologies ...
designed to economically extract
value from very large volumes of
a wide variety of data, by enabling
high velocity capture, discovery
and/or analysis IDC, 2012
5. NoSQL
Not Only SQL.
!
Definizione A: un sistema di storage
alternativo ad un RDBMS
!
Definizione B: un qualsiasi sistema
utilizzato in alternativa ad un RDBMS
6. Eventi chiave
• Google BigTable (2005, sviluppi iniziati nel
2004)
• Amazon rilascia il paper con il design di
Dynamo (2007)
7. NoSQL
• K/V Store
• Document Store
• Column based DB
• Graph DB
• ma anche XML, Object DB,
Multidimensional, Grid/Cloud, …
17. CAP Theorem: la
versione popolare
• CAP è stato formulato nel 2000
• La spiegazione semplice: C, A, P: scegline due
è stata abusata in questi anni da diversi
vendor ed è considerata una tautologia
• Nella realtà la questione è più complessa, e
dipende dai vincoli e dai tradeoff del sistema
18. CAP Theorem: modern
version
• In altre parole, è vero che è impossibile
avere una Availability PERFETTA ed anche
la consistenza dei dati in presenza di un
partizionamento, che è però un evento raro
19. CAP Theorem: modern
version
• I sistemi moderni possono prendere
decisioni diverse rispetto a C ed A:
• per operazioni diverse
• per dati diversi
• in momenti diversi
20. CAP Theorem: modern
version
• Inoltre, C, A e P non sono binarie:
• A è ovviamente continua
• C ha diversi livelli
• Anche P ha delle sfumature, per esempio
ci può essere un disaccordo se in un
sistema ci sia effettivamente un
partizionamento o meno
21. CAP Theorem: modern
version
• Più informazioni nell’articolo di Eric Brewer
“CAP 12 anni dopo”
• http://www.infoq.com/articles/cap-twelve-years-
later-how-the-rules-have-changed
24. Limiti architetturali
• I Database non scalano e sono un SPF
• Tecnologia datata e tipicamente
“conservativa”
• Non cloud-friendly e virtualization-friendly
• Di solito vuole hardware “speciale”
25. Come i programmatori risolvono
il problema: local caching
client 1
3. reads A 2. write A to cache
Node
1. read A
RDBMS
A
VM1
cache
26. Local caching
• Non scala al “livello successivo”
• poca memoria
• no HA
28. Local caching distribuito
• Local caching distribuito su più nodi
• Gestione dei Dirty reads? (multiple writes,
invalidation, ecc.)
• Gestione del Write behind?
30. “Clustering” della cache
• Cache topology influisce sui client
• Startup time che aumentano
• start della cache, transfer state
• JVM tunings incompatibili
• GC
• Non JVM clients
31. Cache servers
RDBMS
VM
cache
client 1
VM
client 2
VM
client 3
VM
VM
cache
1. Write
2. Update Cache
3. Read
cluster
32. Cache servers
• Protocolli
• open o proprietari
• Transazionalità
• Topologie: replica totale o dati distribuiti
• Smart routing
34. Consistent Hashing
• Hashing Wheel: una “ruota” matematica sulla
quale vengono effettuati gli hash delle K (chiavi)
• Ma anche gli hash dei nodi che partecipano al
cluster
• La posizione della chiave sulla ruota, rispetto a
quella dei nodi, determina chi è il nodo master
per quella chiave (e quali nodi contengono le
eventuali repliche)
39. Cos’è un Data Grid?
• Motore per gestione di storage in memoria
• Tipicamente distribuito in un cluster
• “Networked memory”
• Una distributed cache “on steroids”
• Un NoSQL Transazionale
40. Perchè un Datagrid?
• Scalabilità superiore
• Minore latenza
• Ma…
• ... tecnologia nuova da imparare
• ... migrazione applicazioni
41. Caratteristiche di un
Data Grid
• Un semplice key/value storage
• Motore di search per Document storage
• Scalabilità lineare, elasticità e fault
tolerance grazie ad algoritmi distribuiti
• Spesso è memory-based, quindi low-latency
42. Data Grid > Distributed
Cache
• Diverse Topologie
• Querying
• Task Execution e Map/Reduce
• Controllo sulla colocation dei dati per
ottenere il massimo delle performance
44. Cos’è Infinispan/JDG?
• Open Source (Apache) data grid platform
• Basato su alcune delle idee di JBoss Cache
• Basato su alcune delle idee di Amazon
Dynamo
• Progetto partito nel 2009
• Base per JBoss Data Grid (JDG)
45. Cos’è Infinispan/JDG?
• Può essere configurato in maniera ACID,
privilegiando la consistenza e l’availability
• Può essere configurato in maniera BASE,
sacrificando la Consistency
46. Topologie (Cluster modes)
• LOCAL
• come una semplice cache locale (EHCache)
• INVALIDATION
• no sharing
• REPLICATED
• Tutti i nodi sono identici, la capacità totale è quella del singolo
nodo. Ex: 2 nodi da 8Gb = 8Gb totali
• DISTRIBUTED
• La capacità totale è la somma dei singoli nodi meno le repliche.
Ex: 10 nodi da 8Gb con 1 replica = 40 Gb totali
52. Come scegliere
• Replicated:
• “Piccoli” set di dati con alte % di letture e
pochi cambiamenti (Ex: Comuni, CAP)
• Distributed:
• Molti dati: scalare linearmente con il
numero dei nodi
• effettuare M/R o Distexec
53. Come scegliere
• Importante: la modalità di clustering si
applica per Cache e non per Grid
(CacheManager)
• In uno stesso cluster è dunque possibile
avere diverse Cache, ognuna con la sua
topologia
54. Consistent Hashing in
Infinispan
• Self healing
• No single point of failure
• Highly concurrent
• MVCC locking
55. Consistent Hashing
• Algoritmo di hashing di default per il
Distributed mode: MurmurHash3.
• Può essere modificato o sostituito: ottima
idea se la K è un valore che già di per se
individua un criterio di partizionamento.
• Può essere “ottimizzato” tramite Server
Hinting, Virtual Servers, Grouping e Key
Affinity
56. Hashing: Server Hinting
• Server Hinting
• una tripla di valori (site, rack, server)
• E’ un “Aiuto” al consistent hashing per
aumentare l’Availability complessiva del
sistema
• Utile per esempio per evitare che le repliche
di un dato risiedano nello stesso rack
57. Hashing: Virtual Servers
• Numero di “segmenti” in cui si partiziona
logicamente un cluster
• Migliora la distribuzione dei nodi
sull’hashing wheel e dunque la ripartizione
delle chiavi stesse
• Default: 60
58. Hashing: Grouping
• Colocation dei dati: lo stesso nodo contiene
il dato X ma anche i dati afferenti ad X (es:
anagrafica cliente e suoi movimenti sul conto)
• Si definisce un “gruppo” per il quale il Data
Grid garantisce che gli oggetti appartenenti
saranno presenti sullo stesso nodo
• Si lavora sui pattern di accesso ai dati più
frequenti
59. Hashing: Key Affinity
• Scopo simile alle Grouping API: il Key
Affinity Service è un servizio attraverso il
quale possiamo richiedere un ID di cui
siamo certi che verrà gestito da un
particolare nodo
• Grouping e/o Key Affinity sono
fondamentali se si vuole raggiungere il
Nirvana del Data Grid
60. Nirvana del Data Grid
• Tutti i dati che servono ad una applicazione
sono disponibili in locale, e dunque alla
distanza di una singola chiamata Java
61. Persistenza dei dati
• Cache Store
• Non solo in memoria!
• Write through e write behind (ACK sincrono o
asincrono)
• Pluggable “drivers” per diversi store
• File System, JDBC, LevelDB
• MongoDB, JPA, Cassandra, BerkeleyDB, ecc.
62. Eviction dei dati
• Evita al sistema degli Out Of Memory
• Le entry possono anche essere “passivate” su
disco (in diverse modalità, vedi CacheStore)
63. Expiry dei dati
• Si assegna una “vita” al dato stesso (lifespan) o un
tempo massimo di “non utilizzo” (max idle time)
• Dopodiché superati questi valori il dato verrà
invalidato e rimosso dal Data Grid (senza
passivazione)
• Evita di doversi scrivere job “spazzini”
• Evita degli Out Of Memory
64. Eviction/Expiry:
differenze
• Tutte e due le tecniche servono
fondamentalmente per evitare gli Out Of
Memory
• I dati “Evicted” a differenza di quelli
“Expired” possono essere mantenuti nel
Grid per usi futuri con la Passivazione
65. Transactions
• A differenza della maggior parte dei Database
“NoSQL”, Infinispan ha un full support per le
transazioni
• Local Transactions
• Global Transactions (XA): individua il TX Manager
dell’AS che lo ospita e lo usa
• Batching (come le Global, fra diversi cluster Infinispan)
66. Listeners / Notifications
• Capacità di ricevere eventi
• A livello di Cache o di CacheManager
• Cambio di topologia
• Aggiunta/Rimozione/Modifica di oggetti
67. Querying the Grid
• Modulo Infinispan-query
• utilizza Hibernate Search e Lucene
• Querying via DSL
• Gli indici di Lucene possono essere in
memoria, su disco o anche essi nella
griglia
68. Map / Reduce
• Map/Reduce è un algoritmo reso famoso da
Google per l’implementazione del suo famoso
algoritmo di ricerca distribuito
• M/R permette di effettuare delle operazioni
“globali” sulla griglia
• Ogni nodo lavora sui dati di sua competenza (Map)
• I risultati vengono poi aggregati (Reduce)
71. Distexec: Distributed
Execution
• Distexec permette di sottomettere dei
“task” alla griglia
• Il task può essere eseguito su tutti i nodi o
su un sottoinsieme dei nodi
• Il task può modificare i dati stessi del Grid
77. Library Mode
Il Library mode da accesso a tutte le API e
le feature
• Map-like key/value store
• Querying, JPA-like layer (Hibernate OGM)
• Listener e Notification
• Transazioni Locali e Globali, Batching
• Map/Reduce e Distexec
79. Client/Server Mode
• Non tutte le API sono a
disposizione su protocolli remoti
• Ci sono differenze di feature per le
diverse API
• Il grid può però scalare
indipendentemente ed essere
accessibile a diversi sistemi
80. REST
• Utile per client non Java per i quali non
esista un protocollo
• HTTP Transport: Firewall friendly
• E’ ovviamente più lento delle alternative
81. Memcached protocol
• Protocollo text based molto diffuso
• Clustering
• State sharing
• Non ha configurazione dinamica: se un nodo
cade va riconfigurata la lista dei server
• Utile per swap-in di Memcached, CouchDB
o CouchBase
82. Hot Rod
• Wire protocol per
comunicazioni client server
• Open Source
• Language independent
• Built-in failover e load
balancing
• Smart routing
83. Confronto protocolli
Protocol
Client
Libs
Smart
Routing
Load
Balancing/
Failover
TX Listeners M/R Dist Search
Cluster
separato
Library
mode
inVM N/A Yes Dinamico Yes Yes Yes Yes Yes No
REST Text HTTP No
Qualsiasi
HTTP load
balancer
No No No No No Yes
Memcached Text Molte No
Solo con
predefined
server list
No No No No No Yes
Hot Rod Binary
Java/
Python/
C++
Yes Dinamico Locali con
MVCC Yes (6.4) No No Yes (6.3) Yes
84. Confronto protocolli
Protocol
Client
Libs
Smart
Routing
Load
Balancing/
Failover
TX Listeners M/R Dist Search
Cluster
separato
Library
mode
inVM N/A Yes Dinamico Yes Yes Yes Yes Yes No
REST Text HTTP No
Qualsiasi
HTTP load
balancer
No No No No No Yes
Esempio di ciclo virtuoso OSS
Memcached Text Molte No
Solo con
predefined
server list
No No No No No Yes
Hot Rod Binary
Java/
Python/
C++
Yes Dinamico Locali con
MVCC Yes (6.4) No No Yes (6.3) Yes
86. Chi usa i Data Grids?
• Chiunque abbia bisogno di:
• massive data volumes
• high transactional throughput
• strict performance characteristics
• uptime elevati
87. Link e risorse
JDG JBoss Data Grid
• Product page:
http://www.redhat.com/products/jbossenterprisemiddleware/data-grid/
!
Infinispan
• Project page: http://www.infinispan.org
• Blog: http://blog.infinispan.org
• Twitter: http://twitter.com/infinispan
• Community wiki e docs: http://community.jboss.org/wiki/Infinispan