Sat. Oct 1st, 2022

Durante la última década, Redis se ha convertido en un caché en memoria popular y ampliamente utilizado. A diferencia de la mayoría de los cachés distribuidos, ofrece un atractivo conjunto de estructuras de datos integradas que mejoran sus capacidades más allá del simple almacenamiento de objetos serializados. Creado en 2009 como una tienda de un solo servidor para ayudar en el diseño de un servidor web, Redis brinda a las aplicaciones numerosas opciones útiles para organizar y recuperar datos almacenados, incluidos conjuntos, listas, hashes y conjuntos ordenados. Unos años más tarde, agregó soporte de clúster para escalar el rendimiento y agregar replicación de datos para alta disponibilidad. Sin embargo, la implementación del clúster de Redis introdujo conceptos especializados, como hashslots y fragmentos maestros/réplicas, que los administradores del sistema deben comprender y administrar. Junto con el uso de Redis de consistencia eventual en lugar de total, estos conceptos han creado una complejidad que hace que la administración de clústeres sea más desafiante al mismo tiempo que reduce la flexibilidad y la confiabilidad. Por el contrario, ScaleOut StateServer®, una memoria caché distribuida centrada en la empresa para objetos serializados que se lanzó por primera vez en 2005, se diseñó desde cero para ejecutarse en un clúster de servidores con los objetivos de diseño específicos de alto rendimiento y almacenamiento de datos confiable al tiempo que maximiza la facilidad de uso. . Automatiza el equilibrio de carga, la replicación y la recuperación de datos y almacena datos con total coherencia (es decir, coherencia secuencial) entre réplicas. También ejecuta las solicitudes de los clientes utilizando todos los núcleos de procesamiento disponibles para obtener el máximo rendimiento. Estas características simplifican drásticamente la administración de clústeres, mejoran la flexibilidad y reducen el costo total de propiedad, especialmente para los usuarios empresariales. Por ejemplo, a diferencia de Redis, los clústeres de servidores ScaleOut pueden crecer sin problemas de un solo servidor a varios servidores, y los administradores del sistema no necesitan administrar hashslots o fragmentos primarios/réplicas.

El desafío: integrar el procesamiento de comandos de Redis en una nueva arquitectura de clústeres

ScaleOut Software reconoció que la ejecución de comandos de Redis en un clúster de ScaleOut StateServer ofrecería a los usuarios de Redis lo mejor de ambos mundos: estructuras de datos ricas y familiares combinadas con una administración de clústeres significativamente más simple y consistencia total de datos. Sin embargo, la implementación ideal necesitaría usar el código de código abierto de Redis real para ejecutar los comandos de Redis, de modo que los comandos del cliente se comporten de manera idéntica a los clústeres de Redis de código abierto. Entonces, el desafío consistía en integrar el código de Redis en la plataforma de ejecución de ScaleOut StateServer y aprovechar sus características de agrupación en clústeres altamente automatizadas mientras se eliminaban las restricciones de subproceso único de la arquitectura de bucle de eventos de Redis. La empresa logró recientemente esta integración y, en ScaleOut StateServer versión 5.11, lanzó una versión preliminar de la comunidad que presenta soporte para las estructuras de datos de Redis más populares (cadenas, conjuntos, listas, hash y conjuntos ordenados), además de comandos de publicación/suscripción, transacciones y varios comandos de utilidades (como FLUSHDB y EXPIRE) tanto en Windows como en Linux. Utiliza el código de fuente abierta Redis versión 6.2.5 dentro de los servidores para procesar los comandos de Redis.

Operaciones de clúster automatizadas, rendimiento escalable y consistencia total de datos

Con esta integración, los clientes de Redis pueden conectarse a un clúster ScaleOut StateServer de uno o más servidores mediante el protocolo Redis RESP estándar. Las bibliotecas cliente de Redis obtienen la asignación de hashslots a los servidores llamando internamente a los comandos CLUSTER SLOTS o CLUSTER NODES y luego dirigiendo las solicitudes de acceso de Redis al servidor de ScaleOut adecuado. Cuando cambia la membresía del clúster, los clientes de Redis usan automáticamente el protocolo RESP para redirigir los comandos a los servidores correctos. Para maximizar el rendimiento, cada servidor de ScaleOut procesa los comandos de Redis entrantes en varios subprocesos utilizando todos los núcleos de procesador disponibles. No es necesario implementar varios fragmentos en cada servidor para escalar el rendimiento o proporcionar replicación de datos; estas funciones se implementan dentro de un proceso en cada servidor. A medida que crece la necesidad de un rendimiento adicional, los administradores de sistemas simplemente pueden unir nuevos servidores al clúster. ScaleOut StateServer reequilibra automáticamente los hashslots en el clúster a medida que se agregan o eliminan servidores. También retrasa la ejecución de los comandos de Redis durante el equilibrio de carga (y la recuperación) para mantener una imagen coherente de la ubicación de hashslot y evitar excepciones de clientes. Después de que un hashslot haya migrado completamente a un servidor remoto, las solicitudes de los clientes devuelven una indicación -MOVED para que puedan ser redirigidos al nuevo servidor. Además, ScaleOut StateServer crea automáticamente réplicas para todos los hashslots. No es necesario crear manualmente fragmentos primarios y réplicas ni moverlos de un servidor a otro durante los cambios de membresía y la recuperación. ScaleOut StateServer coloca automáticamente hashslots de réplica en diferentes servidores desde sus hashslots primarios correspondientes y los migra según sea necesario durante los cambios de membresía para garantizar un equilibrio de carga óptimo. Si un servidor falla o se interrumpe la red, ScaleOut StateServer se “autorrepara” promoviendo réplicas a primarias y creando nuevas réplicas según sea necesario. Redis usa un modelo de coherencia eventual para actualizar las réplicas. Aunque este modelo es rápido, es susceptible de entregar datos obsoletos a los clientes si falla un servidor o se produce una interrupción de la red. Para evitar este problema, ScaleOut StateServer implementa actualizaciones completamente coherentes para los objetos almacenados mediante un algoritmo de quórum patentado. Cuando un servidor recibe un comando de Redis, completa la ejecución del comando en un quórum que contiene el hashslot principal y sus réplicas antes de regresar al cliente. Las transacciones se procesan de la misma manera.

Resumiendo: Nuevas capacidades para los usuarios de Redis

La innovadora integración de ScaleOut Software del código fuente abierto de Redis en su arquitectura de clúster traerá nuevas y poderosas capacidades a los usuarios de Redis al tiempo que garantiza el comportamiento nativo de Redis para las aplicaciones cliente. Los usuarios empresariales ahora tienen una forma más sencilla de administrar los clústeres de Redis con la administración de clústeres automatizada y el escalado de rendimiento integrado, y se benefician de las actualizaciones totalmente coherentes de los datos almacenados realizadas por los comandos de Redis. También pueden obtener acceso a las API nativas de ScaleOut StateServer, que incorporan características avanzadas que no están disponibles en los clústeres Redis de código abierto, incluida la computación paralela de datos, el análisis de transmisión y la replicación de datos de área amplia coherente. Nota del editor: este artículo está asociado con ScaleOut Software. Etiquetas: redis, servidor de estado escalable