O documento descreve o mecanismo de persistência do HornetQ, que utiliza um sistema de journals para armazenar operações de forma assíncrona. Os journals podem ser implementados via Java NIO ou Linux Asynchronous I/O e existem três tipos: bindings journal, JMS journal e message journal.
2. Agenda
• Persistência
– Mecanismo de Persistência
– Implementações de Journals
– Asynchronous I/O
– Tipos de Journal
– Instalado LibAIO
3. Persistência
• Mecanismo de Persistência
– Não utiliza banco de dados.
– Possui mecanismo de persistência próprio baseado em
arquivo.
– Utiliza técnica de Journal para persistência.
4. Persistência
• Mecanismo de Persitência
– Conceito de Journal
• É o processo de armazenar eventos em um log antes
que cada um possa ser aplicado no sistema. Esses logs
são chamados de journals.
• São utilizados por exemplo em SGBDs e Sistemas de
Arquivo.
5. Persistência
• Mecanismo de Persitência
– HornetQ Journal
• Conjunto de arquivos pré-criados e de tamanho prédefinido, onde o HornetQ realiza appends.
• Quando o journal atinge seu limite o HornetQ Journal
move para o próximo.
• Operações suportadas:
– Inclusão de mensagens
– Remoção de mensagens
– Alteração de mensagens
7. Persistência
• Mecanismo de Persitência
– HornetQ Journal
• Possue poderoso recurso para tratamento dos Journals.
– Remoção de espaços não utilizados
– Compactação de dados
• Suporta operações transacionais
– Local Transactions
– XA Transactions
8. Persistência
• Implementações de Journals
– Suporta nativamente dois tipos de implementações, são
elas:
• Java NIO
–
–
–
–
Faz a interface com o sistema de arquivo
Extremamente rápida
Roda em qualquer plataforma
Precisa do Java 6 ou superior
• Linux Asynchronous IO
– Específica para ambientes Linux
– Interage diretamente com o Kernel
– Precisa do Kernel 2.6 ou superior
9. Persistência
• Asynchronous I/O
– Seu objetivo é um permitir que um processo execute
várias operações de escrita/leitura sem ter que bloquear
ou aguarda que um outro seja concluído.
– Possue patches para versão 2.4 do kernel.
– Funciona apenas nos seguintes sistemas de arquivo:
•
•
•
•
•
ext2
ext3
ext4
jfx
xfs
10. Persistência
• Asynchronous I/O (non-blocking)
1 - O pedido de leitura retorna imediatamente, indicando que a leitura foi
iniciada com êxito.
2 - O aplicativo executa outro processamento.
3 – Quando a resposta de leitura chegar um sinal é enviado.
11. Persistência
• Tipos de Journals
– Existem três tipos, são eles:
• Bindings Journal
• JMS Journal
• Message Journal
12. Persistência
• Tipos de Journals
– Bindings Journal
• Incluem configurações de filas que são publicadas no servidor
juntamente com seus atributos.
• Sempre utiliza o Java NIO por ter um throughput muito baixo.
• São pré-fixados com hornetq-bindings
• Possuem extensão bindings
• Possuem tamanho de 1Mb
• Está localizado na pasta $HORNETQ_HOME/data/bindings
13. Persistência
• Tipos de Journals
– JMS Journal
• Armazenam dados relacionados à JMS:
–
–
–
–
Queues
Topics
Connection Factories
Informações de binding JNDI
• Todo recursos criados vias API de gerenciamento (JMX) serão
persistido nesse journal.
•
•
•
•
São pré-fixados com hornetq-jms
Possuem extensão jms
Possuem tamanho de 1Mb
Está localizado na pasta $HORNETQ_HOME/data/bindings
14. Persistência
• Tipos de Journals
– Message Journal
• Armazena efetivamente todos os dados relacionados a mensagem
• Se o ambiente for Linux e o AIO estiver instalado ele tenta
utilizá-lo, do contrário utiliza Java NIO.
•
•
•
•
São pré-fixados com hornetq-data
Possuem extensão hq
Possuem tamanho de 10Mb
Está localizado na pasta $HORNETQ_HOME/data/journal
15. Persistência
• Tipos de Journals
– Configurando o Bindings e JMS Journals
• As configurações ficam no arquivo hornetq-configuration.xml
Diretório dos Binding e
JMS Journals
16. Persistência
• Tipos de Journals
– Configurando o Message Journal
• As configurações ficam no arquivo hornetq-configuration.xml
Quantidade inicial de
Journals
Diretório dos Message
Journal
17. Persistência
• Tipos de Journals
– Outros parâmetros de configuração importante
• journal-type
– Permite configurar a implementação do journal. Opções: NIO e
ASYNCIO
• journal-max-io
– Total de requisições de escrita que serão enfileiradas antes de serem
submetidas ao SO.
– Usando NIO, deve ser sempre 1
– Usando AIO, por default é 500
– O limite máximo do SO é 65536 (/proc/sys/fs/aio-max-nr)
18. Persistência
• Tipos de Journals
– Outros parâmetros de configuração importante
• Inserindo novos parametros
19. Persistência
• Instalando LibAIO
– Pré-Requisitos
•
•
•
•
•
•
•
•
Kernel 2.6 ou superior
Java 6 ou superior
gcc - C Compiler
gcc-c++
autoconf
make
Autoconf
libtool
• libaio
• libaio-dev
20. Persistência
• Instalando LibAIO
# uname –r
//Verifica a versão do kernel
# find / -name java //Localiza o diretório de instalação do JDK
# export JAVA_HOME=<jdk_path>
# sudo yum install libaio libaio-devel
//Configura a variável de ambiente do JDK
//Instala biblioteca e pacote de desenvolvimento do LibAIO
# sudo yum groupinstall ‘Development Tools’
//Instala as ferramentas necessárias para compilação
# ./HORNETQ_HOME/native-src/bootstrap
//Inicia o processo de compilação
# ls /HORNETQ_HOME/native-src/src/.libs
//Se existir o arquivo libHornetQAIO.so funcionou
# mv /HORNETQ_HOME/native-src/src/.libs / libHornetQAIO.so /HORNETQ_HOME/bin/
libHornetQAIO.so //Deve-se colocar a lib (link simbólico) no classpath