Tres preguntas y soluciones de almacenamiento en caché que se hacen con frecuencia durante las entrevistas

1. La razón del almacenamiento en caché.
Con la mejora gradual del desarrollo del sistema de Internet, se ha mejorado el qps del sistema. La mayoría de los sistemas actuales han agregado un mecanismo de almacenamiento en caché para evitar solicitudes excesivas de operaciones directas con la base de datos y causar cuellos de botella en el sistema, lo que mejora considerablemente Experiencia de usuario y estabilidad del sistema.
2. Problema de caché
Aunque el uso de caché ha traído una cierta mejora cualitativa al sistema, también trae algunos problemas que necesitan atención.

2.1 Penetración de caché

La penetración de caché se refiere a consultar un dato que no debe existir, porque no hay información sobre los datos en el caché, irá directamente a la capa de la base de datos para consultar, desde el nivel del sistema, parece que penetra en la capa de caché y llega directamente a la base de datos. Para la penetración de caché, sin la protección de la capa de caché, este tipo de datos de consulta que no deben existir pueden ser un peligro para el sistema. Si alguien usa maliciosamente este tipo de datos que no deben existir para solicitar con frecuencia al sistema, no, exacto Se dice que para atacar el sistema, la solicitud llegará a la capa de la base de datos, provocando que la base de datos se bloquee y provoque una falla en el sistema.

2.2 Solución

Las soluciones de penetración de caché en la industria son relativamente maduras y las principales soluciones de uso común son las siguientes:

Filtro Bloom: Un algoritmo similar a una tabla hash, que utiliza todas las condiciones de consulta posibles para generar un mapa de bits. Antes de la consulta de la base de datos, este mapa de bits se utilizará para filtrar. Si no está en él, filtrará directamente, reduciendo así la presión a nivel de la base de datos. El algoritmo BloomFilter se implementa en guayaba

Caché de valor nulo: una solución relativamente simple. Después de consultar los datos inexistentes por primera vez, la clave y el valor nulo correspondiente también se colocan en la caché, pero se establecen en un tiempo de vencimiento más corto, por ejemplo Unos minutos, para que pueda hacer frente a una gran cantidad de ataques a la clave en un período corto de tiempo. Establezca un tiempo de vencimiento más corto porque es posible que el valor no esté relacionado con la empresa y tenga poco significado, y es posible que el atacante no inicie la consulta. El almacenamiento a largo plazo es necesario, por lo que puede caducar antes.

2.3 Avalancha de caché

En los sistemas de almacenamiento en caché ordinarios, como redis, memcache, etc., estableceremos un tiempo de invalidación para el caché, pero si todos los cachés tienen el mismo tiempo de invalidación, todas las solicitudes del sistema se enviarán a la capa de la base de datos cuando caduquen al mismo tiempo. Es posible que db no pueda soportar una presión tan grande y que el sistema se bloquee.

2.4 Solución

Exclusión mutua de subprocesos: solo permita que un subproceso cree el caché y otros subprocesos esperen la ejecución del subproceso que crea el caché y luego obtengan los datos del caché nuevamente. Solo un subproceso ejecuta la solicitud a la vez, lo que reduce la presión de db, pero las desventajas también son obvias , Reducir los qps del sistema.

Tiempo de invalidación escalonado: este método es relativamente simple y grosero. Dado que la invalidación al mismo tiempo provocará una avalancha de demasiadas solicitudes, podemos evitar este problema a partir de una longitud determinada escalonando diferentes tiempos de invalidación. Cuando se establece el tiempo de invalidación de la caché , Se puede utilizar un tiempo aleatorio de un rango de valores apropiado como tiempo de falla.

2.5 Desglose de la caché

El desglose de la caché es en realidad un caso especial de avalancha de caché. Todos los que han usado Weibo deben saber que Weibo tiene una función de tema candente, y el volumen de búsqueda de usuarios sobre temas candentes suele ser mucho mayor que otros temas en algunos momentos. Nos hemos convertido en el "punto de acceso" del sistema. Debido a que la caché de datos de estos puntos de acceso en el sistema también tiene tiempo de invalidación, cuando el caché del punto de acceso alcanza el tiempo de invalidación, es posible que una gran cantidad de solicitudes aún lleguen al sistema en este momento y no hay una capa de caché. Protección, estas solicitudes también llegarán a la base de datos y pueden causar fallas. La diferencia entre avería y avalancha es que la avería es para datos calientes específicos, mientras que la avalancha son todos los datos.

2.6 Solución

Caché de segundo nivel: realice una caché de segundo nivel para datos activos y establezca diferentes tiempos de invalidación para diferentes niveles de caché, por lo que la solicitud no penetrará directamente en la capa de caché para llegar a la base de datos.

Aquí hay una referencia a la solución de desglose de la caché de tráfico doble de 11 billones de Ali. La clave para resolver este problema es el acceso al hotspot. Dado que los puntos calientes pueden cambiar con el tiempo, el almacenamiento en caché especial para datos fijos no puede solucionar el problema. La combinación del algoritmo LRU puede ayudarnos a resolver este problema.

El algoritmo LRU (Usado menos recientemente, usado menos recientemente) elimina los datos basados ​​en los registros históricos de acceso a los datos. Su idea central es "si se ha accedido a los datos recientemente, la probabilidad de ser accedidos en el futuro también es mayor". La implementación más común es usar una lista vinculada para almacenar datos en caché, como se muestra en la siguiente figura

WeChat image_20200507133759.png

 

Esta lista vinculada es nuestra estructura de caché, y los pasos de procesamiento de caché son

Primero coloque los nuevos datos en el encabezado de la lista vinculada

En el proceso de inserción de datos, si se detecta que hay datos en la lista enlazada a los que se accede nuevamente, es decir, se solicita volver a acceder a los datos, luego se inserta el encabezado de la lista enlazada, porque pueden ser datos calientes relativos a otros datos, con El significado de una retención más prolongada

Finalmente, cuando los datos de la lista enlazada están completos, se eliminan los datos de la parte inferior, es decir, los datos a los que no se accede con frecuencia.

El algoritmo LRU-K, de hecho, el algoritmo anterior también es un caso especial del algoritmo, a saber, LRU-1. El algoritmo anterior tiene mucha irracionalidad. En el proceso de aplicación real, el algoritmo se utiliza para mejorar, como el impacto accidental de datos. Esto da como resultado una tasa de aciertos baja. Por ejemplo, ciertos datos están a punto de llegar al final y serán eliminados, pero debido a que se coloca una solicitud en el encabezado, no se solicitan los datos después de eso, entonces la existencia continua de los datos no es razonable. En este caso, el algoritmo LRU-K tiene mejores soluciones. El diagrama de estructura es el siguiente:

WeChat image_20200507133843.png

 

LRU-K necesita mantener una cola más o más para registrar el historial de todos los datos almacenados en caché a los que se accede. Solo cuando el número de accesos a los datos llega a K veces, los datos se colocan en la caché. Cuando sea necesario eliminar datos, LRU-K eliminará los datos cuyo tiempo de acceso Kth sea el mayor desde el momento actual.

El primer paso es agregar datos al encabezado de la primera cola

Si no se ha accedido a los datos K veces en la cola (el valor lo determina el sistema específico qps), continuará llegando al final de la lista enlazada hasta que se elimine; si se ha accedido a los datos K veces mientras estaban en la cola, se agregarán a En el siguiente nivel 2 (específicamente, varios niveles de estructura también se combinan con el análisis del sistema) lista enlazada, organizada en el segundo nivel lista enlazada en orden cronológico

La operación en la lista vinculada del siguiente nivel 2 es la misma que la del algoritmo anterior. Si se accede de nuevo a los datos de la lista vinculada, se moverá al encabezado. Cuando la lista vinculada esté llena, se eliminarán los datos de la parte inferior.

En comparación con LRU, LRU-K necesita mantener una cola adicional para registrar el historial de todos los datos almacenados en caché a los que se accede, por lo que se necesita más espacio de memoria para construir el caché, pero las ventajas también son obvias y los datos se reducen mejor. La tasa de contaminación aumenta la tasa de aciertos de la caché y también es una forma de que el sistema cambie un cierto costo de hardware por el rendimiento del sistema. Por supuesto, existen algoritmos de estructura de caché más complejos, que se pueden aprender haciendo clic en el algoritmo LRU, como Two Queues y Mutil Queues, etc. Este artículo no los repetirá, sino que solo brindará a los lectores una solución.

Reimpreso de: https://gper.club/articles/7e7e7f7ff4g5bgc7g6f

Supongo que te gusta

Origin blog.csdn.net/madongyu1259892936/article/details/106013957
Recomendado
Clasificación