Serie "Into the big factory": avalancha de caché de Redis, avería, penetración

ãè¿å¤§åç³ »åãç³» å-Redisç¼åéªå´ © ãå »ç © ¿ãç © ¿é

Ya sabes, cuanto más no sepas, más
puntos así de nuevo, un hábito

texto

En el último número de la serie colgante mencionamos los conocimientos básicos de Redis. Quienes no lo hayan leído pueden revisarlo.

Ao Bing: Serie "Colgando del entrevistador", conceptos básicos de Rediszhuanlan.zhihu.comicono

He mencionado que Redisyo creo que en la entrevista, o la caché proceso de desarrollo real 雪崩, 穿透, 击穿no está familiarizado con él, pero incluso si no se cumple que has oído, que no hay ninguna diferencia entre los tres, al final, que debería ser la forma de prevenir tales Qué pasó, tenemos la próxima víctima.

Comienza la entrevista

Un hombre de mediana edad con una gran barriga y con una camisa a cuadros se le acercó con un mac lleno de rasguños, miró su cabello calvo y pensó que debía ser el mejor arquitecto de Nima. Pero tenemos poemas y libros en el estómago, y estamos llenos de vigor.


3784b4b739b2c0822d51ed738def0f68.jpeg


Vaya, veo que Redis está escrito en su currículum, así que vayamos directo al grano y preguntemos directamente algunos grandes problemas comunes ¿Entiendes Redis Avalanche?

Hola, guapo y encantador entrevistador, tengo entendido que actualmente la página de inicio de comercio electrónico y los datos activos se almacenarán en caché. Generalmente, la caché se actualiza con las tareas programadas o se actualiza después de que no se encuentra. Hay un problema con la actualización de las tareas programadas. .

Para dar un ejemplo simple : si el tiempo de caducidad de la clave de todas las páginas de inicio es de 12 horas y se actualiza a las 12 del mediodía, tengo un pico de actividad en cero y una gran cantidad de usuarios inundó. Suponiendo que había 6000 solicitudes por segundo en ese momento, la caché podría contener cada 5000 solicitudes por segundo, pero todas las claves de la caché en ese momento no son válidas. En este momento, todas las 6000 solicitudes por segundo caen en la base de datos, y la base de datos inevitablemente no podrá manejarla. Notificará una alarma. En la situación real, el DBA puede colgarse directamente sin responder. En este punto, si no hay una solución especial para lidiar con esta falla, el DBA está muy ansioso y reinicia la base de datos, pero la base de datos es eliminada inmediatamente por el nuevo tráfico. Esto es lo que entiendo como una avalancha de caché.

我刻意看了下我做过的项目感觉再吊的都不允许这么大的QPS直接打DB去,不过没慢SQL加上分库,大表分表可能还还算能顶,但是跟用了Redis的差距还是很大


fbf3e425782a9edaf3f58a411603fc4e.jpeg


同一时间大面积失效,那一瞬间Redis跟没有一样,那这个数量级别的请求直接打到数据库几乎是灾难性的,你想想如果打挂的是一个用户服务的库,那其他依赖他的库所有的接口几乎都会报错,如果没做熔断等策略基本上就是瞬间挂一片的节奏,你怎么重启用户都会把你打挂,等你能重启的时候,用户早就睡觉去了,并且对你的产品失去了信心,什么垃圾产品。

El entrevistador se tocó el pelo, um, no está mal, entonces, ¿cómo es esta situación? ¿Cómo lo afrontas?

El procesamiento de la avalancha de caché es simple. Al Redisalmacenar datos en lotes , agregue un valor aleatorio al tiempo de vencimiento de cada clave para asegurarse de que los datos no fallarán en un área grande al mismo tiempo. Creo que Redis sigue siendo el tráfico Puede soportar.

setRedis (Tecla, valor, tiempo + Math.random () * 10000) ;

Si Redis se implementa en un clúster, la distribución uniforme de los datos activos en diferentes bibliotecas de Redis también puede evitar todas las fallas. Sin embargo, cuando opero el clúster en un entorno de producción, un solo servicio corresponde a un solo fragmento de Redis. Para facilitar la gestión de datos, pero también tener las desventajas de un posible fallo, el tiempo de fallo aleatorio es una buena estrategia.

O configure los datos del hotspot para que nunca caduquen, simplemente actualice el caché cuando haya una operación de actualización (por ejemplo, si el producto de la página de inicio se actualiza mediante la operación y el mantenimiento, entonces habrá terminado con el caché, no configure el tiempo de vencimiento), los datos en la página de inicio del comercio electrónico también pueden usar esto Operación, seguro.

¿Conoce la penetración y el desglose de la caché, puede hablar sobre la diferencia entre ellos y la avalancha?

Bueno, entienda, déjeme hablar primero sobre la penetración de la caché. La penetración de la caché se refiere a los datos que no están en la caché o en la base de datos, y los usuarios continúan iniciando solicitudes. La identificación de nuestra base de datos siempre se incrementa de 1, como la identificación. Datos cuyo valor es -1 o datos cuyo id es muy grande y no existe. En este momento, es probable que el usuario sea un pirata informático, y *** causará una presión excesiva sobre la base de datos, lo que la destruirá seriamente.

Básicamente, los sistemas independientes más pequeños pueden eliminarse con cartero, como el servicio Alibaba Cloud que compré yo mismo. 

ee7b4ccf81b6fc0c7e8e0a6835123a31.jpeg


De esta manera, si no verifica los parámetros, la identificación de la base de datos es mayor que 0. Siempre uso parámetros menores que 0 para solicitarle. Cada vez que puedo omitir Redis y llamar directamente a la base de datos, la base de datos no se puede encontrar siempre. En este caso, el punto más alto de concurrencia colapsará fácilmente.

En cuanto al desglose de la caché, es un poco similar a la avalancha de caché, pero es un poco diferente. La avalancha de caché es causada por una gran área de falla de caché y colapsó la base de datos. La diferencia entre el desglose de caché es que el desglose de caché se refiere a una clave. Los puntos de acceso constantemente llevan una gran concurrencia, y la gran concurrencia se concentra en acceder a este punto. Cuando la clave se invalida, la gran concurrencia continua romperá el caché y solicitará directamente la base de datos, como en un depósito intacto Se hizo un agujero en la parte superior.

1c3155e78dc456bcb51383f8b3c5c258.jpeg

El entrevistador mostró una mirada de alivio, entonces, ¿cómo lo resuelven?

Para la penetración de caché, agregaré verificación en la capa de interfaz, como verificación de autenticación de usuario, verificación de parámetros, parámetros ilegales directamente Devolución de código, como: id para verificación básica, id <= 0 intercepción directa, etc.

Una cosa que quiero mencionar aquí es que debemos tener un corazón de "desconfianza" al desarrollar programas, es decir, no confiar en ninguna persona que llama. Por ejemplo, si proporciona una interfaz API para salir, tiene estos pocos parámetros, entonces creo Como destinatario de la llamada, se debe considerar y verificar cualquier condición de parámetro posible, porque no confía en la persona que lo llamó y no sabe qué parámetros le pasará. Para un ejemplo simple, su interfaz es una consulta de paginación, pero no limita el tamaño de los parámetros de paginación. En caso de que la persona que llama verifique Integer.MAX_VALUE de una vez, le tomará unos segundos para una solicitud y algunos más de simultaneidad. ¿Solo cuelga? Es un colega de la empresa quien lo llamó, pero es un gran problema descubrirlo, pero ¿y si es una mierda o un competidor? No necesito decir qué sucede cuando ajusta su interfaz en Double Eleven. Esto es lo que me dijo el líder anterior y creo que todos deberían entenderlo.

Esto puede evitar que los usuarios *** utilicen repetidamente la misma fuerza bruta de ID ***, pero debemos saber que los usuarios normales no iniciarán tantas solicitudes en un solo segundo. También recuerdo que la capa de puerta de enlace Nginx tiene un elemento de configuración. Esto permite que O&M bloquee en gran medida todas las IP cuyos tiempos de acceso por segundo excedan el umbral para una sola IP.

¿Tienes alguna otra forma?

Y recuerdo que Redis también tiene un Bloom Filter de uso avanzado (Bloom Filter), que también puede prevenir la ocurrencia de penetración de caché, y su principio también es muy simple de usar estructuras de datos y algoritmos eficientes para determinar rápidamente el tuyo. Si la clave existe en la base de datos, simplemente regrese si no existe, y si existe, verifique la base de datos, actualice el KV y luego regrese.

Los datos que no se pueden recuperar de la caché tampoco se recuperan en la base de datos. En este momento, también puede escribir el par de valores de la clave correspondiente como nulo, la ubicación es incorrecta y el valor se volverá a intentar más tarde. Pregunte al producto o vea el valor específico. Para las escenas, el tiempo de validez de la caché se puede establecer en un punto corto, como 30 segundos (si se configura demasiado largo, no se podrá utilizar en condiciones normales).

Entonces algunos amigos dijeron que si el *** tiene muchas direcciones IP al mismo tiempo, ¿iniciar ***? Nunca me di cuenta de esto, pero el nivel general de *** no tiene tantos pollos de engorde, y el nivel normal de los clústeres de Redis puede resistir este nivel de acceso. Creo que las pequeñas empresas no estarán interesadas. de. Una vez realizada la alta disponibilidad del sistema, el clúster sigue siendo muy capaz.

Si la caché está rota, los datos del hotspot nunca caducarán. O agregue un bloqueo mutex para hacerlo. Como un chico cálido, definitivamente prepararé el código para usted.

   / ** * Obtener datos * @param Parámetros de consulta clave * @return data data * @throws InterruptedException * @author Ao Bing * / 
    public static String getData (String Key) throws InterruptedException { 
        // Consultar datos de redis String result = getDataByKV (Key); 
        // Verificación de parámetros if (StringUtils.isBlank (result)) { 
            // Obtener el bloqueo if (reenLock.tryLock ()) { 
                // Ir a la base de datos para consultar el resultado = getDataByDB (Key); 
                // Verificar si ( StringUtils.isNotBlank (result)) { 
                    // Entrar en la caché setDataToKV (Key, result); 
                } 
                // !!! Suelte el bloqueo, normalmente se liberará finalmente en reenLock.unLock ();
            } else { 
                // Duerme un rato y luego vuelve a tomarlo Thread.sleep (100L); 
                result = getData (Key); 
            } 
        } 
        return result; 
    } // Los bloqueos aquí son para el juego independiente, y los bloqueos distribuidos todavía dependen de scripts lua Tal

Fin de la entrevista

Bueno, no está mal, los tres puntos están muy bien respondidos. Hoy no es demasiado temprano. La entrevista será aquí primero y usted regresará mañana. Continuaré preguntándole sobre la alta disponibilidad del clúster de Redis, la sincronización maestro-esclavo, centinela, etc. Señale el problema.

¡Hao tiene la próxima ronda de entrevistas! (Presagio para el próximo número jaja) Pero todavía tengo que lamerlo por la oferta, um, buen entrevistador guapo.

No puedo evitar que me guste en una respuesta tan completa y detallada (implica que me gusta, y no me gusta cada vez que lo leo. ¿Quieres darme una falsificación? Eres bueno o malo, pero me gusta ⁄ (⁄ ⁄ • ⁄ω⁄ • ⁄ ⁄) ⁄)

para resumir

Juguemos, juguemos, no bromees sobre la entrevista.

Este artículo presenta brevemente la avalancha, el colapso y la penetración de Redis. Los tres son en realidad similares, pero hay algunas diferencias. En la entrevista, esta es en realidad una pregunta que debe hacerse sobre el almacenamiento en caché. No confunda los tres. Debido a que la avalancha de caché, la penetración y la avería son los mayores problemas con la caché, o no aparece o es un problema fatal, por lo que el entrevistador definitivamente le preguntará.

Todos deben entender cómo sucedió, cómo evitarlo y cómo rescatarlo después de que sucedió. No es necesario que lo sepa en profundidad, pero no puede simplemente pensar en ello. A veces, las entrevistas no son necesariamente una tortura de conocimiento. Tal vez sea una tortura para tu actitud. Si tienes la mente clara y luego sabes la razón, eso es genial y sabes cómo evitar que funcione.

Por último, seguiré dándoles un pequeño resumen técnico:

Generalmente para evitar la ocurrencia de la situación anterior, la analizaremos a partir de tres períodos de tiempo:

  • De antemano: alta disponibilidad de Redis, maestro-esclavo + centinela, clúster de Redis, para evitar un bloqueo total.
  • En el caso: caché ehcache local + límite actual de Hystrix + degradación para evitar que se elimine MySQL.
  • Después del evento: Redis persiste RDB + AOF. Una vez reiniciado, carga automáticamente los datos del disco y rápidamente restaura los datos almacenados en caché.
  • Hablaré de los puntos anteriores en la serie Redis de la serie colgante. Debería ser posible este mes. Redis está terminado. El componente de limitación actual puede establecer la cantidad de solicitudes por segundo, cuántas pueden pasar el componente y las solicitudes restantes no pasadas. ¿Qué debo hacer? ? ¡Baja de categoría ! Puede devolver algunos valores predeterminados, mensajes sencillos o valores en blanco.

beneficio:

La base de datos nunca morirá, y el componente de limitación actual garantiza que solo puedan pasar cuántas solicitudes por segundo. Siempre que la base de datos no esté muerta, es decir, para los usuarios, se pueden procesar 3/5 de las solicitudes. Siempre que se puedan procesar 3/5 de las solicitudes, significa que su sistema no está muerto. Para los usuarios, es posible que la página no se muestre después de unos pocos clics, pero si hace clic varias veces, puede mostrarla una vez.

Este es el más común entre las principales empresas de Internet actuales. ¿Tienes curiosidad por saber qué le sucedió a una celebridad determinada? Cuando vas a Weibo, la interfaz está en blanco, pero algunas personas vuelven a entrar directamente. Salió varias veces, ahora lo sabes, fue una degradación, sacrificando la experiencia de algunos usuarios a cambio de la seguridad del servidor, ¿está bien?


El artículo se actualiza continuamente cada semana. Puedes buscar " San Tai Zi Ao Bing  " en WeChat para  leerlo y actualizarlo por primera vez (la cuenta pública es una o dos antes que el blog). Este artículo   se ha incluido en GitHub   https://github.com/JavaFamily . El mapa mental de los sitios de entrevistas de las grandes fábricas de primera línea también ha ordenado muchos de mis documentos. Bienvenido a Star y mejórelos. Puede consultar los sitios de prueba para revisar las entrevistas. Espero que podamos tener algo juntos.


Supongo que te gusta

Origin blog.51cto.com/14689292/2546643
Recomendado
Clasificación