1: ¿Qué es Hystrix?
En un entorno distribuido, algunas de las muchas dependencias de servicios inevitablemente fallarán. Hystrix es una biblioteca que lo ayuda a controlar la interacción entre estos servicios distribuidos agregando tolerancia de latencia y lógica de tolerancia a fallas. Hystrix mejora la resistencia general del sistema al aislar los puntos de acceso entre los servicios, detener las fallas en cascada entre los que está entre ellos y proporcionar opciones de retroalimentación.
Hystrix está diseñado para hacer lo siguiente
1: Proporcionar latencia de protección y control y fallas para las dependencias a las que se accede a través de bibliotecas de clientes de terceros (generalmente a través de la red).
2: Aislar fallas en cascada en sistemas distribuidos complejos.
3: Detectar rápidamente la falla y recuperarse lo antes posible.
4: Rebobinar y rebajar con la mayor gracia posible.
5: Habilitar monitoreo, alertas y controles operativos cercanos a tiempo real.
2: ¿Por qué necesitas Hystrix?
En un gran sistema distribuido, un cliente o servicio depende de los servicios externos. Si un servicio está inactivo, establecemos el tiempo de tiempo de espera del sistema de llamadas de servicio, lo que inevitablemente afectará el tiempo correspondiente. En el caso de alta concurrencia, el grupo de subprocesos de la mayoría de los servidores se bloqueará (bloquear), afectando la estabilidad de todo el servicio en línea.
(Foto de foto)
Cuando todo está saludable, la solicitud puede verse así
Cuando uno de los muchos sistemas de servicio de backend cae, todo el usuario solicita:
Si varios clientes llaman al mismo servicio de excepción, se produce la situación:
3: ¿Qué problemas resuelve Hystrix?
Las aplicaciones en arquitecturas distribuidas tienen docenas de dependencias, y cada dependencia inevitablemente tendrá una excepción en algún momento. Si la aplicación no está aislada de estas fallas externas, puede ocurrir el bloqueo de la piscina de subprocesos, causando avalancha del sistema.
Por ejemplo, para las aplicaciones que dependen de 30 servicios, cada servicio tiene un tiempo de actividad del 99.99%, puede:
99.99% de potencia de 30 = 99.7% de tiempo de actividad
0.3% de mil millones de solicitudes = 3,000,000 de fallas
Más de 2 horas de inactividad/mes, incluso con todas las dependencias tiempo de actividad.
Cuando se usa Hystrix para la ruptura del circuito, cada dependencia se aísla entre sí, lo que limita el bloqueo cuando se produce el retraso.
Cuatro: Hystrix combinado con Feign
Cree un proyecto eureka_feign_hystrix_client
contenido de archivo pom.xml
<pendencies> <Spendency> <MoupRoD> org.springframework.cloud </groupid> <artifactID> spring-cloud-starter-feign </artifactid> </pendency> <pendency> <MoupRupId> org.springframework.cloud </groupid> <artifactid> spring-ncroud-sharter-eureka </artifactid> <////////dependence> </dependency> </dependency> </Dependency> <MoupRid> org.springframework.boot </groupid> <artifactid> spring-boot-starter-web </artifactid> </pepertency> <pendency> <grupoD> org.springframework.boot </proupid> <artifactid> spring-boot-starter-actuator </artifactid> </spendency> <fependency> <MoupRid> org.springframework.boot </groupid> <artifactid> spring-boot-starter-test </artifactid> <cope> test </cope> </pependency> </dependencias> <sependencyManagement> <pendencies> <epardency> <uproupid> org.springframeMork.cloud </groupid> <artifactid> springcloudences <Persion> Brixton.sr5 </versewer> <proy> pom </pype> <cope> import </cope> </pendency> </dependencias> </pendencymanagement>
Crear un archivo de inicio
Feignhystrixapplication
@SpringBootApplication@habilitados de consultado@habilitarsefeignClientsPublic Public FeignHyStrixApplication {public static void main (string [] args) {springApplication.run (Feignhystrixapplication.class, args); }}Clase de usuarios
@FeIgnClient (value = "biz-service-0", fallback = userClientHystrix.class) interfaz pública UserClient {@RequestMapping (método = requestmethod.get, value = "/getUser") Usuario público getUserInfo (); @RequestMapping (método = requestMethod.get, value = "/getUser") public String getUserInfoStr (); @RequestMapping (método = requestmethod.get, value = "/info") public String info ();}Cree una clase de Breaker Flasher UserClientHystrix
@ServicePublic Public UserClientHyStrix implementa UserClient {@Override Public User User getUserInfo () {throL nullPointerException ("El servicio getUserInfo () no está disponible ..."); } @Override public String getUserInfoStr () {return "UserClientHystrix getUserInfoStr () es el servicio de retroceso no está disponible."; } @Override public String info () {return "UserClientHystrix Info () es el servicio de respaldo no está disponible ..."; }}Cuando se produce una excepción en la red, puede saltar directamente a la clase de implementación aquí
Crear una clase de acción
Usercontrolador
@AutoWired UserClient UserClient; @RequestMapping (valor = "/getUserInfo", método = requestmethod.get) Usuario público getUserInfo () {return userClient.getUserInfo (); } @RequestMapping (valor = "/getUserInfostr", método = requestmethod.get) public String getUserInfoStr () {return userClient.getUserInfoStr (); } @RequestMapping (valor = "/info", método = requestmethod.get) public String info () {return userClient.info (); }Inicie el proyecto: eureka_register_service (centro de registro)
Luego ejecuta la Feignhystrixapplication que escribimos
En este momento, obviamente descubrimos que el servicio biz-service-0 no se estaba ejecutando, por lo que abrimos http://127.0.0.1:8005/getuserinfostr
Aparecer
UserClientHystrix getUserInfoStr () es alojamiento El servicio no está disponible. .
Este es nuestro resultado de retorno del circuito personalizado
Si no necesita romper la página, esto aparecerá
Whitelabel Error Pagethis La aplicación no tiene una asignación explícita para /error, por lo que está viendo esto como un respaldo. 22 de marzo de marzo 14:32:21 CST 2017 Hay un error inesperado (type = error interno del servidor, estado = 500) .getuserInfo falló y falló.
Dirección del código: https://github.com/zhp8341/springclouddemo
También he leído algunos principios relacionados con Hystrix. Como no he terminado de leerlos todos, todavía no los he escrito. Este artículo se basa en el uso y el aprendizaje de Feign.
Si está interesado, puede consultar los detalles oficiales de Hystrix, pero parece un poco difícil.
Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.