A Canonical lançamento significativo do projeto (SQLite Distribuído), desenvolvendo um mecanismo SQL incorporado compatível com SQLite, que suporta replicação de dados, recuperação automática de falhas e garantia de alta disponibilidade através da distribuição de processadores em vários nós. O SGBD é implementado na forma de uma biblioteca em C vinculada a aplicativos e sob a licença Apache 2.0 (o SQLite original é disponibilizado como domínio público). Há bindings disponíveis para a linguagem .
A biblioteca é uma extensão da base de código existente do SQLite, que adiciona suporte ao protocolo de rede para interligar várias instâncias de aplicativos executadas em diferentes hosts. Um aplicativo compilado com Dqlite pode funcionar como um cluster auto-suficiente e tolerante a falhas, sem depender de SGBDs externos. Na prática, a Dqlite é usada pela empresa Canonical no sistema de gerenciamento de contêineres . Áreas de aplicação da biblioteca também incluem a criação de dispositivos de internet das coisas tolerantes a falhas e processadores em sistemas
.
Para garantir a consistência durante a replicação de dados, utiliza-se um método de alcance de consenso baseado no algoritmo , que é usado em projetos como etcd, RethinkDB, CockroachDB e OpenDaylight. Na Dqlite, uma implementação assíncrona própria do , escrita em C, é aplicada. Para multiplexação do tratamento de conexões e organização do lançamento de corrotinas, são utilizadas bibliotecas prontas e .
Comparado com um projeto semelhante , a Dqlite oferece suporte total a transações, pode se conectar a qualquer projeto escrito em C, permite o uso da função time() e aplica replicação baseada em quadros em vez de replicação baseada na retransmissão de expressões SQL.
Características da Dqlite:
- Execução de todas as operações de disco e rede de forma assíncrona;
- Disponibilidade de um conjunto de testes para confirmar a correção dos dados;
- Baixo consumo de memória e troca de dados eficaz pela rede;
- Armazenamento persistente no disco do banco de dados e do log de transações (com possibilidade de cache na memória);
- Rápida recuperação após falhas;
- Cliente CLI estável escrito em Go, que pode ser usado para inicializar o banco de dados, configurar replicação e conectar/desconectar nós;
- Suporte para arquiteturas ARM, X86, POWER e IBM Z;
- A implementação do algoritmo Raft é otimizada para minimizar latências na confirmação de transações.
Fonte: opennet.ru
