Lançamento do rqlite 7.0, um DBMS distribuído e tolerante a falhas baseado em SQLite

Ocorreu o lançamento do SGBD distribuído rqlite 7.0, que utiliza SQLite como mecanismo de armazenamento e permite organizar o trabalho de um cluster a partir de storages sincronizados entre si. Uma das características do rqlite é a facilidade de instalação, implantação e manutenção de um armazenamento distribuído tolerante a falhas, um pouco semelhante ao etcd e ao Consul, mas usando um modelo de dados relacional em vez de um formato chave/valor. O código do projeto é escrito em Go e distribuído sob a licença do MIT.

Para manter todos os nós em um estado sincronizado, o algoritmo de consenso Raft é usado. Rqlite usa a biblioteca SQLite original e o driver go-sqlite3, sobre o qual é lançada uma camada que processa as solicitações do cliente, realiza replicação para outros nós e monitora a obtenção de consenso na escolha de um nó líder.

Mudanças no banco de dados só podem ser feitas pelo nó selecionado como líder, mas conexões com operações de gravação também podem ser enviadas para outros nós do cluster, que retornarão o endereço do líder para repetir a solicitação (na próxima versão eles promessa de adicionar encaminhamento automático de solicitações ao líder). A ênfase principal está na tolerância a falhas, de modo que o SGBD é dimensionado apenas com operações de leitura, e as operações de gravação são o gargalo. É possível executar um cluster rqlite a partir de um único nó e esta solução pode ser usada para fornecer acesso ao SQLite por HTTP sem fornecer tolerância a falhas.

Os dados SQLite em cada nó não são armazenados em um arquivo, mas na memória. No nível da camada com a implementação do protocolo Raft, é mantido um log de todos os comandos SQLite que levam a alterações no banco de dados. Este log é usado durante a replicação (replicação no nível de reprodução de solicitações em outros nós), ao iniciar um novo nó ou para recuperar-se de uma perda de conectividade. Para reduzir o tamanho do log, utiliza-se o empacotamento automático, que começa após um determinado número de alterações e leva à fixação de um snapshot, em relação ao qual um novo log começa a ser mantido (o estado do banco de dados na memória é idêntico ao instantâneo + o log de alterações acumulado).

Recursos do rqlite:

  • Fácil de implantar um cluster, sem a necessidade de uma instalação separada do SQLite.
  • Capacidade de obter rapidamente armazenamento SQL replicado.
  • Pronto para uso em projetos de produção (grau de produção).
  • A presença de uma API HTTP(S) que permite atualizar dados em modo batch e determinar o nó líder do cluster. Também são fornecidas uma interface de linha de comando e bibliotecas cliente para várias linguagens de programação.
  • Disponibilização de um serviço de identificação de outros nós, permitindo a criação de clusters de forma dinâmica.
  • Suporte para criptografia de troca de dados entre nós.
  • Capacidade de configurar o nível de verificação da relevância e consistência dos dados durante a leitura.
  • Capacidade opcional de conectar nós em modo somente leitura, que não participam na determinação do consenso e são usados ​​para aumentar a escalabilidade do cluster para operações de leitura.
  • Suporte para sua própria forma de transação baseada na combinação de comandos em uma solicitação (transações baseadas em BEGIN, COMMIT, ROLLBACK, SAVEPOINT e RELEASE não são suportadas).
  • Suporte para criação de backups dinâmicos.

Na nova versão:

  • Adicionado suporte para clustering rqlite automático usando um novo serviço de detecção de nó que pode funcionar com base no armazenamento distribuído Consul e etcd. O serviço permite que os nós rqlite se encontrem automaticamente - o administrador só precisa iniciar vários nós em servidores diferentes, especificando o endereço comum do cluster Consul ou etcd (por exemplo, “example.com:8500”), e os nós serão automaticamente combinados em um cluster. O nó líder atualiza periodicamente as informações sobre seu endereço no armazenamento Consul ou etcd, o que permite alterar posteriormente o líder sem a necessidade de reconfigurar outros nós, bem como adicionar novos nós mesmo após a mudança do líder. O serviço legado do modo Discovery em execução no AWS Lambda foi descontinuado.
  • A interface CLI permite especificar vários hosts ao mesmo tempo - se o primeiro nó estiver indisponível, os próximos hosts serão contatados.
  • O código para analisar argumentos de linha de comando rqlited foi reformulado.
  • O pacote protobuf obsoleto foi descontinuado.
  • O armazenamento BoltDB usado na implementação do protocolo Raft foi substituído pelo bbolt, um fork do projeto etcd.

Fonte: opennet.ru

Adicionar um comentário