¿Cómo se implementa la función de caché de Sina Weibo?
Introducción a Redis
1. Admite cinco estructuras de datos.
Soporta cadenas, hashes, listas, conjuntos y conjuntos ordenados.
Las cadenas son un buen método de almacenamiento para el almacenamiento de recuentos. Los conjuntos son muy útiles para crear bibliotecas de índices;
2. Almacenamiento K-V y caché K-V
Las aplicaciones actuales de Sina Weibo son 98 aplicaciones persistentes, 2 son cachés y utilizan 600 servidores.
No hay mucha diferencia entre la aplicación persistente en Redis y el método no persistente:
La no persistente es de 80.000-90.000 TPS, por lo que la persistente es de unos 70.000 -80,000 TPS;
Al usar la persistencia, se debe considerar la relación entre la persistencia y el rendimiento de escritura, es decir, 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
p>Actualmente Redis tiene más de 30.000 líneas de código. El código es conciso y tiene muchas implementaciones inteligentes. El autor está obsesionado con la tecnofobia.
Redis tiene una comunidad muy activa y es un indicador importante de la calidad del software de código abierto. En los primeros días del software de código abierto, generalmente no existía ningún servicio técnico comercial. Sin el apoyo activo de la comunidad, no tendrá a quién acudir si tiene un problema.
Principios básicos de Redis
Persistencia de Redis (aof) archivos en línea adicionales:
Escribir registro (aof), fusionarlo con la memoria hasta cierto punto, agregar y add, escribir en el disco secuencialmente tiene poco impacto en el rendimiento.
1. Instancia única y proceso único
Redis usa un proceso único, por lo que al configurar, una instancia solo usará una CPU.
Al configurar, si; necesario Para 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: p>
Prueba de una sola máquina Cuando, los datos de una sola máquina son 200 bytes y el resultado de la prueba es 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 maestro-esclavo es la transmisión completa, seguida de la sincronización incremental.
3. Consistencia de datos
Puede haber varios nodos después de una operación a largo plazo; habrá inconsistencias entre ellos;
Desarrollar dos programas de herramientas:
1 Para grandes cantidades de datos, se llevarán a cabo inspecciones completas con regularidad;
2 .Verificar. la coherencia de los datos incrementales en tiempo real;
La inconsistencia causada por la falta de sincronización de la base de datos principal y la base de datos esclava 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 retraso, debemos analizar las características del escenario empresarial y agregar estrategias desde el nivel de la aplicación para resolver este problema; p>
Por ejemplo:
1. Los usuarios recién registrados primero deben consultar la base de datos principal
2. Después de registrarse correctamente, deben esperar 3 segundos antes de saltar. Esta vez, 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ásica 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;
l Cálculo del valor hash: al admitir MD5 y MurmurHash, MurmurHash se utiliza de forma predeterminada, que es un cálculo de hash eficiente.
l Realizació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 de acuerdo con la diferente información del nodo redis. . 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 y ser llamados por la capa de aplicación.
4. Descripción del módulo
l Módulo de procesamiento de datos sucios, maneja operaciones de caché fallidas.
l Protege el módulo de monitoreo para monitorear las anomalías en la operación de jedis. Cuando un nodo es anormal, puedes controlar operaciones como la eliminación del nodo 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, puede configurar algunos nodos de Redis por separado y 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 las necesidades. Para operaciones relacionadas con cas y algunas cosas, las operaciones se pueden implementar a través de su mecanismo de vigilancia. (Consulte mi introducción anterior a Redis)