Red de conocimiento informático - Problemas con los teléfonos móviles - Análisis sobre el principio del mecanismo disyuntor Spring Cloud Hystrix

Análisis sobre el principio del mecanismo disyuntor Spring Cloud Hystrix

1. Introducción

En una arquitectura de sistema distribuido, varios sistemas generalmente se comunican a través de llamadas RPC remotas, es decir, el sistema A llama a los servicios del sistema B y el sistema B llama a los del sistema C. servicios. Cuando la aplicación de cola C falla y el sistema B no tiene servicio, puede provocar que B o incluso el sistema A queden paralizados. Este fenómeno se denomina fenómeno de avalancha. Por lo tanto, el diseño del sistema debe adoptar una determinada estrategia de degradación para garantizar que cuando el servicio del proveedor de servicios no esté disponible, la persona que llama al servicio pueda cambiar a la ejecución de la estrategia de degradación.

Hystrix se basa en el principio algorítmico de autorretroalimentación para ajustar el estado del fusible.

Podemos pensar en un fusible como un fusible. En un sistema de circuito, generalmente los hay. Líneas entre aparatos eléctricos y fuentes de alimentación externas. Hay un fusible. Cuando el voltaje externo es demasiado alto y alcanza el punto de fusión del fusible, el fusible se fundirá. Cuando el voltaje externo es demasiado alto y alcanza el punto de fusión del fusible, el fusible se fundirá, cortando así la conexión entre el sistema de electrodomésticos y el circuito externo y protegiendo el sistema de electrodomésticos de daños debido a un voltaje excesivo.

Hystrix proporciona una funcionalidad similar para fusibles. Cuando la cantidad de veces que la persona que llama llama al servicio del proveedor de servicios alcanza el umbral establecido dentro de un cierto período de tiempo, y la cantidad de errores que ocurren alcanza el umbral de error establecido, el servicio se degradará, lo que permitirá a la persona que llama realizar el servicio localmente. establecer tareas. Bajar la estrategia y ya no iniciar llamadas remotas. Sin embargo, Hystrix proporciona un fusible autorregenerable que cambia automáticamente entre estados cerrado, abierto y medio abierto según la interfaz de llamada.

El estado abierto significa que el fusible está abierto, lo que significa que la persona que llama al servicio ejecuta la política de degradación local y no realiza llamadas remotas.

El estado cerrado indica que el disyuntor está cerrado, lo que significa que la persona que llama al servicio inicia directamente una llamada remota.

Por otro lado, el estado semiabierto es un estado intermedio, y cuando el disyuntor esté en este estado, la llamada remota se iniciará directamente.

Tres transiciones de estado:

Abierto -> Medio abierto: cuando el fusible correspondiente a la interfaz de servicio está abierto, todas las personas que llaman al servicio llamarán al servicio ejecutando el método de degradación local. Entonces, ¿cuándo volverán las llamadas remotas?

Hystrix proporciona una estrategia de prueba que establece una ventana de tiempo desde el fusible hasta la llamada remota. Hystrix proporciona una estrategia de prueba, que consiste en establecer una ventana de tiempo desde el estado del fusible al estado abierto para delegar la ejecución del método de degradación del servicio al llamar a la interfaz de servicio. Si el tiempo excede la ventana de tiempo, el estado del fusible cambia de abierto -> estado medio abierto. En este momento, la persona que llama al servicio puede iniciar una llamada remota a la interfaz de servicio en lugar de utilizar la interfaz de degradación local. iniciado o falla, entonces el estado del fusible se restablece al estado abierto y se realiza un nuevo registro de la hora de inicio de la ventana de tiempo.

Medio abierto -> Cerrado: cuando el fusible está medio abierto, la persona que llama al servicio puede iniciar una llamada remota en lugar de utilizar la interfaz de degradación local. Si la llamada remota tiene éxito, el fusible se restablece. el estado cerrado.

Entonces la pregunta es, ¿dónde se utilizan los datos para determinar la transición del fusible de apagado a encendido? De hecho, esto lo hace el objeto HystrixCommandMetrics, que se utiliza para algunos datos métricos que existen en HystrixCommand, como la cantidad de llamadas a la interfaz, la cantidad de llamadas a la interfaz fallidas, etc., que explicaremos más adelante.

Descripción del proceso en la figura:

Nota: La apertura del disyuntor está determinada principalmente por la tasa de error de las llamadas dependientes, es decir, la tasa de error de las llamadas dependientes = el número de solicitudes fallidas/número total de solicitudes. La tasa de error de solicitud predeterminada para la apertura del disyuntor Hystrix es del 50% (en lo sucesivo denominada tasa de error de solicitud) y también hay un parámetro para establecer el número mínimo de solicitudes para abrir el disyuntor en una ventana móvil.

El número mínimo de solicitudes para abrir el disyuntor (llamado tentativamente el número mínimo de solicitudes en la ventana móvil), aquí hay un ejemplo específico: por ejemplo, el número mínimo de solicitudes en la ventana móvil por defecto es 20, en una ventana ( el valor predeterminado es 10 segundos, se puede configurar el tiempo de la ventana móvil estadística), se reciben 19 solicitudes, incluso si las 19 solicitudes fallan, la tasa de error de solicitud llega al 95%, pero el disyuntor no se abrirá. Para las solicitudes de disyuntores, no se cortarán permanentemente, sino que se suspenderán por un período de tiempo (el valor predeterminado es 5000 ms) y luego permitirán que pasen algunas solicitudes. Si la solicitud está en buen estado (Tiempo de respuesta <250 ms), el estado de la solicitud. restaurarse (cancele el disyuntor si no está en buen estado, continúe fusionando). (Es fácil dar a la gente la ilusión de que varias solicitudes fallaron, pero el disyuntor no se activó). Esto se debe a que la cantidad de solicitudes fallidas en la ventana móvil no alcanza la cantidad mínima de solicitudes para encender el disyuntor)

Tercero, resumen

El sistema debe estar diseñado para utilice algún tipo de estrategia de degradación para garantizar que las personas que llaman al servicio puedan cambiar para degradar la ejecución de la política cuando los servicios del proveedor de servicios no estén disponibles. Hystrix se utiliza ampliamente como conjunto de fusibles.

Los amigos que han aprendido sobre microservicios y distribuidos definitivamente estarán familiarizados con el mecanismo del disyuntor. Incluso si no han estudiado sistemáticamente el conocimiento teórico, lo han utilizado en proyectos de desarrollo reales. Se toman medidas para evitar que todo el sistema de servicio se destruya cuando un determinado servicio de nodo falla. Desde una perspectiva empresarial, no es difícil de ver desde una perspectiva operativa.

Esta es la primera vez que el servicio del nodo se cae.