Red de conocimiento informático - Problemas con los teléfonos móviles - Código fuente real de Springcloud

Código fuente real de Springcloud

Este artículo compartirá cómo optimizar el rendimiento de Spring Cloud en el entorno de producción desde cinco aspectos: optimización del rendimiento de Tomcat, mecanismo de reintento de inicio de Spring Cloud, optimización de los parámetros de rendimiento de la puerta de enlace Zuul, optimización de los parámetros de rendimiento de Ribbon, optimización del rendimiento de Feign y Hystrix.

Generalmente, los microservicios basados ​​en Spring Cloud pueden ejecutarse de forma independiente sin el Tomcat tradicional, y SpringBoot juega un papel importante. Su principio es que Tomcat está integrado en SpringBoot (por supuesto, puede reemplazarse por otros contenedores de servlets, como jetty) y puede ejecutarse en forma de java -jar.

Entonces, para cada servicio Springboot, necesitamos optimizar algunos parámetros de Tomcat. La siguiente es la configuración de parámetros de Tomcat optimizada por el equipo del proyecto del cartel para su referencia.

Descripción del parámetro Tomcat:

MaxThreads, escenarios de aplicación del parámetro AcceptCount

Escena 1

Escenario 2

Escenario 3

Ajuste de MaxThreads

En términos generales, el rendimiento del servidor debe analizarse desde dos aspectos:

1. Indicadores informáticos de la CPU

2. Indicadores de uso intensivo de IO

Por lo tanto, en la mayoría de los casos, Tomcat maneja más solicitudes de tipo IO, como llamadas de interfaz pública con datos de consulta de base de datos.

Además, cuando Tomcat tiene una gran cantidad de solicitudes simultáneas, también se debe considerar la optimización de los parámetros del sistema del servidor, como la configuración de la memoria de la máquina virtual, las restricciones de archivos abiertos de Linux, etc.

¿Qué tan apropiada es la configuración de maxThreads?

Sabemos que demasiados subprocesos harán que la CPU dedique cada vez más tiempo a cambiar de subproceso. Si hay muy pocos subprocesos, el rendimiento de respuesta de solicitud del servidor disminuirá drásticamente, por lo que la configuración de maxThreads definitivamente no es tan grande como sea posible.

La situación real es que no existe una solución óptima para configurar el tamaño de maxThreads, y debe ajustarse y optimizarse continuamente de acuerdo con la configuración específica del servidor y los escenarios de aplicación reales.

¿Qué tan apropiada es la configuración de AcceptCount?

Intenta ser coherente con el tamaño de maxThreads. Este valor debe medirse principalmente en comparación con el acceso máximo y promedio a la aplicación.

Cuando utilice URL para el enrutamiento, debe controlar el tiempo de espera de los parámetros zuul.host.connect-time out-millis y zuul.host.socket-time out-millis.

Se agotó el tiempo de espera de la conexión solicitada.

Tiempo de espera de procesamiento de solicitudes

Reintentar todas las solicitudes de operación.

El número de reintentos de la instancia actual y el número máximo de reintentos de la misma instancia de servicio (excluyendo la primera llamada).

El número de reintentos para la siguiente instancia es el mismo que el número de reintentos y el número máximo de reintentos para otras instancias de servicio (excluyendo el primer servidor).

Tenga en cuenta que el tiempo de espera del disyuntor Hystrix debe ser mayor que el tiempo de espera de la cinta; de lo contrario, no se activará el reintento.

La primera llamada de Feign y Ribbon falló después de integrar Hystrix.

En la actualidad, el enfoque más poderoso del autor es deshabilitar el tiempo de espera de Hystrix y establecerlo en falso.

También existen recomendaciones oficiales para establecer un tiempo de espera.

En la ingeniería real, este método también tiene algunas deficiencias. Por ejemplo, si el tiempo de solicitud excede los 5 segundos, habrá solicitudes de datos ocasionales, lo que dará a los usuarios la sensación de que el sistema es inestable y debe corregirse.

Además, el gobierno no recomienda el uso de hystrix.

Principios de configuración del tiempo de espera de Hystrix

Pregunta: Para una solicitud http, si tanto fingir como la cinta están configurados con un mecanismo de reintento, ¿cuántas veces se solicitará un * * * en circunstancias anormales? ?

El número total de solicitudes n es el producto cartesiano de feignClient y los parámetros de configuración de la cinta:

n (número total de solicitudes) = fingir (el valor predeterminado es 5 veces) * (MaxAutoRetries 1 ) * (MaxAutoRetriesNextServer 1 )

Donde 1 representa la solicitud predeterminada para la cinta misma.

De hecho, estos dos mecanismos de reintento son independientes entre sí y no tienen conexión. Pero debido a que fingir definitivamente usará la cinta, el mecanismo de reintento de fingir es relativamente trivial y esta característica generalmente está desactivada. La configuración predeterminada del mecanismo de reintento de Ribbon es 0, lo que significa que el mecanismo de reintento se elimina de forma predeterminada. Se recomienda no modificarlo.