Dragonfly, un sistema de almacenamiento en caché de datos en RAM
Hace pocos días se dio a conocer el lanzamiento del sistema de almacenamiento de datos y caché en memoria Dragonfly, que manipula datos en el formato clave/valor y se puede utilizar como una solución ligera para acelerar sitios de alta carga, almacenando en caché consultas lentas al DBMS y datos intermedios en RAM.
Dragonfly es compatible con los protocolos Memcached y Redis, lo que le permite usar bibliotecas de clientes existentes y transferir proyectos usando Memcached y Redis a Dragonfly sin tener que volver a trabajar en el código.
Cabe mencionar que Dragonfly recientemente recibió una actualización, llegando este a su versión 1.0 y en la cual se destaca por la implementación de soporte para la replicación de datos desde el servidor primario al secundario.
Al mismo tiempo, Dragonfly se puede configurar para usarse como almacenamiento secundario que acepta datos del servidor principal basado en Dragonfly y Redis. La API de administración de replicaciones es compatible con Redis y se basa en el uso de los comandos ROLE y REPLICAOF (SLAVEOF).
Sobre Dragonfly
El alto rendimiento se logra gracias a una arquitectura de subprocesos múltiples sin compartir recursos (shared-nothing), lo que implica que se adjunta un controlador separado a cada subproceso con su propia porción de datos, que funciona sin mutexes ni spin-locks.
Los candados VLL ligeros se utilizan para garantizar la atomicidad cuando se trata de varias llaves, ya que para almacenar la información de manera eficiente en la memoria, se utiliza la estructura dashtable, que implementa una especie de tablas hash particionadas.
En comparación con Redis, Dragonfly presume de un aumento de rendimiento de 25 veces (3,8 millones de solicitudes por segundo) bajo cargas de trabajo típicas en un entorno Amazon EC2 c6gn.16xlarge. En comparación con Memcached en un entorno de AWS c6gn.16xlarge, Dragonfly pudo completar 4,7 veces más solicitudes de escritura por segundo (3,8 millones frente a 806k) y 1,77 veces más solicitudes de lectura por segundo (3,7 millones frente a 2,1 millones).
En las pruebas de almacenamiento de 5 GB, Dragonfly requirió un 30 % menos de memoria que Redis. Durante la creación de instantáneas mediante el comando «bgsave», el consumo de memoria aumenta, pero en los momentos pico se mantuvo casi tres veces menos que en Redis, y la operación de escritura de la instantánea en sí es mucho más rápida (en la prueba, se escribió una instantánea en Dragonfly en 30 segundos, y Redis – en 42 segundos).
Algunas características de Dragonfly son:
- Un modo de almacenamiento en caché que reemplaza automáticamente los datos antiguos con datos nuevos una vez que se agota la memoria libre.
- Compatibilidad con ciclos de vida de vinculación de datos durante los cuales los datos se consideran actualizados.
- Soporte para vaciar el estado de almacenamiento en el disco en segundo plano para una recuperación posterior después de un reinicio.
- La presencia de una consola HTTP (se une al puerto TCP 6379) para la gestión del sistema y una API para devolver métricas, compatible con Prometheus.
- Compatibilidad con 185 comandos de Redis, aproximadamente equivalente a la funcionalidad de la versión Redis 5.
- Compatibilidad con todos los comandos de Memcached excepto CAS (verificar y configurar).
- Compatibilidad con operaciones asincrónicas para crear instantáneas.
- Consumo de memoria predecible.
- Intérprete Lua integrado 5.4.
- Compatibilidad con tipos de datos complejos como hashes, conjuntos, listas (ZSET, HSET, LIST, SETS y STRING) y datos JSON.
- Soporte de replicación de almacenamiento para conmutación por error y equilibrio de carga.
Para los interesados en el código de Dragonfly, deben saber que este está escrito en C/C++ y se distribuye bajo la licencia BSL .La esencia de BSL es que el código de funcionalidad extendida inicialmente está disponible para modificación, pero durante algún tiempo se puede usar de forma gratuita solo sujeto a condiciones adicionales, que requieren la compra de una licencia comercial para eludir.
Los términos de licencia adicionales del proyecto Dragonfly exigen que el código se migre a la licencia Apache 2.0 el 15 de marzo de 2028. Hasta ese momento, la licencia permite el uso del código solo para garantizar el funcionamiento de sus servicios y productos, pero prohíbe el uso para crear servicios en la nube pagos que actúen como un complemento de Dragonfly.
Finalmente si estás interesado en poder conocer un poco más al respecto, puedes consultar los detalles en el siguiente enlace.