Se ha lanzado la base de datos distribuida rqlite 7.0, que utiliza SQLite como motor de almacenamiento y permite organizar el funcionamiento de un clúster de almacenes sincronizados entre sí. Entre las características de rqlite se destaca la simplicidad de instalación, despliegue y mantenimiento de un almacén distribuido y tolerante a fallos, similar a etcd y Consul, pero utilizando un modelo relacional de trabajo con datos en lugar de un formato clave/valor. El código del proyecto está escrito en Go y se distribuye bajo la licencia MIT.
Para mantener todos los nodos en estado sincronizado se utiliza el algoritmo de consenso Raft. Rqlite hace uso de la biblioteca original SQLite y del controlador go-sqlite3, sobre los cuales se ejecuta una capa que gestiona las solicitudes de los clientes, realiza la replicación en otros nodos y rastrea el consenso sobre la elección del nodo líder.
Los cambios en la base de datos solo pueden ser realizados por el nodo que ha sido elegido como líder, pero las conexiones con operaciones de escritura pueden ser dirigidas 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 se promete añadir el reenvío automático hacia el líder). Se pone un fuerte énfasis en la tolerancia a fallos, por lo que la base de datos se escala solo en operaciones de lectura, siendo las operaciones de escritura el cuello de botella. Es posible operar un clúster de rqlite desde un solo nodo, lo que puede utilizarse para organizar el acceso a SQLite a través de HTTP sin proporcionar tolerancia a fallos.
Los datos de SQLite en cada nodo se almacenan no en un archivo, sino en memoria. A nivel de la capa de implementación del protocolo Raft, se lleva un diario de todos los comandos de SQLite que provocan cambios en la base de datos. Este diario se utiliza en la replicación (replicación a nivel de reproducción de solicitudes en otros nodos), al iniciar un nuevo nodo o para la recuperación tras la pérdida de conectividad. Para reducir el tamaño del diario se aplica un empaquetamiento automático, que se inicia después de un número determinado de cambios y conduce a la creación de una instantánea, respecto a la cual comienza a llevarse un nuevo diario (el estado de la base en memoria es idéntico a la instantánea + el diario acumulado de cambios).
Características de rqlite:
- Facilidad de implementación de un clúster sin necesidad de una instalación separada de SQLite.
- Posibilidad de obtener rápidamente un almacenamiento SQL replicado.
- Listo para su uso en proyectos de trabajo (calidad de producción).
- Disponibilidad de una API HTTP(S) que permite actualizar datos en modo por lotes y determinar el nodo líder del clúster. También se proporciona una interfaz de línea de comandos y bibliotecas cliente para varios lenguajes de programación.
- Disponibilidad de un servicio para detectar otros nodos, lo que permite crear clústeres de manera dinámica.
- Soporte para la encriptación de datos entre nodos.
- Posibilidad de configurar el nivel de verificación de frescura y consistencia de los datos al leer.
- Opción de 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 en operaciones de lectura.
- Soporte para una forma propia de transacciones basada en la agrupación de comandos en una sola solicitud (no se admite las transacciones basadas en BEGIN, COMMIT, ROLLBACK, SAVEPOINT y RELEASE).
- Soporte para la creación de copias de seguridad en caliente.
En esta nueva versión:
- Se ha añadido soporte para el clustering automático de rqlite utilizando un nuevo servicio de detección de nodos que puede operar en almacenes distribuidos como Consul y etcd. Este servicio permite a los nodos rqlite encontrarse automáticamente; el administrador solo necesita iniciar varios nodos en diferentes como en entornos de nube públicos o privados., especificando una dirección común para el clúster de Consul o etcd (por ejemplo, "example.com:8500"), y los nodos se unirán automáticamente en un clúster. El nodo líder actualiza periódicamente en el almacén de Consul o etcd la información sobre su dirección, lo que permite cambiar el líder sin necesidad de reconfigurar los demás nodos, así como agregar nuevos nodos incluso después de cambiar el líder. Se ha descontinuado el soporte para el antiguo servicio de detección de nodos (modo de descubrimiento) basado en AWS Lambda.
- En la interfaz CLI se permite especificar varios hosts a la vez; si el primer nodo no está disponible, se acudirá a los siguientes hosts.
- Se ha reescrito el código para analizar los argumentos de la línea de comandos de rqlited.
- Se ha descontinuado el uso del paquete obsoleto protobuf.
- El almacenamiento BoltDB, utilizado en la implementación del protocolo Raft, ha sido sustituido por bbolt, un fork del proyecto etcd.
Fuente: opennet.ru
