1. Distribuição
de
Dados
com
Java
Uma
Introdução
ao
JBoss
Infinispan
Wagner
Roberto
dos
Santos
(@wrsantos)
Agile
Coach
/
Enterprise
Architect
2. Hello!
Agile experience with
Investment Banks and Retail Banks
Off-shore development
Teams up to 60 people
Architecture, IS Management, Expertise, and
methodology (Agile)
Supported Agile adoption in main Banks in France:
Credit Agricole, LCL, Société Générale, BNP Parisbas/
Fortis
@OCTO
2011
3. Apresentação
§ Arquiteto de Software / Agile Coach / Software Craftsman
§ Instrutor da Globalcode da formação Academia Agile
§ Editor do Portal InfoQ Brasil (http://infoq.com/br).
§ Participação nos projetos de tradução e teste do NetBeans.
§ Palestrante de eventos como Just Java, Sun Tech Days,
Campus Party.
§ Premiações em competições de tecnologia .
§ Autor de vários artigos para a revista Mundo Java e Java
Magazine
§ Certificações: SCJA, SCJP, SCSNI, SCJWSD, SCBCD, SCEA,
CSM e ACP.
§ Mantém o blog http://netfeijao.blogspot.com
§ Twitter: @wrsantos
@OCTO
2011
8. Introdução
Deve
gerenciar
os
dados
como
objetos,
pois
a
aplicação
lida
com
objetos;
@OCTO
2011
9. Introdução
Os
objetos
devem
ser
manQdos
na
memória
para
aumentar
a
performance
da
aplicação,
evitar
I/O
excessivo
no
disco
e
aliviar
o
banco
de
dados
@OCTO
2011
10. Introdução
A
camada
deve
(de
maneira
transparente)
carregar
informações
ausentes
para
a
memória
oriundas
do
banco
de
dados
@OCTO
2011
11. Introdução
Ela
deve
ser
capaz
de
propagar
as
modificações
nos
dados
para
o
banco
de
dados
(ou
outro
repositório
persistente)
de
maneira
assíncrona
@OCTO
2011
12. Introdução
Deve
ser
tão
simples
de
escalar
quanto
a
camada
de
aplicação
@OCTO
2011
13. JBoss
Infinispan
Infinispan
é
uma
plataforma
para
grid
de
dados
open
source
distribuída
pela
JBoss.
Geralmente,
data
grids
são
uQlizados
para
reduzir
a
latência
ao
banco
de
dados,
prover
alta
disponibilidade
e
storage
elásQco
dos
dados,
como
soluções
NoSQL.
@OCTO
2011
14. CaracterísQcas
§ Cluster:
Podemos
distribuir
nosso
cache
em
cluster
com
apenas
algumas
configurações;
§ Evic7on:
Mecanismo
automáQco
de
evicQon
para
evitar
erros
de
out-‐of-‐memory
e
controle
do
melhor
uso
da
memória;
§ Cache
Loader:
É
possível
configurar
cache
loaders
(ver
tópico
“Cache
Loader”)
para
persisQr
o
estado
dos
objetos
em
um
banco
de
dados
ou
em
um
arquivo
no
disco;
§ Suporte
a
JTA
e
compa7bilidade
com
XA:
Gerenciamento
de
transação
com
qualquer
aplicação
compalvel
com
JTA;
§ Gerenciamento:
É
possível
gerenciar
e
monitorar
os
objetos
de
uma
instância
do
grid
de
dados
através
de
componentes
JMX
ou
uQlizar
um
console
gráfico
com
RHQ.
@OCTO
2011
17. Configuração
DeclaraQva
§ UQlizando
um
Arquivo
de
Configuração
public void testeCriacaoCacheDeclarativo() throws IOException {
String ArquivoConfiguracao = "/path/infinispan-config.xml";
CacheContainer container = new DefaultCacheManager(ArquivoConfiguracao);
Cache<String, String> cache = container.getCache();
// Inclusão de novo valor no cache
cache.put("wagner", "santos");
// Validação da informação atribuída no cache
assertEquals(cache.get("wagner"), "santos");
}
@OCTO
2011
18. Configuração
ProgramáQca
§ Configurar
o
Grid
com
a
classe
ConfiguraQon
@Test
public void testeCriacaoCacheProgramatico() {
// Configuração Global com os valores default
GlobalConfiguration globalConf = GlobalConfiguration.getClusteredDefault();
// Criação de objeto configuração
Configuration conf = new Configuration();
// Mudando o mode para Replicação Síncrona
conf.setCacheMode(CacheMode.REPL_SYNC);
// Criação de CacheManager
CacheContainer container = new DefaultCacheManager(globalConf, conf);
// Obtendo o cache baseado nos valores informados
Cache<String, String> cache = container.getCache();
// Inclusão de novo valor no cache
cache.put("wagner", "santos");
// Validação da informação atribuída no cache
assertEquals(cache.get("wagner"), "santos");
}
@OCTO
2011
20. Modo
Local
§ Cache
tradicional,
apenas
para
a
instância
onde
está
sendo
executado.
DefaultCacheManager m = new DefaultCacheManager();
Cache<String, String> c = m.getCache(); // Cache Local
@OCTO
2011
21. Modo
Replicação
§ Cache
para
ambiente
de
Cluster.
§ Fácil
de
configurar
§ Máquinas
se
auto
descobrem
<infinispan>
<global>
<transport />
</global>
<default>
<clustering mode=”R”>
<sync />
</clustering>
</default>
</infinispan>
@OCTO
2011
23. Modo
Invalidação
§ Conjunto
de
caches
standalone
§ Se
comunicam
após
cada
alteração
§ Após
uma
alteração
em
um
objeto,
o
objeto
se
torna
inválido
nos
outros
nós.
§ Uso
indicado
para
sistemas
que
necessitem
fazer
muita
leitura
de
banco
de
dados
@OCTO
2011
25. Modo
Distribuição
§ Permite
que
o
Infinispan
escale
de
maneira
linear
§ Conforme
a
necessidade,
podemos
adicionar
mais
nós
ao
nosso
Grid.
@OCTO
2011
27. Modo
Distribuição
+
L1
Caching
§ Perfeito
para
prevenir
muitas
chamadas
remotas
§ Ao
detectar
muitas
chamadas
remotas,
Infinispan
disponibiliza
o
objeto
no
nós
solicitado
por
um
período
de
tempo
configurável.
@OCTO
2011
30. Síncrono
ou
Assíncrono
§ Síncrono,
implica
que
para
todo
objeto
manipulado,
o
cliente
terá
que
aguardar
o
Infinispan
realizar
todo
o
ciclo
de
atualizações.
§ Menos
Velocidade
e
Mais
Consistência
§ Assíncrono,
ao
contrário,
o
cliente
não
precisa
aguardar
§ Mais
Velocidade
e
Menor
Consistência
@OCTO
2011
34. EvicQon
EvicQon
(ou
Despejo)
é
o
processo
que
ocorre
quando
um
objeto
é
despejado
da
memória,
no
momento
em
existem
muitos
objetos
adicionados
no
cache
@OCTO
2011
36. ExpiraQon
ExpiraQon
(ou
Expiração)
é
o
processo
de
remover
o
objeto
do
cache
quando
ele
chega
ao
fim
do
seu
tempo
de
vida,
ou
quando
o
objeto
está
há
muito
tempo
ocioso
no
cache.
@OCTO
2011