Directorio
Problemas que enfrentan los sistemas distribuidos
Introducción al tablero de instrumentos
Problemas que enfrentan los sistemas distribuidos
Una aplicación en una arquitectura distribuida compleja tiene docenas de dependencias, y cada dependencia inevitablemente fallará en algún momento.
Avalancha de servicio
Cuando llame entre múltiples microservicios, suponga que el microservicio A llama al microservicio B y al microservicio C, y el microservicio B y el microservicio C llaman a otros microservicios, lo que se denomina "abanico". Si el tiempo de respuesta de una llamada de microservicio en el enlace de despliegue es demasiado largo o no está disponible, la llamada al microservicio A consumirá más y más recursos del sistema, lo que provocará que el sistema se bloquee, el llamado "efecto avalancha".
Para aplicaciones de alto tráfico, una sola dependencia de back-end puede hacer que todos los recursos en todos los servidores se saturen en unos pocos segundos. Peor que las fallas, estas aplicaciones también pueden causar mayores demoras entre los servicios, colas de respaldo ajustadas, subprocesos y otros recursos del sistema, causando más fallas en cascada en todo el sistema. Todo esto indica la necesidad de aislar y gestionar fallas y demoras para que la falla de una sola dependencia no pueda cancelar la aplicación o el sistema completo.
Introducción a hystrix
Hystrix es una biblioteca de código abierto para manejar el retraso y la tolerancia a fallas de los sistemas distribuidos. En un sistema distribuido, muchas dependencias inevitablemente no se llamarán, como tiempos de espera, excepciones, etc. No causará una falla general del servicio, evitará fallas en cascada y mejorará la flexibilidad del sistema distribuido.
El "disyuntor" en sí mismo es un dispositivo de conmutación. Después de que una unidad de servicio falla, la supervisión de fallas del disyuntor (similar a un fusible quemado) devuelve una respuesta invocable que puede manejarse (FallBack) a la persona que llama. , En lugar de esperar mucho tiempo o lanzar una excepción que la persona que llama no puede manejar , esto asegura que el hilo de la persona que llama al servicio no se ocupará innecesariamente durante mucho tiempo, evitando así la propagación de fallas en el sistema distribuido, e incluso Avalancha
¿Qué puede hacer Hystrix?
Degradación del servicio
Fusible de servicio
Límite de servicio
Monitoreo casi en tiempo real
Fusible de servicio
El mecanismo de fusible es un mecanismo de protección de enlace de microservicio para tratar el efecto de avalancha.
Cuando un microservicio del enlace de despliegue no está disponible o el tiempo de respuesta es demasiado largo, el servicio se degradará, y luego se fusionará la llamada del microservicio del nodo, y la información de respuesta de "error" se devolverá rápidamente. Cuando se detecta que la respuesta de llamada al microservicio del nodo es normal, se restablece el enlace de la llamada. En el marco de Spring Cloud, el mecanismo de fusibles se implementa a través de Hystrix. Hystrix supervisará el estado de las llamadas entre microservicios. Cuando una llamada fallida alcanza un cierto umbral, el valor predeterminado es que 20 llamadas fallidas en 5 segundos iniciarán el mecanismo de fusible. La anotación del mecanismo de fusible es @HystrixCommand.
Degradación del servicio
Los recursos generales son casi insuficientes, y algunos servicios se cerrarán con dolores dolorosos, y las dificultades se superarán antes de volver a abrir.
El procesamiento de degradación del servicio se realiza en el lado del cliente y no tiene nada que ver con el lado del servidor
package com.atguigu.springcloud.service;
import java.util.List;
import org.springframework.stereotype.Component;
import com.atguigu.springcloud.entities.Dept;
import feign.hystrix.FallbackFactory;
@Component//不要忘记添加,不要忘记添加
public class DeptClientServiceFallbackFactory implements FallbackFactory<DeptClientService>
{
@Override
public DeptClientService create(Throwable throwable)
{
return new DeptClientService() {
@Override
public Dept get(long id)
{
return new Dept().setDeptno(id)
.setDname("该ID:"+id+"没有没有对应的信息,Consumer客户端提供的降级信息,此刻服务Provider已经关闭")
.setDb_source("no this database in MySQL");
}
@Override
public List<Dept> list()
{
return null;
}
@Override
public boolean add(Dept dept)
{
return false;
}
};
}
}
package com.atguigu.springcloud.service;
import java.util.List;
import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import com.atguigu.springcloud.entities.Dept;
@FeignClient(value = "MICROSERVICECLOUD-DEPT",fallbackFactory=DeptClientServiceFallbackFactory.class)
public interface DeptClientService
{
@RequestMapping(value = "/dept/get/{id}",method = RequestMethod.GET)
public Dept get(@PathVariable("id") long id);
@RequestMapping(value = "/dept/list",method = RequestMethod.GET)
public List<Dept> list();
@RequestMapping(value = "/dept/add",method = RequestMethod.POST)
public boolean add(Dept dept);
}
Introducción al tablero de instrumentos
Además de aislar llamadas a servicios dependientes, Hystrix también proporciona monitoreo de llamadas casi en tiempo real (Hystrix Dashboard). Hystrix registrará continuamente la información de ejecución de todas las solicitudes iniciadas a través de Hystrix y la mostrará a los usuarios en forma de informes estadísticos y gráficos, incluidos Cuántas solicitudes se ejecutan por segundo, cuántos éxitos, cuántos fracasos, etc. Netflix monitorea las métricas anteriores a través del proyecto hystrix-metrics-event-stream. Spring Cloud también proporciona la integración de Hystrix Dashboard para convertir el contenido de monitoreo en una interfaz visual.