Diseño de arquitectura de caché multinivel

lo dijo de frente

En la comunidad de lectores ( mayores de 50 años) de Nien, un arquitecto de 40 años , muchos amigos han obtenido calificaciones para entrevistas de empresas de Internet de primer nivel como Alibaba, NetEase, Youzan, Xiyin, Baidu, NetEase y Didi, y han Encontré muchos Una pregunta de entrevista muy importante:

  • En el escenario de 20w QPS, ¿cómo debería diseñarse la arquitectura del servidor?
  • En el escenario de 10w QPS, ¿cómo debería diseñarse la arquitectura de caché?

Nien recordó que las cuestiones relacionadas con la arquitectura de la caché, la planificación de la caché, la eliminación de la caché y la coherencia de los datos de la caché multinivel son conocimientos básicos de la arquitectura y los problemas clave en línea.

Además, Nien ha estado brindando orientación a todos sobre currículums y transformación estructural. Hace unos días estaba entrenando el currículum de L9, un súper jefe de Meituan, él también habló sobre estos problemas de almacenamiento en caché y necesitaba brindarle algunas soluciones como:

  • Primero: materiales de aprendizaje.
  • Segundo: Ruedas arquitectónicas.

Con base en las razones anteriores, Nien le brindará una revisión sistemática y sistemática basada en la "Solución de arquitectura de almacenamiento en caché multinivel de aplicaciones de servidor JD" y la "Solución de almacenamiento en caché multinivel transparente (TMC) de Youzan". Por lo tanto, durante la entrevista, podemos demostrar plenamente nuestros fuertes "músculos técnicos" y hacer que el entrevistador "no pueda evitarlo y babee" .

Esta pregunta y las respuestas de referencia también se incluyen en la versión V105 de nuestra " Guía de entrevistas de Nion Java " como referencia para amigos posteriores para mejorar la arquitectura, el diseño y los niveles de desarrollo de 3 niveles de todos.

Para obtener los archivos PDF de "Notas de arquitectura de Nien", "Trilogía de alta concurrencia de Nien" y " Guía de entrevistas de Java de Nien ", vaya a la cuenta oficial [Technical Freedom Circle] para obtener

Análisis de escenarios de alta concurrencia

En términos generales, si es 10Wqps o 20Wqps, puede usar caché distribuido para resistir.

Por ejemplo, en un clúster de Redis, 6 maestros y 6 esclavos: el maestro proporciona lectura y escritura, y el esclavo actúa como respaldo y nunca proporciona servicios de lectura y escritura.

Bajo la arquitectura de 6 maestros y 6 esclavos, una unidad puede soportar una concurrencia de 3w-4W en promedio, y también puede soportar 18Wqps -24Wqps.

Y, si el QPS alcanza los 100w, al aumentar la cantidad de máquinas en el clúster de Redis, se pueden ampliar la capacidad de la caché y las capacidades de lectura y escritura simultáneas. La arquitectura de 6 maestros y 6 esclavos se puede ampliar a 30 maestros y 30 esclavos.

Al mismo tiempo, los datos almacenados en caché se comparten entre aplicaciones, con una arquitectura maestro-esclavo para lograr una alta disponibilidad.

Pregunta: ¿Cómo resolver el problema del punto de acceso de caché (tecla de acceso rápido)?

Una vez que se produce un punto de acceso de caché, por ejemplo, un tráfico de 10 W accede a la misma clave y se concentra en una determinada instancia de Redis, puede provocar que la carga de CPU de la instancia sea demasiado alta.

En este caso, incluso si aumenta el número de clústeres de Redis, el problema no se puede resolver fundamentalmente. Entonces, ¿cuál es la forma eficaz de resolver el problema de las teclas de acceso rápido? Uno de los medios más eficaces es el almacenamiento en caché local. Las razones principales son: El almacenamiento en caché local evita la carga elevada de un único servidor de caché de Redis. Al mismo tiempo, la memoria caché local tiene una velocidad de acceso más rápida porque los datos se almacenan directamente en la memoria de la aplicación sin la necesidad de transmitirlos a través de la red.

La esencia del caché local: son copias múltiples que intercambian espacio por tiempo . Al distribuir las solicitudes mediante la replicación de varias copias de caché, puede aliviar la presión sobre un único servidor de caché causada por los puntos de acceso de caché.

En todo hay pros y contras.

Entonces, ¿qué problemas traerá la introducción del caché local? Los principales problemas son:

  • Problemas de coherencia de datos
  • Problema de contaminación de datos de caché local

Con respecto a las dos preguntas anteriores, el artículo anterior de Nien: "Pregunta de escenario: supongamos que 100.000 personas realizan una visita sorpresa, ¿cómo puede su sistema evitar avalanchas?" " , basado en la solución transparente de almacenamiento en caché multinivel (TMC) de Youzan, le hemos brindado una revisión completa.

Sin embargo, como futuros súper arquitectos, debemos aprender de los puntos fuertes de cientos de escuelas de pensamiento y ampliar nuestros horizontes técnicos.

Por lo tanto, aquí hay otro artículo basado en el "Plan de arquitectura de caché multinivel para aplicaciones de servidor JD". La solución original de arquitectura de caché multinivel de la aplicación de servidor JD | Equipo técnico de JD Cloud.

Solución universal de almacenamiento en caché multinivel

El servidor JD utiliza una solución de arquitectura de caché de varios niveles, que en realidad es una solución de arquitectura de caché de nivel 2 de uso común:

(1) Caché de nivel L1: guayaba de caché local

(2) Caché L2 de nivel 2: caché distribuido redis

Proceso de acceso a la caché del esquema de arquitectura de caché de nivel 2:

  • Las solicitudes se priorizan en la caché local de la aplicación.
  • Si el caché local no existe, vaya al clúster de Redis para extraerlo y guárdelo en caché local al mismo tiempo.

El proceso anterior es similar al modo de caché aparte. El proceso de acceso a la caché específico es aproximadamente el siguiente:

Con respecto a los problemas de coherencia de datos en el modo de caché aparte entre DB y Redis, lea " Java High Concurrency Core Programming Volume 3 Enhanced Edition " de Nien para obtener más detalles.

Entonces, ¿qué problemas traerá la introducción del caché local? Los principales problemas son:

  • Problemas de coherencia de datos
  • Problema de contaminación de datos de caché local

Problemas de coherencia de datos de caché multinivel

¿Cómo resolver el problema de la coherencia de los datos de la caché multinivel? Principalmente caché multinivel. Utilice principalmente el modo de publicación-suscripción o el mecanismo de comunicación RPC del componente subyacente para completar la sincronización de datos entre el caché local y el caché de Redis.

  • JD.com adopta un modelo de publicación-suscripción.
  • El mecanismo de comunicación RPC del componente subyacente adoptado por Youzan
  • J2cache utiliza un modelo de publicación-suscripción.

Primero veamos publicar y suscribir. Si profundizamos, hay dos modos:

  • Modo push: cada canal mantiene una lista de clientes y, cuando se envía un mensaje, recorre la lista y envía el mensaje a todos los suscriptores.
  • Modo pull: el remitente coloca el mensaje en un buzón y todos los clientes que se suscriben al buzón pueden recibirlo en cualquier momento. El mensaje no se elimina hasta que todos los clientes hayan recuperado correctamente el mensaje completo.

Primero, echemos un vistazo al problema de coherencia de datos de JD: esquema de sincronización de caché multinivel

  1. El fondo de operación guarda los datos, los escribe en la caché de Redis y utiliza la función de publicación y suscripción de Redis para publicar información.
  2. Como suscriptor de mensajes, el clúster de aplicaciones comerciales elimina el caché local después de recibir el mensaje de datos de operación.
  3. Cuando llega la solicitud de tráfico del lado C, si el caché local no existe, el caché se carga desde Redis al caché local.
  4. Para evitar que la caché de Redis deje de ser válida en circunstancias extremas, los datos se pueden recargar en la caché de Redis mediante tareas programadas.

En segundo lugar, veamos el problema de coherencia de datos de Youzan: utilice el módulo de comunicación para lograr la coherencia de datos entre cada nodo .

Para obtener una introducción específica, consulte el artículo de creación secundaria de Nien: “Pregunta de escenario: Supongamos que 100.000 personas realizan una visita sorpresa, ¿cómo puede su sistema evitar avalanchas? " , basado en la solución transparente de almacenamiento en caché multinivel (TMC) de Youzan, le hemos brindado una revisión completa.

Además, existen algunos middlewares de caché secundarios maduros en la industria, que utilizan principalmente la cola de mensajes rocketmq/kafka para lograr la coherencia de los datos entre el caché local y el caché distribuido. Para obtener detalles sobre esta solución de arquitectura, consulte el video de arquitectura de Nien "Operación práctica del componente de caché de nivel 3 de 100 Wqps".

Selección de componentes de sincronización de caché de publicación-suscripción JD

Jingdong utiliza el mecanismo de canal de Redis para completar la sincronización de datos entre el caché local y el caché de Redis. En el mecanismo del canal Redis, el modelo de publicación-suscripción es un modelo push.

  • Al utilizar el comando SUBSCRIBE, puede suscribirse a uno o más canales para recibir notificaciones cuando los canales relacionados publiquen mensajes.
  • El comando PUBLISH se utiliza para enviar mensajes a uno o más canales. Cuando se publica un mensaje en un canal, todos los clientes suscritos al canal recibirán las notificaciones correspondientes.

Además, el modelo de publicación-suscripción de Redis es asincrónico. Cuando se publica un mensaje en un canal, Redis enviará el mensaje de forma asíncrona a todos los clientes suscritos al canal. Esto significa que el cliente no quedará bloqueado esperando mensajes, sino que continuará realizando otras tareas y solo obtendrá mensajes cuando sea necesario. Este enfoque asincrónico ayuda a mejorar la simultaneidad y la eficiencia del sistema.

¿Cuál es el problema de la contaminación del caché?

¿Qué problemas traerá la introducción del caché local? Los principales problemas son:

  • Problemas de coherencia de datos
  • Problema de contaminación de datos de caché local

Anteriormente analizamos la cuestión de la coherencia de los datos. Veamos nuevamente el problema de la contaminación del caché.

El problema de la contaminación de la caché se refiere a los datos que permanecen en la caché y a los que en realidad no se volverá a acceder, pero ocupan espacio en la caché.

Si el volumen de dichos datos es grande, o incluso llena el caché, cada vez que se escriben nuevos datos en el caché, es necesario eliminarlos gradualmente del caché, lo que aumentará el tiempo de sobrecarga de la operación del caché.

Por lo tanto, para resolver el problema de la contaminación de la caché, la tecnología más crítica es identificar los datos a los que se accede solo una o solo unas pocas veces , y al eliminar los datos, priorizarlos y eliminarlos. Por lo tanto, la estrategia central para resolver la contaminación del caché se llama

Las principales estrategias de eliminación de caché comúnmente utilizadas en el almacenamiento en caché son:

  • aleatorio aleatorio
  • lru
  • lfu

(1) Aleatorio: selecciona aleatoriamente datos para su eliminación, incluidos principalmente volátiles aleatorios y todas las claves aleatorias. La eliminación aleatoria, como volatile-random y allkeys-random, no puede filtrar los datos a los que ya no se accede y puede provocar contaminación de la caché.

(2) LRU: la idea básica del algoritmo LRU es que cuando el espacio de caché es insuficiente, se debe eliminar el elemento de caché utilizado menos recientemente, es decir, se debe eliminar el elemento de datos con el tiempo de acceso más largo. Esto garantiza que los elementos de datos utilizados con más frecuencia siempre permanezcan en la memoria caché, lo que mejora la capacidad de respuesta y el rendimiento del sistema. Dado que la política LRU solo considera la puntualidad del acceso a los datos, la política LRU no puede filtrar rápidamente los datos a los que solo se accede una vez.

(3) La estrategia LFU se optimiza sobre la base de la estrategia LRU. Al filtrar datos, primero filtrará y eliminará los datos con menos visitas, y luego filtrará y eliminará los datos con el tiempo de acceso más largo para los datos con el mismo número de visitas. .

En aplicaciones comerciales reales, se aplican estrategias LRU y LFU.

Las dos estrategias, LRU y LFU, se centran en diferentes características de acceso a los datos: la estrategia LRU presta más atención a la puntualidad de los datos, mientras que la estrategia LFU presta más atención a la frecuencia del acceso a los datos .

En circunstancias normales, las cargas de aplicaciones reales tienen una mejor localidad horaria , por lo que la estrategia LRU se utilizará más ampliamente.

Sin embargo, en el escenario de aplicación de consulta de escaneo, la estrategia LFU puede abordar eficazmente el problema de la contaminación de la caché y se recomienda utilizarla primero.

El caché local de Jingdong usa guayaba, por lo que la estrategia es LRU, que presta más atención a la puntualidad de los datos, tiene mejor localidad temporal y se utiliza en la mayoría de los escenarios de datos.

Para la mayoría de los cachés locales, se recomienda usar cafeína, por lo que la estrategia es LRU + LFU, que tiene una buena localidad temporal y se puede usar en la mayoría de los escenarios de datos. También presta atención a la frecuencia de acceso a los datos para evitar problemas de contaminación de datos en escenarios de aplicaciones de consultas de escaneo. Para conocer el principio específico, consulte el video "Componente de caché de nivel 3 de 100 Wqps" de Nien, que proporciona una introducción detallada a los principios internos y la arquitectura de la cafeína, y el rendimiento de la cafeína también es mayor que el de la guayaba.

Consideraciones para arquitecturas de caché multinivel

  1. Dado que el caché local ocupa el espacio de memoria JVM del proceso Java, no es adecuado para almacenar grandes cantidades de datos y es necesario evaluar el tamaño del caché.
  2. Si la empresa puede aceptar la inconsistencia de los datos en un corto período de tiempo, entonces el caché local es más adecuado para escenarios de lectura.
  3. En la estrategia de actualización de la caché, ya sea una actualización activa o pasiva, la caché local debe establecer un período de validez.
  4. Considere configurar una tarea programada para sincronizar el caché y evitar la pérdida de datos en casos extremos.
  5. En las llamadas RPC es necesario evitar la contaminación de la caché local, problema que se puede solucionar mediante una estrategia razonable de eliminación de la caché.
  6. Cuando se reinicia la aplicación, el caché local dejará de ser válido, por lo que debe prestar atención al momento de cargar el caché distribuido.
  7. Al resolver problemas de coherencia de datos mediante publicación/suscripción, si el modo de publicación/suscripción no conserva los datos del mensaje y si el mensaje se pierde, la memoria caché local no se podrá eliminar. Por tanto, es necesario solucionar el problema de la alta disponibilidad de los mensajes de publicación y suscripción.
  8. Cuando falla el caché local, debe utilizar el bloqueo sincronizado para garantizar que un subproceso cargue el caché de Redis para evitar actualizaciones simultáneas.

Dígalo al final: si tiene algún problema, puede aprender de la arquitectura antigua.

El camino hacia la arquitectura está lleno de altibajos

La arquitectura es diferente del desarrollo avanzado: los problemas de arquitectura son abiertos/orientados al desarrollo y no existen respuestas estándar para los problemas de arquitectura.

Debido a esto, muchos amigos, a pesar de gastar mucha energía y dinero, desafortunadamente nunca completan la actualización de la arquitectura en su vida .

Por lo tanto, en el proceso de actualización/transformación de la arquitectura, si realmente no puede encontrar una solución eficaz, puede acudir al arquitecto Nien, de 40 años, en busca de ayuda.

Ayer, un amigo me pidió que creara una estructura de enlaces dorados para un sitio web de comercio electrónico . Al principio no pude encontrar ninguna idea, pero después de 10 minutos de la guía de voz de Nin, de repente me iluminó.

referencias

https://it.sohu.com/a/696701644_121438385

https://blog.csdn.net/crazymakercircle/article/details/128533821

Lectura recomendada

" Decenas de miles de millones de visitas, cómo diseñar la arquitectura de caché "

" Diseño de arquitectura de inserción de mensajes "

" Alibaba 2: ¿Cuántos nodos implementas?" ¿Cómo implementar concurrencia de 1000W?

" Meituan 2 lados: 99,999% 99,999% de 5 nueves, ¿cómo lograrlo?"

" Lado de NetEase: nodo único 2000Wtps, ¿cómo lo hace Kafka?"

" Lado del byte: compensación de transacción y reintento de transacción, ¿cuál es la relación?"

" Lado de NetEase: escritura Mysql de alto rendimiento de 25 Wqps, datos de 100 W se escriben en 4 segundos, ¿cómo lograrlo?"

" ¿ Cómo estructurar vídeos cortos de mil millones de niveles? "

" Explota, confía en" fanfarronear "para pasar por JD.com, salario mensual 40K "

" Es tan feroz que confío en" fanfarronear "para pasar por SF Express, y mi salario mensual es de 30.000 " .

" Explotó... Jingdong pidió 40 preguntas en un lado y, después de aprobarlas, fueron más de 500.000 " .

" Estoy tan cansado de hacer preguntas... Ali hizo 27 preguntas mientras preguntaba por su vida, y después de aprobarlas, son 600.000+ "

" Después de 3 horas de preguntas locas sobre Baidu, recibí una oferta de una gran empresa. ¡Este tipo es tan cruel!"

" Ele.me es demasiado cruel: frente a un Java avanzado, qué duro y cruel es el trabajo "

" Después de una hora de preguntas locas por parte de Byte, el tipo recibió la oferta, ¡es tan cruel!"

" Acepta la oferta de Didi: De tres experiencias de joven, ¿ves lo que necesitas aprender?"

"Notas de arquitectura de Nien", "Trilogía de alta concurrencia de Nien", "Guía de entrevistas de Nien Java" PDF, vaya a la siguiente cuenta oficial [Technical Freedom Circle] para obtener ↓↓↓

Supongo que te gusta

Origin blog.csdn.net/crazymakercircle/article/details/132637261
Recomendado
Clasificación