Guia para Hazelcast com Java
1. Visão geral
Este é um artigo introdutório sobre o Hazelcast, onde veremos como criar um membro do cluster, distribuídoMap para compartilharMap dados entre os nós do cluster e criar um cliente Java para conectar e consultar dados no cluster .
2. O que é Hazelcast?
Hazelcast é uma plataforma de grade de dados na memória distribuída para Java. A arquitetura suporta alta escalabilidade e distribuição de dados em um ambiente em cluster. Ele suporta a descoberta automática de nós e a sincronização inteligente. Para ver os recursos de todas as edições Hazelcast, podemos nos referir alink a seguir.
Hazelcast está disponível em diferentes edições. Você pode encontrar a lista de edições disponíveis do Hazelcast no seguintehttp://docs.hazelcast.org/docs/latest/manual/html-single/index.html#hazelcast-editions. [Link]. Para os fins deste artigo, focaremos na edição de código aberto do Hazelcast.
Da mesma forma, o Hazelcast oferece vários recursos, como Estrutura de dados distribuídos, Computação distribuída, Consulta distribuída etc. Para o propósito deste artigo, vamos nos concentrar emMap distribuídos.
3. Dependências do Maven
O Hazelcast oferece bibliotecas diferentes com base no uso. Podemos encontrar dependências maven no grupocom.hazelcast no Maven Central.
Para os fins deste artigo, focaremos nas dependências necessárias para criar um membro independente do cluster Hazelcast e o Hazelcast Java Client.
3.1. Hazelcast Cluster Member
Precisamos adicionar a dependência do hazelcast no pom.xml, como mostrado abaixo:
com.hazelcast
hazelcast
3.7.2
A dependência está disponível emmaven central repository.
3.2. Cliente Hazelcast Java
Além da dependência principal do Hazelcast, também precisamos incluir a dependência do cliente:
com.hazelcast
hazelcast-client
3.7.2
A dependência está disponível emmaven central repository.
4. Sua primeira inscrição no Hazelcast
4.1. Criar membro Hazelcast
Os membros (também chamados de nós) se juntam automaticamente para formar um cluster. Essa união automática ocorre com vários mecanismos de descoberta que os membros usam para encontrar um ao outro.
Vamos criar um membro que armazena dados em um mapa distribuído Hazelcast:
public class ServerNode {
HazelcastInstance hzInstance = Hazelcast.newHazelcastInstance();
...
}
Quando iniciamos o aplicativoServerNode, podemos ver o texto corrido no console, o que significa que criamos um novo nó Hazelcast em nosso JVM que terá que se juntar ao cluster.
Members [1] {
Member [192.168.1.105]:5701 - 899898be-b8aa-49aa-8d28-40917ccba56c this
}
Para criar vários nós, podemos iniciar as várias instâncias do aplicativoServerNode. O Hazelcast criará e adicionará automaticamente um novo membro ao cluster.
Por exemplo, se executarmos o aplicativoServerNode novamente, veremos o seguinte log no console que diz que há dois membros no cluster.
Members [2] {
Member [192.168.1.105]:5701 - 899898be-b8aa-49aa-8d28-40917ccba56c
Member [192.168.1.105]:5702 - d6b81800-2c78-4055-8a5f-7f5b65d49f30 this
}
4.2. CriarMap Distribuído
A seguir, criaremos umMap. distribuído. Precisamos da instância deHazelcastInstance criada anteriormente para criar umMap distribuído que estende a interfacejava.util.concurrent.ConcurrentMap.
Map map = hazelcastInstance.getMap("data");
...
Vamos adicionar algumas entradas aomap:
IdGenerator idGenerator = hazelcastInstance.getIdGenerator("newid");
for (int i = 0; i < 10; i++) {
map.put(idGenerator.newId(), "message" + 1);
}
Como podemos ver acima, adicionamos 10 entradas emmap. UsamosIdGenerator para garantir que obteríamos a chave exclusiva para o mapa. Para obter mais detalhes sobreIdGenerator, você pode verificar o seguintelink.
Embora esse possa não ser o exemplo do mundo real, ele é usado apenas para demonstrar uma das muitas operações que podemos aplicar ao mapa distribuído. Veremos na seção posterior como podemos recuperar as entradas do mapa adicionadas pelo membro do cluster do cliente java Hazelcast.
Internamente, o Hazelcast irá particionar as entradasmap e distribuir e replicar as entradas entre os membros do cluster. Para obter mais detalhes sobre HazelcastMap, você pode verificar o seguintelink.
4.3. Criar Cliente Hazelcast Java
O cliente Hazelcast nos permite realizar todas as operações Hazelcast sem ser um membro do cluster. Ele se conecta a um dos membros do cluster e delega todas as operações em todo o cluster.
Vamos criar um cliente nativo:
ClientConfig config = new ClientConfig();
GroupConfig groupConfig = config.getGroupConfig();
groupConfig.setName("dev");
groupConfig.setPassword("dev-pass");
HazelcastInstance hzClient
= HazelcastClient.newHazelcastClient(config);
O nome de usuário e a senha padrão para acessar o cluster sãodevedev-pass. Para obter mais detalhes sobre o cliente Hazelcast, você pode verificar o seguintelink.
4.4. Acesse DistributedMap do cliente Java
Em seguida, acessaremos osMap distribuídos que criamos anteriormente. Precisamos da instância deHazelcastInstance criada anteriormente para acessar osMap. distribuídos
IMap map = hzClient.getMap("data");
...
Agora podemos fazer operações emmap sem ser um membro do cluster. Por exemplo, vamos tentar iterar sobre as entradas do mapa adicionadas pelo membro do cluster:
for (Entry entry : map.entrySet()) {
...
}
5. Configurando Hazelcast
Nesta seção, abordaremos como configurar a rede Hazelcast usando declarativa (XML) e programaticamente (API) e usar o centro de gerenciamento Hazelcast para monitorar e gerenciar os nós em execução.
Enquanto o Hazelcast está inicializando, ele procura a propriedade de sistemahazelcast.config. Se estiver definido, seu valor será usado como o caminho. Se a propriedade do sistema acima não for definida, o Hazelcast verifica se há um arquivohazelcast.xml no diretório de trabalho.
Caso contrário, ele verifica sehazelcast.xml existe no caminho de classe. Se nenhuma das opções acima funcionar, o Hazelcast carrega a configuração padrão, ou seja,
Se nenhuma das opções acima funcionar, o Hazelcast carrega a configuração padrão, ou seja, hazelcast-default.xml que vem comhazelcast.jar.
5.1. configuração de rede
Por padrão, o Hazelcast usa multicast para descobrir outros membros que podem formar um cluster. Se o multicast não for uma maneira preferida de descoberta para o nosso ambiente, podemos configurar o Hazelcast para um cluster TCP / IP completo.
Vamos configurar o cluster TCP / IP usando configuração declarativa:
5701
machine1
localhost
e configuração programática:
Config config = new Config();
NetworkConfig network = config.getNetworkConfig();
network.setPort(5701).setPortCount(20);
network.setPortAutoIncrement(true);
JoinConfig join = network.getJoin();
join.getMulticastConfig().setEnabled(false);
join.getTcpIpConfig()
.addMember("machine1")
.addMember("localhost").setEnabled(true);
Por padrão, o Hazelcast tentará 100 portas para vincular. No exemplo acima, se definirmos o valor da porta como 5701 e limitarmos a contagem de portas a 20, à medida que os membros ingressarem no cluster, o Hazelcast tentará encontrar portas entre 5701 e 5721.
Se quisermos usar apenas uma porta, podemos desativar o recurso de incremento automático de uma porta definindoauto-increment parafalse.
5.2. Configuração do Centro de Gestão
O centro de gerenciamento nos permite monitorar o estado geral dos clusters, também podemos analisar e navegar nas estruturas de dados em detalhes, atualizar as configurações do mapa e fazer o despejo de threads nos nós.
Para usar o Hazelcast Management Center, podemos implantar o aplicativomancenter-version.war em nosso servidor / contêiner de aplicativos Java ou podemos iniciar o Hazelcast Management Center a partir da linha de comando. Podemos baixar o ZIP Hazelcast mais recente dehazelcast.org. O ZIP contém o arquivomancenter-version.war.
Podemos configurar nossos nós Hazelcast adicionando a URL do aplicativo da web ahazelcast.xmle fazer com que os membros Hazelcast se comuniquem com o centro de gerenciamento.
Vamos configurar o centro de gerenciamento usando configuração declarativa:
http://localhost:8080/mancenter
e configuração programática:
ManagementCenterConfig manCenterCfg = new ManagementCenterConfig();
manCenterCfg.setEnabled(true).setUrl("http://localhost:8080/mancenter");
6. Conclusão
Neste artigo, abordamos conceitos introdutórios sobre Hazelcast. Para obter detalhes, você pode dar uma olhada emReference Manual.
Você pode encontrar o código-fonte deste artigoover on GitHub.