paint-brush
Cómo mejorar la experiencia del usuario y reducir costos: aquí le explicamos por qué debería utilizar el almacenamiento en cachépor@brilianfird
790 lecturas
790 lecturas

Cómo mejorar la experiencia del usuario y reducir costos: aquí le explicamos por qué debería utilizar el almacenamiento en caché

por Brilian Firdaus8m2024/05/10
Read on Terminal Reader

Demasiado Largo; Para Leer

Hoy nos sumergimos en el mundo del almacenamiento en caché. El almacenamiento en caché es un arma secreta para crear sistemas escalables y de alto rendimiento. Hay muchos tipos de almacenamiento en caché, pero en este artículo nos centraremos en el almacenamiento en caché de objetos de backend (almacenamiento en caché de backend). Dominarlo le ayudará a crear software confiable y de alto rendimiento.
featured image - Cómo mejorar la experiencia del usuario y reducir costos: aquí le explicamos por qué debería utilizar el almacenamiento en caché
Brilian Firdaus HackerNoon profile picture
0-item

Hoy nos sumergimos en el mundo del almacenamiento en caché. El almacenamiento en caché es un arma secreta para crear sistemas escalables y de alto rendimiento. Hay muchos tipos de almacenamiento en caché, pero en este artículo nos centraremos en el almacenamiento en caché de objetos de backend (almacenamiento en caché de backend). Dominarlo le ayudará a crear software confiable y de alto rendimiento.


En este artículo, exploraremos:

  1. ¿Qué es el almacenamiento en caché? Exploraremos el almacenamiento en caché y explicaremos cómo almacena datos temporalmente para un acceso más rápido.


  2. Beneficios del almacenamiento en caché : descubra cómo el almacenamiento en caché aumenta la velocidad, reduce la carga del servidor, mejora la experiencia del usuario e incluso puede reducir costos.


  3. Patrón de almacenamiento en caché : en esta sección, analizaremos diferentes formas de utilizar el caché. Recuerde, cada enfoque tiene ventajas y desventajas, ¡así que asegúrese de elegir el patrón adecuado para sus necesidades!


  4. Mejores prácticas de almacenamiento en caché : ahora ya sabe cómo almacenar y recuperar datos almacenados en caché. Pero, ¿cómo puede asegurarse de que sus datos almacenados en caché se mantengan actualizados? ¿Y qué pasa cuando el caché alcanza su capacidad?


  5. Cuándo no almacenar en caché : si bien el almacenamiento en caché ofrece muchos beneficios, hay ocasiones en las que es mejor evitarlo. Implementar el almacenamiento en caché en el sistema incorrecto puede aumentar la complejidad y potencialmente incluso ralentizar el rendimiento.

¿Qué es el almacenamiento en caché?

Crear una aplicación escalable y de alto rendimiento consiste en eliminar los cuellos de botella y hacer que el sistema sea más eficiente. Las bases de datos a menudo obstaculizan el rendimiento del sistema debido a sus requisitos de almacenamiento y procesamiento. Esto los convierte en un componente costoso porque es necesario ampliarlos con frecuencia.


Afortunadamente, existe un componente que puede ayudar a descargar el uso de recursos de la base de datos y al mismo tiempo mejorar la velocidad de recuperación de datos: ese componente se llama caché .


La caché es un almacenamiento temporal diseñado para escribir y leer datos rápidamente. Utiliza almacenamiento de memoria de baja latencia y estructuras de datos optimizadas para operaciones rápidas. Probablemente ya hayas usado Redis o Memcached, o al menos hayas escuchado sus nombres. Estos son dos de los sistemas de almacenamiento en caché distribuido más populares para servicios backend. Redis puede incluso actuar como base de datos principal, ¡pero ese es un tema para otro artículo!

Beneficios del almacenamiento en caché

El principal beneficio del almacenamiento en caché es su velocidad. Leer datos de un caché es significativamente más rápido que recuperarlos de una base de datos (como SQL o Mongo). Esta velocidad proviene de cachés que utilizan estructuras de datos de diccionario (o HashMap) para operaciones rápidas y almacenan datos en memoria de alta velocidad en lugar de en disco.


En segundo lugar, el almacenamiento en caché reduce la carga de su base de datos. Esto permite que las aplicaciones obtengan los datos que necesitan del caché en lugar de acceder constantemente a la base de datos. Esto reduce drásticamente el uso de recursos de hardware; en lugar de buscar datos en el disco, su sistema simplemente accede a ellos desde la memoria rápida.


Estos beneficios mejoran directamente la experiencia del usuario y pueden generar ahorros de costos. Su aplicación responde mucho más rápido, creando una experiencia más fluida y satisfactoria para los usuarios.


El almacenamiento en caché reduce los costos de infraestructura. Si bien un sistema distribuido como Redis requiere sus propios recursos, los ahorros generales suelen ser significativos. Su aplicación accede a los datos de manera más eficiente, lo que potencialmente le permite reducir la escala de su base de datos. Sin embargo, esto conlleva una compensación: si su sistema de caché falla, asegúrese de que su base de datos esté preparada para manejar el aumento de carga.

Patrones de caché

Ahora que comprende el poder del almacenamiento en caché, ¡profundicemos en las mejores formas de usarlo! En esta sección, exploraremos dos categorías esenciales de patrones: patrones de escritura en caché y patrones de falta de caché . Estos patrones proporcionan estrategias para administrar las actualizaciones de la caché y manejar situaciones en las que los datos que necesita aún no están en la caché.

Patrones de escritura

Los patrones de escritura dictan cómo interactúa su aplicación tanto con el caché como con su base de datos. Veamos tres estrategias comunes: reescritura , escritura directa y escritura recíproca . Cada uno ofrece ventajas y compensaciones únicas:

Respóndeme


Patrón de caché de reescritura

Cómo funciona:

  • Su aplicación interactúa sólo con el caché.
  • El caché confirma la escritura al instante.
  • Luego, un proceso en segundo plano copia los datos recién escritos en la base de datos.


Ideal para: aplicaciones con mucha escritura donde la velocidad es crítica y algunas inconsistencias son aceptables por el bien del rendimiento. Los ejemplos incluyen aplicaciones de métricas y análisis.


Ventajas:

  • Lecturas más rápidas: los datos siempre están en la memoria caché para un acceso rápido, evitando por completo la base de datos.
  • Escrituras más rápidas: su aplicación no espera escrituras en la base de datos, lo que genera tiempos de respuesta más rápidos.
  • Menos tensión en la base de datos: las escrituras por lotes reducen la carga de la base de datos y pueden extender potencialmente la vida útil del hardware de su base de datos.


Desventajas:

  • Riesgo de pérdida de datos: si la caché falla antes de guardar los datos en la base de datos, se puede perder información. Redis mitiga este riesgo con almacenamiento persistente, pero esto agrega complejidad.


  • Mayor complejidad: necesitará un middleware para garantizar que la caché y la base de datos finalmente permanezcan sincronizadas.


  • Potencial de uso elevado de la caché: todas las escrituras van primero a la caché, incluso si los datos no se leen con frecuencia. Esto puede provocar un alto consumo de almacenamiento.

Escriba por medio de


Política de caché de escritura directa

Cómo funciona:

  • Su aplicación escribe tanto en el caché como en la base de datos simultáneamente.


  • Para reducir el tiempo de espera, puede escribir en la caché de forma asincrónica. Esto permite que su aplicación indique escrituras exitosas antes de que la operación de caché finalice por completo.


Ventajas:

  • Lecturas más rápidas: al igual que la escritura posterior, los datos siempre están en la memoria caché, lo que elimina la necesidad de lecturas de la base de datos.


  • Confiabilidad: su aplicación solo confirma una escritura después de guardarla en la base de datos, lo que garantiza la persistencia de los datos incluso si ocurre una falla inmediatamente después.


Desventajas:

  • Escrituras más lentas: en comparación con la reescritura, esta política tiene cierta sobrecarga porque la aplicación espera a que se escriban tanto la base de datos como el caché. Las escrituras asincrónicas mejoran esto, pero recuerde que siempre existe el tiempo de espera de la base de datos.


  • Uso elevado de la caché: todas las escrituras van a la caché, lo que potencialmente consume almacenamiento incluso si no se accede a los datos con frecuencia.

escribir alrededor


Patrón de caché de escritura

Con Write-Around, su aplicación escribe datos directamente en la base de datos, sin pasar por el caché durante el proceso de escritura. Para llenar el caché, emplea una estrategia llamada patrón de caché aparte :


  1. Llega la solicitud de lectura: la aplicación comprueba el caché.


  2. Error de caché: si los datos no se encuentran en el caché, la aplicación los recupera de la base de datos y luego los almacena en el caché para uso futuro.


Ventajas:

  • Escrituras confiables: los datos se escriben directamente en la base de datos, lo que garantiza la coherencia.
  • Uso eficiente de la caché: solo se almacenan en caché los datos a los que se accede con frecuencia, lo que reduce el consumo de memoria.


Desventajas:

  • Mayor latencia de lectura (en algunos casos): si los datos no están en el caché, la aplicación debe recuperarlos de la base de datos, agregando un viaje de ida y vuelta en comparación con las políticas donde el caché siempre se completa previamente.

Patrón de pérdida de caché


Patrón de pérdida de caché

Una pérdida de caché ocurre cuando los datos que su aplicación necesita no se encuentran en el caché. Aquí hay dos estrategias comunes para abordar esto:


  1. Caché aparte
    • La aplicación comprueba el caché.

    • Si falla, recupera datos de la base de datos y luego actualiza el caché.

    • Punto clave: la aplicación es responsable de administrar el caché.


Usar un patrón Cache-Aside significa que su aplicación administrará el caché. Este enfoque es el más común de usar porque es simple y no necesita desarrollo en otros lugares además de la aplicación.


  1. Leer de parte a parte
    • La aplicación realiza una solicitud sin conocer el caché.

    • Un mecanismo especializado verifica el caché y recupera datos de la base de datos si es necesario.

    • El caché se actualiza de forma transparente.


Los patrones de lectura reducen la complejidad de las aplicaciones, pero aumentan la complejidad de la infraestructura. En su lugar, es útil descargar el recurso de la aplicación al middleware.


En general, el patrón de escritura con caché aparte se utiliza con mayor frecuencia debido a su facilidad de implementación. Sin embargo, recomiendo incluir también el patrón de escritura simultánea si tiene datos que se utilizarán inmediatamente después de almacenarlos en caché. Esto proporcionará un ligero beneficio al rendimiento de lectura.

Mejores prácticas de almacenamiento en caché

En esta sección, exploraremos las mejores prácticas para usar un caché. Seguir estas prácticas garantizará que su caché mantenga datos actualizados y administre su almacenamiento de manera efectiva.

Invalidación de caché

Imagine que ha almacenado datos en el caché y luego se actualiza la base de datos. Esto hace que los datos en el caché difieran de la versión de la base de datos. A este tipo de datos de caché lo llamamos "obsoletos". Sin una técnica de invalidación de caché, los datos almacenados en caché podrían permanecer obsoletos después de las actualizaciones de la base de datos. Para mantener los datos actualizados, puede utilizar las siguientes técnicas:


  1. Invalidación de caché al actualizar: cuando actualice datos en la base de datos, actualice también la entrada de caché correspondiente. Los patrones de escritura simultánea y reescritura manejan esto de manera inherente, pero la escritura simultánea/guardada en caché requiere la eliminación explícita de los datos almacenados en caché. Esta estrategia evita que su aplicación recupere datos obsoletos.


  2. Tiempo de vida (TTL): TTL es una política que puede establecer al almacenar datos en la caché. Con TTL, los datos se eliminan automáticamente después de un tiempo específico. Esto ayuda a borrar los datos no utilizados y proporciona un sistema de seguridad contra datos obsoletos en caso de invalidaciones omitidas.

Políticas de reemplazo de caché

Si almacena en caché una gran cantidad de datos, su almacenamiento en caché podría llenarse. Los sistemas de caché suelen utilizar memoria, que suele ser más pequeña que el almacenamiento de la base de datos principal. Cuando el caché está lleno, es necesario eliminar algunos datos para dejar espacio. Las políticas de reemplazo de caché determinan qué datos eliminar:


  1. Menos utilizados recientemente (LRU): esta política común desaloja los datos que no se han utilizado (leídos o escritos) durante más tiempo. LRU es adecuado para la mayoría de los casos de uso del mundo real.


  2. Uso menos frecuente (LFU): similar a LRU, pero se centra en la frecuencia de acceso. Los datos recién escritos podrían ser desalojados, así que considere agregar un período de preparación durante el cual los datos no se puedan eliminar.


Existen otras políticas de reemplazo como FIFO (primero en entrar, primero en salir), reemplazo aleatorio, etc., pero son menos comunes.

Cuándo no almacenar en caché

Antes de profundizar en la implementación de la caché, es importante saber cuándo podría no ser la mejor opción. El almacenamiento en caché a menudo mejora la velocidad y reduce la carga de la base de datos, pero puede que no tenga sentido si:


  1. Tráfico bajo: si su aplicación tiene poco tráfico y el tiempo de respuesta aún es aceptable, es probable que aún no necesite el almacenamiento en caché. Agregar un caché aumenta la complejidad, por lo que es mejor implementarlo cuando enfrenta cuellos de botella en el rendimiento o anticipa un aumento significativo en el tráfico.


  2. Su sistema tiene mucha escritura: el almacenamiento en caché es más beneficioso en aplicaciones con mucha lectura. Esto significa que los datos de su base de datos se actualizan con poca frecuencia o se leen varias veces entre actualizaciones. Si su aplicación tiene un gran volumen de escrituras, el almacenamiento en caché podría generar sobrecarga y ralentizar las cosas.

Comidas para llevar

En este artículo, cubrimos los conceptos básicos del almacenamiento en caché y cómo utilizarlo de forma eficaz. Aquí hay un resumen de los puntos clave:


  1. Confirme la necesidad: asegúrese de que su sistema tenga muchas lecturas y requiera las ofertas de almacenamiento en caché de reducción de latencia.


  2. Elija patrones sabiamente: seleccione patrones de escritura en caché y de pérdida de caché que se alineen con la forma en que su aplicación usa los datos.


  3. Actualización de los datos: implemente estrategias de invalidación de caché para evitar entregar datos obsoletos.


  4. Administrar la política de reemplazo: elija una política de reemplazo de caché (como LRU) para manejar las eliminaciones cuando el caché alcance su capacidad.

Referencias

  1. https://gist.github.com/jboner/2841832
  2. https://www.bytesizedpieces.com/posts/cache-types
  3. https://www.techtarget.com/searchstorage/definition/cache
  4. https://www.youtube.com/watch?v=dGAgxozNWFE