Una capa de almacenamiento en caché rápida, altamente disponible, resistente y escalable que se extiende a través de las nubes
El almacenamiento en caché mejora el tiempo de respuesta de las aplicaciones porque guarda copias de los datos más utilizados en un almacenamiento efímero pero muy rápido. Si quieres lograr estos objetivos, te aconsejamos las soluciones de caché en memoria, que mantienen el conjunto de trabajo en la veloz DRAM en lugar de los lentos discos giratorios. Son extremadamente eficaces para lograrlos. El almacenamiento en caché se utiliza habitualmente para mejorar la latencia de las aplicaciones, pero una caché altamente disponible y resistente también puede ayudar a las aplicaciones a escalar. A través de la descarga de responsabilidades de la lógica principal de la aplicación a la capa de almacenamiento en caché liberamos recursos informáticos para procesar más solicitudes entrantes. Sigue leyendo para descubrir unos casos prácticos.
Como bien sabes, la mayoría de las bases de datos tradicionales están diseñadas para ofrecer una funcionalidad robusta más que velocidad a escala. A menudo, la caché de la base de datos se utiliza para almacenar copias de las tablas de búsqueda y las respuestas a las costosas consultas del DBMS, con el fin de mejorar el rendimiento de la aplicación y reducir la carga de la fuente de datos.
Una parte integral de la creación de aplicaciones escalables y con capacidad de respuesta es el almacenamiento en caché de los datos de la sesión del usuario. Dado que cada interacción del usuario requiere el acceso a los datos de la sesión, mantener esos datos en la caché acelera el tiempo de respuesta al usuario de la aplicación. La retención de los datos de la sesión en la caché es mejor que mantener las sesiones fijas en el nivel del equilibrador de carga, porque el almacenamiento en caché permite que las solicitudes sean procesadas por cualquier servidor de aplicaciones sin perder los estados de los usuarios. El enfoque del equilibrador de carga, en cambio, obliga a que todas las solicitudes de una sesión sean procesadas por un único servidor de aplicaciones.
Las aplicaciones modernas se construyen con componentes poco acoplados que se comunican a través de diferentes API. Los componentes de la aplicación utilizan las API para realizar peticiones de servicio a otros componentes, tanto dentro (arquitectura de microservicios) como fuera (en un caso de uso de software como servicio) de la propia aplicación. Sabemos que almacenar la respuesta de la API en la caché, aunque sea brevemente, mejora el rendimiento de la aplicación al evitar esta comunicación entre procesos.
El primer requisito que debe cumplir una capa de almacenamiento en caché es un alto rendimiento bajo cualquier carga. Las investigaciones indican que para que los usuarios perciban que una experiencia es «instantánea», el tiempo de respuesta de extremo a extremo debe estar dentro de los 100 milisegundos. En pocas palabras, una capa de almacenamiento en caché de alto rendimiento debe proporcionar constantemente un alto rendimiento con baja latencia si no queremos que sea un cuello de botella de rendimiento.
El día de San Valentín, el Black Friday, las catástrofes naturales o las pandemias soneventos de aumentos repentinos y una capa de almacenamiento en caché de alto rendimiento debe ser capaz de escalar y satisfacer la demanda derivada del crecimiento del negocio. La escalabilidad debe lograrse de forma dinámica sin provocar tiempos de inactividad o migraciones fuera de línea, sin aumentar el tiempo de respuesta.
Cada vez son más las organizaciones que adoptan estrategias de multi-nube, para evitar el bloqueo del proveedor o para aprovechar las mejores herramientas de una variedad de proveedores de nube. Ahora bien, es mucho más difícil gestionar un sistema de almacenamiento en caché distribuido geográficamente que garantice una latencia de menos de un milisegundo y, al mismo tiempo, resuelva los conflictos de los conjuntos de datos en varias nubes.
Esta es la forma más común de utilizar Redis como caché. En nuestra estrategia, la aplicación busca primero en la caché para recuperar los datos. Si no se encuentran los datos (falta de caché), entonces la aplicación recupera los datos del almacén de datos operativos directamente. Los datos se cargan en la caché solamente cuando es necesario (por eso al método también se le conoce como carga lenta). Las aplicaciones de lectura intensiva pueden beneficiarse en gran medida de la implementación de un enfoque de caché.
Así, los datos se escriben primero en la caché (por ejemplo, en Redis) y luego se actualizan de forma asíncrona en el almacén de datos operativo. Esto nos permite mejorar el rendimiento de la escritura y facilita el desarrollo de aplicaciones, ya que el desarrollador escribe en un solo lugar (Redis). Tenemos una buena noticia: RedisGears proporciona tanto capacidades de escritura directa como de escritura indirecta.
Échale un vistazo a la demo de GitHubEsta estrategia es similar al enfoque de escritura posterior, ya que Se trata de una estrategia similar a la escritura posterior, donde la caché se sitúa entre la aplicación y el almacén de datos operativo, pero las actualizaciones se realizan de forma sincrónica. Este modelo de escritura favorece la consistencia de los datos entre la caché y el almacén de datos, a medida que la escritura se realiza en el hilo principal del servidor. Tenemos una buena noticia: RedisGears proporciona tanto capacidades de escritura directa como de escritura indirecta.
Échale un vistazo a la demo de GitHubSi disponemos de una gran cantidad de datos históricos (por ejemplo, un mainframe) o tenemos el requisito de que cada escritura se registre en un almacén de datos operativo, los conectores de captura de datos de cambio (CDC) de Redis Enterprise pueden capturar los cambios de datos individuales y propagar copias exactas sin interrumpir las operaciones en curso con una coherencia casi en tiempo real. CDC, junto con la capacidad de Redis Enterprise de utilizar múltiples modelos de datos, puede ofrecerte una valiosa visión de los datos que antes estaban bloqueados.
Múltiples capacidades del modelo de datos en RedisEl rendimiento de las aplicaciones depende de la capa de caché. Incluso un segundo de inactividad puede tener un efecto extremo en el rendimiento y en la capacidad de cumplir tu SLA, dado que tu caché puede llegar a realizar millones de operaciones por segundo. Los factores clave, para garantizar una capa de almacenamiento en caché de alta disponibilidad y ofrecer una experiencia de usuario consistente, son las copias de seguridad automáticas de Redis Enterprise, la detección instantánea de fallos, la recuperación rápida entre racks/zonas/regiones y las múltiples opciones de persistencia de datos.
Es sabido que una capa de almacenamiento en caché de aplicaciones de alto rendimiento debe escalarse fácil e instantáneamente para satisfacer los requisitos de crecimiento y los picos de demanda. El alto rendimiento de Redis Enterprise con una latencia de menos de un milisegundo, la verdadera arquitectura «shared-nothing» que permite el escalado lineal, la compatibilidad con múltiples usuarios y la arquitectura multinúcleo te garantizan la plena utilización de los recursos informáticos y un rendimiento superior.
La capa de almacenamiento en caché debe ofrecer alta disponibilidad y baja latencia en todas las geografías sea el entorno de despliegue que sea. Además, la tecnología Activo a Activo de Redis Enterprise, basada en CRDTs, proporciona latencia local para las operaciones de lLa tecnología Activo a Activo de Redis Enterprise, basada en CRDTs, proporciona latencia local para tus operaciones de lectura y escritura, resolución de conflictos sin problemas para tipos de datos simples y complejos, y garantiza la continuidad del negocio incluso cuando un gran número de réplicas no funcionan. Los resultados: disminución de las molestias de desarrollo y de la carga operativa.
Hay muchas soluciones disponibles que se basan en tecnologías de nicho o se construyen para casos de uso específicos y no se adoptan ampliamente. No es el caso del código abierto de Redis que es compatible con más de 50 lenguajes de programación, más de 150 bibliotecas de clientes y la capa de almacenamiento en caché por defecto en la mayoría de los entornos de implementación. Somos la base de datos más valorada por cuarto año consecutivo y en Redis se encuentra el código abierto de Redis que aporta capacidades de grado empresarial a tu capa de almacenamiento en caché.
No queremos que añadas carga operativa a tu equipo, por eso, el desarrollo de una capa de almacenamiento en caché debe ser fácil y rápido. Redis Enterprise puede desplegarse como un servicio totalmente gestionado en nubes públicas, liberándote de tareas de aprovisionamiento, aplicación de parches, supervisión y otras tareas de gestión. Y si quieres tener el control total de la gestión y la configuración, también puede desplegarse como un software en su propia infraestructura. Por eso, se admite el modelo híbrido para preservar la flexibilidad operativa.
Redis está diseñado en torno al concepto de estructuras de datos y puede almacenar su conjunto de datos a través de Strings, Hashes, Sorted Sets, Sets, Lists, Streams, y otras estructuras de datos o módulos de Redis.
Al utilizar Node.js, puedes recuperar y guardar pares clave-valor con cadenas simples a través de los comandos GET y SET del objeto cliente, mira abajo cómo hacerlo:
// conectar el cliente de redis a la instancia local. const client = redis.createClient(6379) // Recuperar un valor de cadena de Redis si ya existe para esta clave return client.get(‘myStringKey’, (err, valor) => { si (valor) { console.log(‘El valor asociado a esta clave es: ‘ + valor) } si no{ //clave no encontrada // Almacenamiento de una cadena simple en el almacén Redis client.set(‘myStringKey’, ‘Redis Enterprise Tutorial’); } } });Con este fragmento puedes intentar recuperar el valor de la cadena asociada a la clave myStringKey mediante el comando GET. Si no se encuentras la clave, el comando SET almacena el valor de Redis Enterprise Tutorial para myStringKey.
El mismo código se puede escribir en Python, aquí lo tienes:
# conectar el cliente de redis a la instancia local. r = redis.Redis(host=’localhost’, port=6379, db=0) # Recuperar un valor de cadena de Redis si ya existe para esta clave valor = r.get(‘myStringKey’) si valor == Ninguno: # clave no encontrada # Almacenamiento de una cadena simple en el almacén Redis r.set(‘myStringKey’, ‘Redis Enterprise Tutorial’) si no: print ‘El valor asociado a esta clave es: ‘, valor