¿Cómo se implementa Redis?

Primero: ¿Qué es Redis?

Redis es un sistema de almacenamiento de alto rendimiento basado en memoria, tipo de registro persistente, base de datos de valores clave y proporciona API en varios idiomas.

Segundo: fondo.

Cada vez existen más requisitos de estructura de datos, pero Memcache no los tiene, lo que afecta la eficiencia del desarrollo.

A medida que aumenta la cantidad de operaciones de lectura, es necesario abordar los requisitos de rendimiento. El proceso es el siguiente:

Separación de lectura y escritura de la base de datos (M/S) -> La base de datos utiliza. múltiples servidores esclavos -》Agregar caché (memcache)-》Ir a Redis

Resuelva el problema de escritura:

Divida horizontalmente, divida la tabla, coloque algunos usuarios en esta tabla, coloque algunos El usuario se coloca en otra tabla;

¿Requisitos de confiabilidad?

¿Es confuso el problema de la "avalancha" de caché?

La caché se enfrenta al reto de una recuperación rápida.

¿Requisitos de costes de desarrollo?

El costo de mantener la consistencia de la caché y la base de datos es cada vez mayor (limpiar la base de datos primero, luego limpiar la caché, ¡no, es demasiado lento!)?

¿Es necesario el desarrollo? para mantenerse al día con el crecimiento continuo de las necesidades del producto?

El costo de hardware más caro es la máquina a nivel de base de datos, que es básicamente varias veces más cara que la máquina front-end. Es principalmente intensivo en IO y consume hardware.

¿Complejidad del mantenimiento?

El coste del mantenimiento de la coherencia es cada vez mayor;?

BerkeleyDB usa B-tree, que siempre escribirá archivos nuevos y no habrá reorganización interna de archivos; esto hará que los archivos se vuelvan cada vez más grandes y deban archivarse; , y la operación de archivo debe realizarse con regularidad;?

De esta manera, necesita una cierta cantidad de tiempo de inactividad;;

Basado en las consideraciones anteriores, se eligió Redis.

En tercer lugar, la aplicación de Redis en Sina Weibo.

Introducción a Redis

1. Admite cinco estructuras de datos.

¿Soporta cadenas, hashes, listas, conjuntos, conjuntos ordenados?

Las cadenas son un buen método de almacenamiento para el almacenamiento de recuentos. Los conjuntos son muy adecuados para crear bibliotecas de índices;

2. Almacenamiento K-V y caché K-V

98 de las aplicaciones utilizadas actualmente por Sina Weibo son aplicaciones persistentes, 2 son cachés y 600 servidores. se utilizan?

No hay mucha diferencia entre aplicaciones persistentes en Redis y métodos no persistentes:?

No persistente es 80.000-90.000 TPS, por lo que persistente es alrededor de 70.000-80.000 TPS;

Al usar la persistencia, debe considerar la relación entre la persistencia y el rendimiento de escritura, es decir, debe considerar el cálculo de la relación entre el tamaño de la memoria utilizada por redis y la velocidad de escritura del disco duro <; /p>

3. Comunidad activa

Actualmente Redis tiene más de 30.000 líneas de código. El código es conciso y tiene muchas implementaciones inteligentes. ¿Tiene el autor tecnofobia?

Redis tiene una comunidad muy activa y es un indicador importante de la calidad del software de código abierto. En las etapas iniciales del software de código abierto, generalmente no existe soporte de servicio técnico comercial. Sin el apoyo activo de la comunidad, no tendrá a quién acudir cuando tenga problemas.

Principios básicos de Redis

Persistencia de Redis (aof) documentos en línea adicionales:?

Escribir registro (aof), fusionarse con la memoria hasta cierto punto, agregar y agregar, escribir en el disco secuencialmente, tiene poco impacto en el rendimiento.

1. Proceso único de instancia única

Redis usa un proceso único, por lo que cuando se configura, una instancia solo usará una CPU;

Al configurar, si necesita maximizar la utilización de la CPU, puede configurar la cantidad de instancias de Redis correspondientes a la cantidad de CPU y la cantidad de instancias de Redis correspondientes a la cantidad de puertos (CPU de 8 núcleos, 8 instancias, 8 puertos), para mejorar la concurrencia.

Durante la prueba independiente, los datos independientes son de 200 bytes y el resultado de la prueba es de 80 000 ~ 90 000 tps.

2. Técnica de separación

Proceso: escribir datos en el host -> El host los almacena en el rdb del esclavo -> El esclavo carga el rdb en la memoria. ?

Punto de guardado: Cuando la red se desconecta, la transmisión continuará después de conectarse.

La primera sincronización en modo maestro-esclavo es la transmisión completa, seguida de la sincronización incremental.

3. Consistencia de datos

Después de una operación a largo plazo; la posibilidad de inconsistencia entre nodos;?

Desarrollar dos programas de herramientas:?

1. Para datos con una gran cantidad de datos, se llevará a cabo una inspección completa con regularidad;

2. Verifique la coherencia de los datos incrementales en tiempo real;

La inconsistencia causada por la incapacidad de la base de datos maestra y la base de datos esclava para sincronizarse en el tiempo se denomina problema de retraso; ?

Para escenarios donde los requisitos de coherencia no son tan estrictos, solo necesitamos garantizar la coherencia final;

Para el problema de retrasos, es necesario analizar las características del escenario empresarial y agregar estrategias desde el nivel de aplicación para solucionar este problema;?

Por ejemplo:?

1. Los usuarios recién registrados deben consultar primero la biblioteca principal;

2. Después de un registro exitoso, debe esperar 3 segundos antes de saltar. En este momento, la sincronización de datos se realiza en segundo plano.

En cuarto lugar, el diseño arquitectónico de la caché distribuida.

1. Diseño arquitectónico

Debido a que redis es un punto único y debe usarse en el proyecto, debe distribuirlo usted mismo. El diagrama de arquitectura básico es el siguiente:

2. Implementación distribuida

A través del hash consistente de claves, se logra la distribución de los nodos redis correspondientes a las claves.

Implementación de hash consistente;

Cálculo del valor Lhash: al admitir MD5 y MurmurHash, MurmurHash se adopta de forma predeterminada como un método eficiente de cálculo de hash.

l Implementación de coherencia: simule la estructura del anillo a través de TreeMap de Java para lograr una distribución uniforme.

3.3. Elección del cliente

La modificación de jedis es principalmente la modificación del módulo de partición, de modo que admita la partición basada en BufferKey y pueda inicializar diferentes ShardInfo según diferentes nodos de redis. información. Al mismo tiempo, la implementación subyacente de JedisPool se modifica para que el grupo de conexiones admita métodos de construcción de claves y valores. Se pueden crear diferentes clientes de conexión Jedis de acuerdo con diferentes shardinfo para lograr el efecto de partición para llamadas de capa de aplicación.

4. Descripción del módulo

l Módulo de procesamiento de datos sucios, utilizado para manejar operaciones de caché fallidas.

l Protege el módulo de monitoreo para monitorear anomalías en las operaciones jedis. Cuando un nodo es anormal, puedes controlar operaciones como la eliminación de nodos redis.

Todo el módulo distribuido corta los nodos redis anormales a través de hornetq. Para agregar nuevos nodos, también puede agregarlos mediante el método de recarga. (Este módulo también se puede implementar fácilmente para agregar nodos).

La implementación de la arquitectura distribuida anterior satisface las necesidades del proyecto. Además, para algunos datos almacenados en caché importantes, algunos nodos de Redis se pueden configurar por separado para establecer prioridades específicas. Además, para el diseño de interfaces de caché, también podemos implementar interfaces básicas y algunas interfaces lógicas especiales según sea necesario. Para operaciones relacionadas con cas, así como algunas cosas, las operaciones se pueden implementar a través de su mecanismo de vigilancia.

Descargo de responsabilidad: todos los blogs funcionan con marcos distribuidos. Como soporte técnico y explicación del marco, el marco está orientado a la empresa y es una arquitectura empresarial distribuida por Internet a gran escala. El proyecto de implementar un clúster de alta disponibilidad en Linux se presentará más adelante.