Lanzamiento de rqlite 7.0, un DBMS tolerante a fallas distribuido basado en SQLite

Se lanzó el DBMS distribuido rqlite 7.0, que utiliza SQLite como motor de almacenamiento y permite organizar el trabajo de un clúster desde almacenes sincronizados entre sí. Una de las características de rqlite es la facilidad de instalación, implementación y mantenimiento de un almacenamiento distribuido tolerante a fallas, algo similar a etcd y Consul, pero utilizando un modelo de datos relacional en lugar de un formato clave/valor. El código del proyecto está escrito en Go y distribuido bajo la licencia MIT.

Para mantener todos los nodos en un estado sincronizado, se utiliza el algoritmo de consenso Raft. Rqlite utiliza la biblioteca SQLite original y el controlador go-sqlite3, sobre el cual se inicia una capa que procesa las solicitudes de los clientes, realiza la replicación a otros nodos y monitorea el logro de un consenso sobre la elección del nodo principal.

Los cambios en la base de datos solo pueden ser realizados por el nodo seleccionado como líder, pero las conexiones con operaciones de escritura también se pueden enviar a otros nodos del clúster, que devolverán la dirección del líder para repetir la solicitud (en la próxima versión promete agregar el reenvío automático de solicitudes al líder). El énfasis principal está en la tolerancia a fallos, por lo que el DBMS escala sólo con operaciones de lectura, y las operaciones de escritura son el cuello de botella. Es posible ejecutar un clúster rqlite desde un solo nodo y esta solución se puede utilizar para proporcionar acceso a SQLite a través de HTTP sin proporcionar tolerancia a fallas.

Los datos de SQLite en cada nodo no se almacenan en un archivo, sino en la memoria. A nivel de capa, con la implementación del protocolo Raft, se mantiene un registro de todos los comandos SQLite que conducen a cambios en la base de datos. Este registro se utiliza durante la replicación (replicación al nivel de reproducción de solicitudes en otros nodos), al iniciar un nuevo nodo o para recuperarse de una pérdida de conectividad. Para reducir el tamaño del registro, se utiliza el empaquetado automático, que comienza después de un número específico de cambios y conduce a la fijación de una instantánea, en relación con la cual comienza a mantenerse un nuevo registro (el estado de la base de datos en la memoria es idéntica a la instantánea + el registro de cambios acumulado).

Características de rqlite:

  • Fácil de implementar un clúster, sin necesidad de una instalación de SQLite por separado.
  • Capacidad de obtener rápidamente almacenamiento SQL replicado.
  • Listo para usar en proyectos de producción (grado de producción).
  • La presencia de una API HTTP(S) que le permite actualizar datos en modo por lotes y determinar el nodo principal del clúster. También se proporcionan una interfaz de línea de comandos y bibliotecas cliente para varios lenguajes de programación.
  • Disponibilidad de un servicio para identificar otros nodos, permitiéndole crear clusters dinámicamente.
  • Soporte para cifrar el intercambio de datos entre nodos.
  • Capacidad para configurar el nivel de verificación de la relevancia y coherencia de los datos durante la lectura.
  • Capacidad opcional para conectar nodos en modo de solo lectura, que no participan en la determinación del consenso y se utilizan para aumentar la escalabilidad del clúster para operaciones de lectura.
  • Soporte para su propia forma de transacciones basadas en la combinación de comandos en una sola solicitud (las transacciones basadas en BEGIN, COMMIT, ROLLBACK, SAVEPOINT y RELEASE no son compatibles).
  • Soporte para la creación de copias de seguridad en caliente.

En el nuevo lanzamiento:

  • Se agregó soporte para la agrupación automática de rqlite utilizando un nuevo servicio de detección de nodos que puede funcionar sobre la base de Consul y el almacenamiento distribuido etcd. El servicio permite que los nodos rqlite se encuentren automáticamente entre sí: el administrador solo necesita iniciar varios nodos en diferentes servidores, especificando la dirección común del clúster Consul o etcd (por ejemplo, "example.com:8500"), y los nodos se buscarán automáticamente. combinados en un grupo. El nodo líder actualiza periódicamente información sobre su dirección en el almacenamiento Consul o etcd, lo que le permite cambiar el líder posteriormente sin la necesidad de reconfigurar otros nodos, así como agregar nuevos nodos incluso después de cambiar el líder. El servicio heredado del modo Discovery que se ejecuta en AWS Lambda ha sido descontinuado.
  • La interfaz CLI permite especificar varios hosts a la vez; si el primer nodo no está disponible, se contactará con los siguientes hosts.
  • Se modificó el código para analizar los argumentos de la línea de comando rqlited.
  • El paquete protobuf obsoleto ha sido descontinuado.
  • El almacenamiento BoltDB utilizado en la implementación del protocolo Raft ha sido reemplazado por bbolt, una bifurcación del proyecto etcd.

Fuente: opennet.ru

Añadir un comentario