Arquitectura de caché multinivel | Artículos avanzados de Dark horse Redis

Tabla de contenido

1. Introducción al almacenamiento en caché multinivel

1. Problemas con el almacenamiento en caché tradicional

2. Esquema de almacenamiento en caché de varios niveles

Dos, caché de proceso JVM

 1. Cafeína inicial

clasificación de caché

Primeros pasos con la cafeína

2. Darse cuenta de caché de proceso

3. Guión Lua

1. Lua inicial

 2. Sintaxis Lua

tipo de datos

variable

ciclo

editar

función

control condicional

4. Descanso abierto

1. OpenResty inicial

2. Inicio rápido de OpenResty

Modificar la configuración de nginx

Escribir archivo lua

3. OpenResty obtiene los parámetros de solicitud

4. Encapsular herramienta de solicitud Http

5. Enviar solicitud http a tomcat

6. Equilibrio de carga del clúster de Tomcat

7. Calentamiento de caché Redis

8. Consulta OpenResty Redis

9. Caché local de Nginx

5. Sincronización de caché

1. Estrategia de sincronización de datos

2. Introducción a Canal

3. Introducir Canal

4. Canal cliente


1. Introducción al almacenamiento en caché multinivel

1. Problemas con el almacenamiento en caché tradicional

La estrategia de almacenamiento en caché tradicional generalmente es consultar redis primero después de solicitar tomcat y consultar la base de datos si falla.

La solicitud debe ser procesada primero por tomcat, y el rendimiento de tomcat se convierte en el cuello de botella de todo el sistema.

2. Esquema de almacenamiento en caché de varios niveles

La memoria caché multinivel consiste en utilizar cada enlace de procesamiento de solicitudes para agregar memoria caché por separado, reducir la presión sobre Tomcat y mejorar el rendimiento del servidor:

Dos, caché de proceso JVM

 1. Cafeína inicial

clasificación de caché

Dividimos la caché en dos categorías: caché distribuida y caché local de proceso

Caché distribuida, como Redis:

  • Ventajas: mayor capacidad de caché, mejor confiabilidad y se puede compartir entre clústeres
  • Desventajas: alta sobrecarga de red para acceder al caché
  • Escenario: la cantidad de datos almacenados en caché es grande, los requisitos de confiabilidad son altos y deben compartirse entre clústeres

Procesar caché local, como hashMap, GuavaCache

  • Ventajas: leer la memoria local, sin sobrecarga de red, rápido
  • Contras: almacenamiento limitado, baja confiabilidad, no compartir
  • Escenario: requisitos de alto rendimiento, pequeña cantidad de datos en caché

Primeros pasos con la cafeína

Cafeine es una biblioteca de caché local de alto rendimiento desarrollada en base a Java8 que proporciona una tasa de aciertos casi óptima. Actualmente, el caché interno de Spring usa cafeína.

2. Darse cuenta de caché de proceso

Crear una clase de configuración CaffeineConfig

Inyecte el bean donde quiera usar

modificar negocio

3. Guión Lua

Ahora hemos completado el proxy inverso nginx y el almacenamiento en caché del proceso tomcat

A continuación, usaremos lua para completar el caché local de nginx

1. Lua inicial

Lua es un lenguaje de secuencias de comandos liviano y compacto escrito en c, que está diseñado para integrarse en aplicaciones, lo que proporciona extensiones flexibles y funciones de personalización para aplicaciones, y se usa a menudo en el desarrollo de juegos.

centOS viene con lua, por lo que no necesita instalarlo

 2. Sintaxis Lua

tipo de datos

variable

Cuando Lua declara variables, no hay necesidad de especificar el tipo de datos, y local significa variables locales

ciclo

Cuando el ciclo for atraviesa, do y end son equivalentes a llaves, y después de in es el objeto a atravesar.Dentro de los paréntesis está el tipo

El frente se recorre en forma de pares clave-valor, la matriz de índice es el índice y el valor es el valor.

función

control condicional

4. Descanso abierto

1. OpenResty inicial

OpenResty es una plataforma web de alto rendimiento basada en Nginx y Lua, que integra una gran cantidad de excelentes bibliotecas Lua, módulos de terceros y la mayoría de sus dependencias. Se utiliza para construir convenientemente aplicaciones web dinámicas, servicios web y puertas de enlace dinámicas que pueden manejar una concurrencia ultra alta y una alta escalabilidad.

Primero siga OpenResty y luego configure nginx

2. Inicio rápido de OpenResty

Modificar la configuración de nginx

Primero enviamos nuestra solicitud de interfaz al servidor proxy inverso nginx y luego la enviamos al servidor OpenResty

El módulo lua de openResty está arreglado para copiar directamente

Escribir archivo lua

Debido a que es un inicio rápido, primero usamos datos falsos para devolver el fijo

3. OpenResty obtiene los parámetros de solicitud

 

4. Encapsular herramienta de solicitud Http

Podemos enviar la solicitud al servidor de equilibrio de carga de nginx y reenviarla a tomcat

 

Nuestra solicitud debe enviarse dos veces, debemos extraerla para reutilizarla fácilmente y colocarla en el directorio lualib

5. Enviar solicitud http a tomcat

escribir guion lua

Debido a que la concatenación de cadenas se usa en el medio, json no puede realizar toda la conversión en sintaxis lua y empalme, y luego convertir json para devolver

6. Equilibrio de carga del clúster de Tomcat

De hecho, es imposible que tengamos un solo tomcat, que debe ser un clúster, por lo que debemos configurar el equilibrio de carga.

No debemos ir de manera diferente cada vez, lo que hará que el caché del proceso se almacene en caché repetidamente, por lo que experimentamos una solicitud con la misma identificación para acceder a un servidor, necesitamos usar el cálculo hash y luego tomar el módulo de la cantidad de servidores .

7. Calentamiento de caché Redis

Inicio en frío: cuando el servicio acaba de iniciarse, no hay caché en redis. Si todos los datos del producto se agregan al caché en la primera consulta, puede ejercer una gran presión sobre la base de datos.

Precalentamiento de caché: en el desarrollo real, podemos usar big data para contar los datos calientes a los que acceden los usuarios y luego consultar estos datos calientes por adelantado y guardarlos en Redis cuando comience el proyecto.

Así que agregue precalentamiento en nuestro redisconfig

Debido a que somos tablas de información de productos y tablas de inventario separadas, las almacenamos en caché por separado y las tablas de inventario cambian con frecuencia.

8. Consulta OpenResty Redis

Módulo Redis para OpenResty

OpenResty proporciona un módulo para operar Redis, solo necesitamos importar este módulo para usarlo directamente:

 Método de consulta de datos

Escriba los métodos de consulta y liberación en common.lua, luego expóngalos y llámelos cuando llegue el momento.

La lógica de consulta también debe cambiarse, primero consulte redis, si falla redis, luego verifique tomcat

9. Caché local de Nginx

OpenResty proporciona la función shard dIct para Nginx, que puede compartir datos entre múltiples trabajadores de nginx y realizar la función de almacenamiento en caché

Primero configure el diccionario compartido en nginx.conf

luego importar

necesidad

  • Modifique la función de lectura de datos en item y lua para consultar primero el caché local y luego consultar Redis y Tomcat cuando se pierda
  • Después de consultar con éxito Redis o Tomcat, escriba los datos en el caché local y establezca el período de validez
  • La información básica del producto es válida durante 30 minutos (se puede almacenar en caché durante más tiempo si básicamente no cambia durante todo el año)
  • Información de inventario, válida por 1 minuto (para detectar cambios)

5. Sincronización de caché

1. Estrategia de sincronización de datos

Hay tres formas comunes de sincronizar datos en caché:

  • Establezca el período de validez: establezca el período de validez para el caché y elimínelo automáticamente después del vencimiento. actualizar al consultar de nuevo
    • Ventajas: simple y conveniente.
    • Desventajas: poca puntualidad, puede ser inconsistente antes de que caduque el caché
    • Escenario: negocio con baja frecuencia de actualización y bajos requisitos de puntualidad
  • Escritura doble sincrónica: modifica directamente el caché mientras modificas la base de datos
    • Ventajas: gran puntualidad, gran coherencia entre la memoria caché y la base de datos
    • Desventajas: intrusión de código, alto acoplamiento;
    • Escenario: Caché de datos que requiere alta consistencia y puntualidad
  • Notificación asíncrona: envíe una notificación de evento cuando se modifique la base de datos y los servicios relacionados modifiquen los datos almacenados en caché después de escuchar la notificación
    • Ventajas: bajo acoplamiento, se pueden notificar varios servicios de caché al mismo tiempo
    • Desventajas: puntualidad general, puede haber inconsistencias intermedias
    • Escenario: requisitos generales de puntualidad, es necesario sincronizar varios servicios

 Introduce la notificación asíncrona de canal , canal escucha los cambios en la base de datos e inmediatamente notifica el caché de actualización después de que ocurre un cambio

2. Introducción a Canal

Canal se traduce como vía fluvial y tubería.Es un proyecto de código abierto de Alibaba y está desarrollado en base a Java. Proporcione suscripción y consumo de datos incrementales en función del análisis de registros incrementales de la base de datos

Canal se implementa en base a la sincronización maestro-esclavo mysql.El principio de sincronización maestro-esclavo mysql es el siguiente

Canal debe disfrazarse como un nodo slava de mysql, para monitorear los cambios de registro binario del maestro, y luego notificar al cliente del canal sobre la información de cambio, y luego completar la sincronización de otras bases de datos.

3. Introducir Canal

(1) Primero habilite la sincronización maestro-esclavo mysql

(2) Instalar Canal

(3) Ejecute el comando para crear el contenedor Canal: 

De esta forma, hemos utilizado con éxito Canal para monitorizar mysql

4. Canal cliente

A continuación, actualizaremos el cliente tomcat para escuchar las novedades de Canal

Para monitorear Canal, primero presentamos springboot para integrar las dependencias del canal y luego configuramos canal

Luego escriba un oyente para escuchar los mensajes del canal.

Canal envía la fila de datos modificada al cliente de canal. El cliente de canal que presentamos nos ayudará a encapsular esta fila de datos en la clase de entidad del elemento. Este proceso necesita conocer la relación de mapeo entre la base de datos y la entidad, y se utilizan anotaciones . mapear

Lógica de negocios:

Resumir

El diagrama de arquitectura final:

Supongo que te gusta

Origin blog.csdn.net/weixin_54232666/article/details/128857418
Recomendado
Clasificación