Problemas y soluciones encontrados en la construcción de estabilidad.

Tabla de contenido

Una configuración razonable de tiempo de espera de la red

Separación de negocios principales y no esenciales

Tres configuran razonablemente el número de subprocesos de tomcat

Intenta no volver a intentar en los cuatro códigos

Cinco dependencias no esenciales para debilitar

Optimización de seis transacciones de bases de datos

Siete puntos de optimización del rendimiento de SQL

8. Intente agilizar el proceso en línea

Nueve colas de limitación, fusión, degradación y colas de corriente para manejar tráfico anormal

Diez funciones de seguimiento y registro perfectas


Este artículo explica principalmente algunas experiencias y resúmenes sobre alta disponibilidad y construcción de alto rendimiento.

Una configuración razonable de tiempo de espera de la red

1.1 ¿Cuál es el tiempo de espera de la llamada de red?

Por ejemplo, solicitudes de red entre servidores de aplicaciones, entre servidores de aplicaciones y servidores redis, entre servidores de aplicaciones y servidores mq, estas solicitudes de red generalmente tienen tres períodos de tiempo de espera:

  • connectRequestTimeout: el cliente obtiene el tiempo de espera de conexión del grupo de conexiones.
  • connectTimeout: el período de tiempo de espera para establecer una conexión entre el cliente y el servidor.
  • socketTimeout: el tiempo de espera para que el cliente y el servidor lean los datos.

1.2 ¿Por qué necesito establecer el tiempo de espera?

Como el grupo de conexiones del sistema o los recursos del grupo de subprocesos son limitados, suponiendo que no se establezca ningún tiempo de espera, debido a servicios descendentes lentos o servicios descendentes anormales, habrá una gran cantidad de subprocesos esperando tontamente a que regresen los servicios descendentes.

Algunas solicitudes normales esperarán o serán rechazadas, la respuesta del servicio se ralentizará, la tasa de rendimiento disminuirá, el QPS será menor y la experiencia del usuario será peor. Esta situación se puede evitar estableciendo un tiempo de espera.

1.3 ¿Cómo establecer el período de tiempo de espera de manera razonable?

El principio simple es: socketTimeout, connectTimeout, connectRequestTimeout 3 tiempos de espera, no más de 300ms, lo más cortos posible si el sistema puede aceptar.

El período de tiempo de espera se puede configurar de acuerdo con las 99 líneas del sistema . La llamada línea 99 es el tiempo mínimo necesario para satisfacer el 99% de las solicitudes de red. En pocas palabras, supongamos que tenemos una interfaz que solicita 10.000 veces al día,

El tiempo mínimo requerido para calcular 9900 solicitudes se denomina 99 líneas. Para cálculos específicos, consulte este artículo ( https://blog.csdn.net/brucewong0516/article/details/80205422 ).

Redis lee y escribe normalmente en 2-3 ms, y el período de tiempo de espera debe establecerse más corto, intente no exceder los 50 ms. Lo mismo es cierto para el tiempo de espera de mq.

Separación de negocios principales y no esenciales

Cada empresa tiene un negocio principal y otro no básico. El vínculo principal se puede clasificar para el negocio principal. El llamado vínculo principal debe ser el negocio más valioso de la empresa. El negocio principal solo puede llamar al negocio principal en el enlace.

Los negocios secundarios solo pueden denominarse negocios secundarios. Si la empresa puede, realice la implementación de la sala de computadoras dual del negocio principal o incluso la implementación de varias salas de computadoras.

Tres configuran razonablemente el número de subprocesos de tomcat

Configure la cantidad de subprocesos de manera razonable. Por ejemplo, los que usan mucha CPU se pueden configurar menos y los que usan más IO se pueden configurar más. Para obtener más información, consulte este artículo ( https://blog.csdn.net/jack1liu/article/details/100511226 ).

Intenta no volver a intentar en los cuatro códigos

Si no hay un motivo especial, no vuelva a intentar ingresar el código. El reintento debe ser un reintento comercial en la medida de lo posible, y el personal comercial ascendente realizará la operación de reintento.

¿Por qué no intentarlo de nuevo en el código?

Si vuelve a intentarlo en el código, este bloque es propenso a la amplificación del flujo, generalmente 1 vez la cantidad, si vuelve a intentarlo 5 veces, el flujo será 5 veces el habitual. Es fácil cerrar el servicio.

Cinco dependencias no esenciales para debilitar

¿Qué es la dependencia débil?

La llamada dependencia débil es depender débilmente de procesos que tienen menos impacto en el proceso principal.

Por ejemplo, cuando se produce una excepción de tiempo de espera en mq / redis, si no afecta a la función principal, debe capturar la excepción y no arrojarla a la capa superior. por ejemplo:     

String value = redis.get(“key”);
	if(value == null) {
		value = dao.getOneColumn(“”);
	}
}

Si no hay ninguna captura que dependa débilmente de redis, cuando redis falla, se lanzará una excepción directamente a la capa superior y los datos no se podrán leer de la base de datos. 

Además de detectar la tolerancia a fallos de mq, ¿cómo lidiar con los mensajes perdidos cuando mq no está disponible? Por ejemplo, cambie el mq para registrar el registro y procesarlo más tarde.

Optimización de seis transacciones de bases de datos

Las operaciones dentro de una transacción deben ser lo menos posible para reducir el tiempo de ejecución de la transacción y no debe haber llamadas RPC.

Siete puntos de optimización del rendimiento de SQL

7.1 ¿Cómo definir SQL lento?

En teoría, la ejecución de SQL del lado del usuario debe estar dentro de los 10 ms, y más de 50 ms se pueden clasificar como SQL lento.

7.2 ¿Cuál es el límite apropiado para el número de consultas SQL?

Por ejemplo, no se permite que el límite exceda 100 o 200, y el límite de identificación de in también es 100 o 200.

7.3 ¿Cómo comprobar que el SQL recién agregado no tiene problemas?

Utilice explicar para ver el plan de ejecución de SQL.

Agregue índices a los campos de consulta relacionados para acelerar la consulta.

8. Intente agilizar el proceso en línea

Por ejemplo, para la migración de la base de datos, se deben tener en cuenta dos puntos centrales en el diseño del programa y el proceso en línea: máximo control del área de impacto y rápida recuperación .

¿Cómo controlar al máximo el área de influencia?

  • Puede considerar el proceso de escala de grises y aumentar gradualmente el volumen.
  • Para verificar la función, puede agregar una lista blanca, etc.

¿Cómo restaurar la función rápidamente ?

  • Agregue algunos interruptores dinámicos para restaurar funciones rápidamente.
  • Prepárese con anticipación y revierte el plan en línea.

Nueve colas de limitación, fusión, degradación y colas de corriente para manejar tráfico anormal

El autor ha encontrado el problema de que el servicio no está disponible temporalmente debido a un tráfico anormal. Para obtener más detalles, consulte ( https://blog.csdn.net/jack1liu/article/details/112135898 ).

Por supuesto, las tecnologías de fusión, degradación y puesta en cola también se pueden utilizar para el tráfico anormal en el servicio. Siempre que se pueda resolver el problema, está bien.

Diez funciones de seguimiento y registro perfectas

Deberíamos imprimir los datos de registro necesarios y razonables.

10.1 ¿Qué es un registro razonable y necesario?

Los registros que pueden solucionar problemas comerciales y solucionar problemas del sistema son razonables y necesarios.

10.2 ¿Por qué necesitamos mejorar la función de seguimiento?

Si no hay monitoreo, sentiremos que nuestros servicios están funcionando sin ningún tipo de problema. Si hay un problema, el monitoreo puede ayudarnos a encontrar, reproducir y resolver el problema de manera más rápida y efectiva.

Supongo que te gusta

Origin blog.csdn.net/jack1liu/article/details/112647026
Recomendado
Clasificación