Versão 2.9.0 do Apache Ignite - o que há de novo?

Apache Ignite é um banco de dados distribuído de alto desempenho, de código aberto, projetado para armazenamento e processamento distribuído de grandes quantidades de dados em um cluster de nós. Nós do Sberbank o usamos ativamente e temos uma equipe desenvolvendo este produto. Em 23 de outubro de 2020, uma nova versão do Apache Ignite 2.9.0 foi lançada. Como gerente deste lançamento em nome de toda a equipe de desenvolvimento do Apache Ignite, desejo compartilhar informações sobre as principais inovações.



  • Instantâneos (backup)
  • Rastreamento
  • Novos recursos para thin clients
  • Modo de operação de cluster "Somente leitura"
  • Execução de código personalizado na sandbox
  • Criptografia de dados transparente: rotação de chave mestra
  • Ferramentas para interromper tarefas e solicitações do usuário
  • Cache do lado da plataforma (.NET)
  • Conectando nós de cliente a nós de servidor por meio de NAT




Instantâneos (backup)



No Ignite 2.9.0, tornou-se possível criar uma cópia de backup de todos os caches armazenados no disco (ou seja, caches operando no modo Ignite Native Persistence ) de todo o cluster. Snapshots podem ser criados online, em um cluster ativo com uma carga de usuário. Isso cria uma cópia totalmente consistente de todos os dados do cluster.



Você pode começar a criar um backup de uma das seguintes maneiras:



  • utilizando um utilitário de linha de comando control.sh: control.sh --snapshot create <snapshot name>;
  • Operação JMX: MBean group="Snapshot", name=SnapshotMXBeanImpl, createSnapshot(<snapshot name>);
  • a API através do Java: Ignite.snapshot().createSnapshot("<snapshot name>").


Onde <snapshot name>está o nome exclusivo do instantâneo.



Após a conclusão da formação do instantâneo no diretório work/snapshots/<snapshot name>(com as configurações padrão) de cada nó, a estrutura de armazenamento do arquivo deste nó no momento do início do instantâneo será recriada. A estrutura de arquivo gerada pode ser usada no futuro para restaurar a partir de uma cópia de backup, substituindo arquivos por dados de nó por arquivos do diretório de captura instantânea.



Você pode encontrar informações mais detalhadas sobre como trabalhar com instantâneos na documentação oficial .



Rastreamento



O sistema de monitoramento Ignite continua a melhorar e uma das inovações significativas na versão 2.9 é o subsistema de rastreamento. O rastreamento permite obter informações úteis para depuração no estágio de desenvolvimento e para análise de incidentes. Com a ajuda do rastreio, tornou-se possível coletar informações distribuídas de baixo nível sobre o progresso de várias tarefas em execução no cluster e usar essas informações para diagnosticar problemas de desempenho. Um traço que mostra o caminho de uma tarefa no sistema é formado na forma de uma árvore, cada nível seguinte da qual fornece informações mais detalhadas do que o anterior.



No Ignite 2.9.0, o rastreamento cobre os seguintes componentes internos:



  • Mensagens de descoberta;
  • Mensagens de comunicação
  • Processo de troca;
  • transações.


Para visualizar os rastreios, eles devem ser exportados para um sistema externo. Para esses fins, o Ignite usa a biblioteca OpenCensus, que fornece vários exportadores para vários sistemas (por exemplo, no Zipkin).



Você pode limitar a quantidade de informações exportadas definindo um ou mais dos componentes acima como o escopo e definindo a frequência de amostragem (as configurações estão disponíveis para alteração no tempo de execução).



Você pode encontrar informações mais detalhadas sobre rastreamento na documentação oficial .



Novos recursos para thin clients



Os thin clients java e .NET agora têm a funcionalidade Ignite que antes estava disponível apenas no cliente thick.



A capacidade de usar:



  • cluster API & cluster group API ( .NET java):
    • ;
    • ;
    • , ;
    • ;
  • compute API ( .NET java):
    • . , p2p class loader , class-path ( );
  • Service Grid ( java):
    • Ignite. compute API, , .


Além disso, o cliente thin .NET recebeu o recurso Automatic Server Node Discovery, que é ativado em conjunto com a funcionalidade de reconhecimento de partição. Ao utilizar o "reconhecimento de partição", o cliente estabelece uma ligação não com um nó servidor, mas sim com vários de uma vez, para, se possível, enviar um pedido ao nó principal para os dados deste pedido. Ao mesmo tempo, a descoberta automática de nós de cluster permite não listar todos os endereços de nós de cluster na configuração do cliente. Basta que o cliente possa se conectar a pelo menos um host ativo usando os endereços listados na configuração. O cliente receberá os endereços dos nós restantes do cluster.



Para obter mais informações sobre como usar os novos recursos, consulte as subseções correspondentes da documentação do cliente thin java e .NET .



Modo de operação de cluster "Somente leitura"



Antes do lançamento do 2.9.0, o Ignite tinha apenas dois estados do cluster: o cluster poderia ser inativo (nós foram coletados em uma topologia, mas quaisquer ações com caches foram proibidas) ou ativo (quaisquer ações foram permitidas). Na versão 2.9.0, um novo estado de cluster foi adicionado - "somente leitura". Será útil para realizar alguns trabalhos de manutenção (como verificar a integridade dos dados).



Você pode encontrar informações mais detalhadas sobre os estados do cluster na documentação oficial .



Execução de código personalizado na sandbox



O Ignite pode executar código personalizado (como tarefas de computação, ouvintes de eventos, vários filtros) em nós de servidor. Esse código foi executado com os mesmos direitos do código do sistema Ignite e toda a API Java estava disponível para ele sem restrições. Código potencialmente inseguro pode interromper o desempenho do cluster (por exemplo, excluir arquivos de dados do Ignite, encerrar o JVM, etc.).



Na versão 2.9.0, tornou-se possível executar esse código na "sandbox" com os direitos que foram explicitamente atribuídos ao sujeito de acesso que solicitou a execução deste código (por exemplo, um nó cliente). Os direitos atribuídos a um acessador são uma coleção de objetos de classe java.security.Permissionque são verificados por java antes de executar alguma ação.



Para que o Ignite Sandbox funcione, dois componentes devem ser instalados e ativados:



  • Gerenciador de segurança Java. Responsável por autorizar assuntos ao fazer chamadas para bibliotecas Java do sistema. Desativado por padrão;
  • Ignite o processador de segurança. Responsável por autenticar assuntos de acesso. "Fora da caixa" com Ignite não é fornecido, requer implementação independente e conexão usando um plugin.


Você pode encontrar informações mais detalhadas sobre Ignite Sandbox na documentação oficial .



Criptografia de dados transparente: rotação de chave mestra



A criptografia transparente de dados (TDE) é uma funcionalidade que permite não armazenar dados no disco em texto não criptografado. A criptografia de dados em um disco usando um DBMS é necessária, por exemplo, para a certificação de segurança de dados PCI DSS. No Apache Ignite, a funcionalidade básica do TDE (Fase 1) foi implementada na versão 2.7. Na versão atual, foi implementada a segunda fase da TDE - rotação da chave mestra (as chaves de cache armazenadas no disco são criptografadas com a chave mestra). A terceira fase do TDE (rotação de chave de cache) será implementada na próxima versão.



Você pode encontrar informações mais detalhadas sobre a rotação da chave mestra na documentação oficial .



Ferramentas para interromper tarefas e solicitações do usuário



As versões anteriores do Ignite não tinham um mecanismo consistente para interromper as tarefas do usuário e solicitações do administrador. Os usuários tinham a opção de cancelar suas tarefas e solicitações. Para administradores, separados, de forma alguma correlacionados uns com os outros, ferramentas estavam disponíveis (por exemplo, era possível abortar transações por lista, filtrar, por meio de JMX ou do utilitário control.sh, e "matar" uma consulta SQL usando um comando SQL KILL QUERY). Na versão atual, o administrador tem a capacidade de interromper



  • vários tipos de consultas (SQL, varredura, contínua),
  • transações,
  • tarefas de computação,
  • Serviços Ignite,


usando uma interface unificada.



Todos esses tipos de tarefas e solicitações podem ser interrompidos por qualquer um dos seguintes métodos:



  • o utilitário control.sh;
  • via JMX;
  • Comando SQL.


Para obter mais informações sobre como interromper tarefas e solicitações do usuário, consulte a documentação oficial .



Cache do lado da plataforma (.NET)



No Ignite.NET, foi adicionada a capacidade de usar uma camada de cache adicional na plataforma .NET. Os dados na memória .NET nesta camada são armazenados em um formato desserializado, para que você possa ler os dados já armazenados em cache sem chamada JNI adicional e desserialização. Isso aumenta significativamente a velocidade de leituras não transacionais.



Para obter mais informações sobre cache do lado da plataforma, consulte a documentação oficial .



Conectando nós de cliente a nós de servidor por meio de NAT



No Ignite 2.9.0, apareceu um modo de interação de rede, no qual as conexões entre o cliente "gordo" e o servidor são iniciadas apenas no lado do cliente (o servidor não inicia as conexões com o cliente, mas, se houver necessidade de interação direta com o cliente, ele solicita que o cliente se conecte a ele através do já estabelecido conexões do cliente com outros servidores). Este modo de operação permite o uso de configurações de cluster em que o NAT está localizado entre os nós do cliente e do servidor (por exemplo, quando os clientes estão executando em um ambiente virtual).



Você pode encontrar informações mais detalhadas sobre a conexão de nós clientes por meio de NAT na documentação oficial .



Conclusão



O acima são as mudanças mais significativas na versão 2.9.0 do Apache Ignite. Mas a lista de mudanças não se limita a eles. Como de costume, corrigimos muitos bugs e fizemos muitas outras melhorias úteis. Uma lista completa de mudanças pode ser encontrada nas notas de lançamento .



All Articles