Lanzamento de rqlite 7.0, un DBMS distribuído tolerante a fallos baseado en SQLite

Tivo lugar o lanzamento do DBMS distribuído rqlite 7.0, que utiliza SQLite como motor de almacenamento e permite organizar o traballo dun clúster a partir de almacenamentos sincronizados entre si. Unha das características de rqlite é a facilidade de instalación, implantación e mantemento dun almacenamento distribuído tolerante a fallos, algo semellante a etcd e Consul, pero usando un modelo de datos relacionais en lugar dun formato de clave/valor. O código do proxecto está escrito en Go e distribúese baixo a licenza MIT.

Para manter todos os nodos nun estado sincronizado, utilízase o algoritmo de consenso Raft. Rqlite usa a biblioteca SQLite orixinal e o controlador go-sqlite3, enriba dos cales se inicia unha capa que procesa as solicitudes dos clientes, realiza a replicación a outros nodos e supervisa a consecución do consenso sobre a elección dun nodo líder.

Os cambios na base de datos só os pode facer o nodo seleccionado como líder, pero as conexións con operacións de escritura tamén se poden enviar a outros nodos do clúster, que devolverán o enderezo do líder para repetir a solicitude (na seguinte versión promesa de engadir o reenvío automático de solicitudes ao líder). A principal énfase está na tolerancia a fallos, polo que o DBMS só escala con operacións de lectura e as operacións de escritura son o pescozo de botella. É posible executar un clúster rqlite desde un só nodo e esta solución pódese usar para proporcionar acceso a SQLite a través de HTTP sen proporcionar tolerancia a fallos.

Os datos de SQLite en cada nodo non se almacenan nun ficheiro, senón na memoria. A nivel de capa coa implementación do protocolo Raft, gárdase un rexistro de todos os comandos de SQLite que levan a cambios na base de datos. Este rexistro utilízase durante a replicación (replicación a nivel de reprodución de solicitudes noutros nodos), ao iniciar un novo nodo ou para recuperarse dunha perda de conectividade. Para reducir o tamaño do rexistro, utilízase o empaquetado automático, que comeza despois dun número especificado de cambios e leva á fixación dunha instantánea, en relación coa que se comeza a manter un novo rexistro (o estado da base de datos na memoria é idéntica á instantánea + o rexistro de cambios acumulado).

Características de rqlite:

  • Fácil de implantar un clúster, sen necesidade dunha instalación separada de SQLite.
  • Capacidade de obter rapidamente almacenamento SQL replicado.
  • Preparado para o seu uso en proxectos de produción (nivel de produción).
  • A presenza dunha API HTTP(S) que lle permite actualizar os datos en modo por lotes e determinar o nodo principal do clúster. Tamén se proporciona unha interface de liña de comandos e bibliotecas de clientes para varias linguaxes de programación.
  • Dispoñibilidade dun servizo para identificar outros nodos, que permite crear clusters de forma dinámica.
  • Soporte para cifrar o intercambio de datos entre nodos.
  • Capacidade de configurar o nivel de comprobación da relevancia e coherencia dos datos ao ler.
  • Capacidade opcional para conectar os nós en modo de só lectura, que non participan na determinación do consenso e úsanse para aumentar a escalabilidade do clúster para as operacións de lectura.
  • Compatibilidade coa túa propia forma de transaccións baseada na combinación de comandos nunha única solicitude (non se admiten transaccións baseadas en BEGIN, COMMIT, ROLLBACK, SAVEPOINT e RELEASE).
  • Soporte para a creación de copias de seguridade en quente.

Na nova versión:

  • Engadiuse soporte para a agrupación automática de rqlite mediante un novo servizo de detección de nodos que pode funcionar en base ao almacenamento distribuído Consul e etcd. O servizo permite que os nodos rqlite se atopen automaticamente: o administrador só ten que lanzar varios nodos en diferentes servidores, especificando o enderezo común do clúster Consul ou etcd (por exemplo, "example.com:8500"), e os nodos serán automaticamente combinados nun clúster. O nodo líder actualiza periodicamente a información sobre o seu enderezo no almacenamento Consul ou etcd, o que lle permite cambiar posteriormente o líder sen necesidade de reconfigurar outros nodos, así como engadir novos nodos mesmo despois de cambiar o líder. O servizo de modo Discovery heredado que se executaba en AWS Lambda descontinuouse.
  • A interface CLI permite especificar varios hosts á vez; se o primeiro nodo non está dispoñible, contactarase cos seguintes hosts.
  • Reelaborouse o código para analizar os argumentos da liña de comandos rqlited.
  • O paquete protobuf obsoleto foi descontinuado.
  • O almacenamento BoltDB utilizado na implementación do protocolo Raft foi substituído por bbolt, un fork do proxecto etcd.

Fonte: opennet.ru

Engadir un comentario