Todo lo que necesitas saber sobre el almacenamiento en caché



Buen día.

Le presento la traducción del artículo "Todo lo que necesita saber sobre el almacenamiento en caché - Diseño del sistema" por Animesh Gaitonde.

Introducción


¿Ha notado que cuando navega por una página web con una mala conexión a Internet, el texto se carga frente a imágenes de alta calidad? Sin embargo, cuando vuelve a visitar la misma página, se carga mucho más rápido. Cuando visita un sitio nuevo, lleva mucho más tiempo descargarlo que descargar sitios visitados con frecuencia, como Facebook o Amazon. ¿Sabes por qué está pasando esto? Se trata de almacenamiento en caché.



Así es como se ve mi página de Instagram con una conexión lenta. Como puede ver, el texto se muestra mientras las imágenes aún no se han cargado.

Es muy importante proporcionar la mejor experiencia al usar la aplicación para retener e involucrar a los usuarios. En un mundo moderno donde reina el espíritu de competencia, las empresas sufren mucho debido a la mala experiencia del usuario. Imagine que está viendo su serie favorita o la transmisión de video en un sitio web, pero el video se detiene constantemente para una carga adicional (almacenamiento en búfer). ¿Cuánto tiempo soportarás tal "actitud" y volverás a ese sitio?

El almacenamiento en caché funciona según el principio de "localización de enlaces". El caché es un almacén de datos local para acelerar la recuperación de información y la recuperación de datos. El objetivo principal de la memoria caché es reducir el retraso en la lectura de datos y aumentar el rendimiento de la aplicación. Veamos algunos ejemplos de la vida real.

Uso de caché


Supongamos que cocinas la cena todos los días. Para cocinar, necesita varios ingredientes, verduras, especias, etc. Sin embargo, ¿vas a la tienda todos los días por esto? Esto puede ser bastante pesado y lento. Por supuesto, lo primero que miras en el armario de la cocina o el refrigerador. Esto ayuda a evitar un viaje innecesario al supermercado.



Su refrigerador es un tipo de caché para vegetales. La ventaja obvia de este caché es un ahorro significativo en el tiempo de preparación de la cena.

¿Cómo funciona el caché?


Las aplicaciones de servidor generalmente almacenan datos en una base de datos. Cuando un cliente solicita datos, la aplicación envía una solicitud a la base de datos, recibe datos de allí y los envía al cliente. El servidor de la base de datos está fuera de línea y se puede ubicar en una computadora diferente a la computadora en la que se encuentra el servidor de aplicaciones.



La lectura de datos de la base de datos es un proceso muy lento, ya que debe enviar una solicitud y realizar E / S para obtener datos del sistema de archivos. Si los datos se almacenan en la memoria caché, la operación de lectura será muy rápida. Cuando un cliente solicita repetidamente los mismos datos, tiene sentido devolver datos del caché en lugar de la base de datos.

Por ejemplo: si un tweet es viral, todos los clientes solicitarán datos para el mismo tweet. Debido a que Twitter tiene millones de usuarios, el uso de una memoria caché evita millones de consultas en la base de datos.

Por lo tanto, el caché reduce la carga en la base de datos. Si los datos solicitados están en la caché, la solicitud de la base de datos será redirigida (interceptada). Puede dibujar alguna analogía con una tabla hash que almacena pares clave-valor.

El siguiente diagrama muestra el proceso de lectura de datos del caché:



Conceptos clave de caché


Time to Live (TTL)


Estos son límites en la cantidad de datos que se pueden almacenar en la memoria caché. Debe eliminar las entradas en el caché que el servidor de aplicaciones ya no necesita.

En el caso de Netflix, el servidor almacenará en caché los programas más vistos o populares. No es necesario almacenar en caché los programas que nadie está mirando.

Por ejemplo: el almacenamiento en caché de la serie Paper House es más racional que la película de Indiana Jones.

Eliminar política


En algún momento, el caché está lleno. Por lo tanto, surge la necesidad de eliminar datos antiguos (irrelevantes) y reemplazarlos con información nueva (relevante).

Existen varias políticas para borrar el caché, como "antiguo (menos utilizado recientemente)" (menos utilizado recientemente, LRU), "raramente solicitado (menos utilizado)" (menos utilizado frecuentemente, LFU), "último (más recientemente utilizado)" ( Más recientemente utilizado, MRU). Estas políticas eliminan datos del caché de acuerdo con un principio específico.

Antiguo


Los datos que no se han solicitado durante mucho tiempo se eliminan de la memoria caché. Tan pronto como el caché está lleno, se eliminan los datos antiguos y se agregan datos nuevos.

Supongamos que Facebook almacena en caché fotos de celebridades. El análisis de las solicitudes de los suscriptores indica la relevancia de las nuevas fotos. Cuando el caché está lleno, se eliminará la foto más antigua.

Raramente solicitado


El LFU rastrea la frecuencia o el número de solicitudes de datos. Cuando el tamaño de la memoria caché se acerca al valor umbral, los datos solicitados con menos frecuencia se eliminarán.

Cuando ingresamos el texto, el teléfono comienza a ofrecer varias opciones para terminar la palabra, una de las cuales se puede seleccionar en lugar del conjunto completo (autocompletar). El software del teléfono inteligente almacena en caché las palabras que se escriben con más frecuencia.



Las palabras raramente escritas se eliminan posteriormente de este caché. En el ejemplo anterior, si usa las palabras "característica", "características", "pluma", etc., después de un tiempo el teléfono dejará de ofrecerle "hazaña", ya que se eliminará de la caché.

Último


En esta política, los datos más recientes están sujetos a eliminación, se da preferencia a los datos más antiguos almacenados en la memoria caché. Esta estrategia se utiliza si la plantilla de adquisición de datos es tal que el usuario está menos interesado en recuperar los últimos datos. Considera un ejemplo.



Las aplicaciones de citas como Tinder generalmente almacenan en caché a todos los socios potenciales (posibles coincidencias o preferencias) del usuario. Cuando un usuario hojea un feed moviendo un perfil específico de un socio potencial hacia la izquierda o hacia la derecha, la aplicación ya no debería recomendarle este perfil. Si esto sucede, dará lugar a una mala experiencia del usuario.

En este caso, es necesario eliminar los últimos datos. La aplicación debe eliminar los perfiles vistos de la memoria caché.

Tipos de caché


Grabación de caché


Como su nombre lo indica, los datos se escriben primero en el caché, luego en la base de datos. Esto asegura la consistencia de los datos en el caché y la base de datos. Cada lectura de datos de la memoria caché corresponde al registro más reciente.



La desventaja de este enfoque es el aumento en el tiempo de grabación. No es adecuado para sistemas muy cargados con operaciones frecuentes de escritura de datos. Sin embargo, es ideal para aplicaciones que a menudo vuelven a leer los datos almacenados en la base de datos. La escritura lenta se compensa con la lectura rápida y la coherencia.

Entrada de caché


Una alternativa al primer enfoque es escribir datos en la memoria caché y agregar una nota sobre los cambios de datos para su posterior actualización en la base de datos.



Mediante operaciones asíncronas periódicas, puede leer datos actualizados en la memoria caché y realizar cambios en los datos correspondientes en la base de datos. Este enfoque no aumenta las operaciones de lectura / escritura. El único inconveniente aquí es el retraso en la sincronización entre el caché y la base de datos. Esto puede llevar al hecho de que las aplicaciones que dependen de la base de datos como fuente de verdad leerán datos obsoletos.

Youtube, por ejemplo, utiliza este enfoque para almacenar información sobre la cantidad de vistas de un video en particular. Actualizar la base de datos para cada vista del video viral será muy costoso. La mejor solución es escribir datos en el caché y luego sincronizarlos con la base de datos.

Registro de omisión de caché


Varias aplicaciones de servidor no suelen releer los últimos datos. En este caso, se utiliza una entrada de omisión de caché.



En este enfoque, la base de datos se actualiza sin un caché. Esto evita cargar datos no reclamados en la memoria caché. Sin embargo, si la aplicación aún solicita los últimos datos que no están en la memoria caché, esto llevará a la carga de dichos datos desde la base de datos con todas las consecuencias resultantes.

Ejemplos de uso de caché distribuido


Lista de proyectos de caché abierta:

  • Redis
  • Memcached
  • Voltdb
  • Aerospike dbs
  • Apache se enciende

Gracias por su atención.

All Articles