Interpretación de la cinta

Ribbon Introducción

  • RibbonEstá Netflixliberada proyecto de código abierto, la función principal es proporcionar la carga de software de cliente algoritmo de equilibrio se basa HTTPy TCPbalanceo de carga del lado del cliente herramienta
  • springCloudPara Ribbonhacer un segundo paquete, nos permite utilizar la RestTemplatesolicitud de servicio, convertida automáticamente a las llamadas de servicio de balanceo de carga del cliente.
  • Ribbon Admite una variedad de algoritmos de equilibrio de carga y también admite algoritmos de equilibrio de carga personalizados
  • RibbonEs solo un marco de herramientas, relativamente pequeño springCloudy muy conveniente de usar después de empaquetado. No APInecesita implementarse de forma independiente como el registro de servicio, el centro de configuración y la puerta de enlace. RibbonSolo necesita usarse directamente en el código.

Equilibrio de carga del lado del servidor

El equilibrio de carga es uno de nuestros métodos importantes para lidiar con la alta concurrencia, aliviar la presión de la red y expandir la capacidad del servidor, pero en general, lo que llamamos equilibrio de carga generalmente se refiere al equilibrio de carga del lado del servidor, y el equilibrio de carga del lado del servidor se divide en dos tipos. Uno es el equilibrio de carga de hardware y el otro es el equilibrio de carga de software

  • El equilibrio de carga de hardware se realiza principalmente mediante la instalación de equipos de equilibrio de carga dedicados frente a los nodos del servidor, como:F5
  • El equilibrio de carga de software consiste principalmente en instalar algún software con función de equilibrio de carga en el servidor para completar la distribución de solicitudes y lograr el equilibrio de carga, como por ejemplo:LVS 、 Nginx 、Haproxy

Ya sea equilibrio de carga de hardware o equilibrio de carga de software, su principio de funcionamiento no es más que la siguiente imagen

Inserte la descripción de la imagen aquí

Equilibrio de carga del cliente

La aparición de microservicios proporciona otra forma de pensar para la realización del equilibrio de carga: la función de equilibrio de carga está integrada en el consumidor de servicios en forma de biblioteca, en lugar de ser proporcionada de forma centralizada por un dispositivo de equilibrio de carga especificado. Esta solución se denomina equilibrio de carga suave o equilibrio de carga del cliente. Común como: springCloudenRibbon

RibbonSe basa HTTPy TCPel balanceador de carga del cliente, cuando lo haremos Ribbon, y Eurekacuando se use en conjunto, Ribbonirá al Eurekaregistro para obtener la lista de servidores, y luego alcanzará el acceso de sondeo al rol de balanceo de carga, el mecanismo de latido del balanceo de carga del cliente también debe ir Mantener la validez de la lista de servidores. Por supuesto, este proceso debe completarse con el registro de servicios.

En el springCloudmedio, Ribbonprincipalmente relacionado con RestTemplateel objeto y el uso conjunto, Ribbonautomatizará el RestTemplateobjeto de configuración , @LoadBalancedabrirá RestTemplateel equilibrio de carga cuando el objeto de llamada

Equilibrio de carga del servidor Equilibrio de VScarga del cliente

  • Equilibrio de carga del lado del servidor: el cliente primero envía la solicitud al servidor de equilibrio de carga, y luego el servidor de equilibrio de carga utiliza el algoritmo de equilibrio de carga para seleccionar uno de los muchos servidores disponibles para procesar la solicitud
  • Equilibrio de carga del cliente: el cliente mantiene una lista de direcciones de servidor disponibles. Antes de enviar la solicitud, primero selecciona un servidor que se utilizará para procesar la solicitud a través del algoritmo de equilibrio de carga, y luego envía directamente la solicitud al servidor.

Ribbon Ejemplo de implementación del equilibrio de carga del cliente

ControllerCapa de proveedor de servicios

@RestController
@RequestMapping("/api/v1/msg")
public class MessageController {
    
    
 
	@Value("${server.port}")
	private String port;
 
	@GetMapping("/get")
	public String getMsg() {
    
    
		return "This message is sent from port: " + port;
	}
}

Los consumidores de servicios introducen dependencias

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>  

Integración de servicios al consumidor RestTemplateyRibbon

@Bean
@LoadBalanced
public RestTemplate restTemplate(){
    
    
    return new RestTemplate();
}

Utilice Ribbonel equilibrio de carga del cliente

método uno

Clase para comenzar a springinyectar un recipiente con @LoadBalancedanotaciones RestTemplatedebean

@SpringBootApplication
@EnableEurekaClient
public class MessageCenterApplication {
    
    
 
	@Bean
	@LoadBalanced
	public RestTemplate restTemplate() {
    
     
		return new RestTemplate();
	}
 
	public static void main(String[] args) {
    
    
		SpringApplication.run(MessageCenterApplication.class, args);
	}
}
@RestController
@RequestMapping("/api/v1/center")
public class MessageCenterController {
    
    
 
	@Autowired
	private RestTemplate restTemplate;
 
	@GetMapping("/msg/get")
	public Object getMsg() {
    
    
		String msg = restTemplate.getForObject("http://message-service/api/v1/msg/get", String.class);
		return msg;
	}
}

Camino dos

Uso directo de la LoadBalancerClientpolítica de equilibrio de carga para obtener la dirección de servicio disponible y luego solicitar

@RestController
@RequestMapping("/api/v1/center")
public class MessageCenterController {
    
    
 
	@Autowired
	private LoadBalancerClient loadBalancer;
 
	@GetMapping("/msg/get")
	public Object getMsg() {
    
    
		ServiceInstance instance = loadBalancer.choose("message-service");
		URI url = URI.create(String.format("http://%s:%s/api/v1/msg/get", instance.getHost(), instance.getPort()));
		RestTemplate restTemplate = new RestTemplate();
		String msg = restTemplate.getForObject(url, String.class);
		return msg;
	}
}

Una vez iniciada la aplicación, la dirección se solicita tres veces seguidas http://localhost:8781/api/v1/center/msg/gety el resultado devuelto se muestra en la figura

Inserte la descripción de la imagen aquí

Ribbon Estrategia de equilibrio de carga

Estrategia nombre descripción
RandomRule Estrategia aleatoria Seleccionar servidor al azar
RoundRobinRegla Estrategia de sondeo Seleccione el servidor en orden (la estrategia predeterminada de la cinta)
RetryRule Reintentar estrategia En un período de configuración, cuando la selección del servidor no es exitosa, intente seleccionar un servidor disponible todo el tiempo
BestAvailableRule Estrategia de simultaneidad mínima Verifique los servidores uno por uno, si el disyuntor del servidor está abierto, ignórelo y luego seleccione el servidor con el enlace concurrente más bajo
AvailabilityFilteringRule Estrategias de filtrado disponibles Filtre los servidores que han fallado y están marcados como circuito disparado, y filtre aquellos servidores con altas conexiones concurrentes (las conexiones activas exceden el umbral configurado)
ResponseTimeWeightedRule Estrategia ponderada por tiempo de respuesta El peso se asigna según el tiempo de respuesta del servidor, cuanto mayor es el tiempo de respuesta, menor es el peso y menor la probabilidad de ser seleccionado. Cuanto menor sea el tiempo de respuesta, mayor será el peso y mayor la probabilidad de ser seleccionado. Esta estrategia es muy adecuada. Combina varios factores, como: red, disco, io, etc., que inciden directamente en el tiempo de respuesta.
Regla de evitación de zona Estrategia de ponderación regional Juzgue exhaustivamente el rendimiento del área donde se encuentra el servidor y la disponibilidad del servidor, realice una encuesta para seleccionar el servidor y determine si el rendimiento operativo de una zona de AWS está disponible y elimine todos los servidores de la zona no disponible.

Ribbon Volver a intentar la configuración del mecanismo

ribbonLograr el equilibrio de carga, si Ase activa el acceso a un servicio después del tiempo de espera del nodo, ribbonmecanismo de reintento

全局设置
ribbon:
    ReadTimeout: 6000
    ConnectTimeout: 6000
    OkToRetryOnAllOperations: true
    MaxAutoRetries: 1
    MaxAutoRetriesNextServer: 2
    
局部服务设置
service-id:                             # 服务ID
    ribbon:
        ConnectTimeout: 6000            # 毫秒  连接超时时间
        ReadTimeout: 6000               # 毫秒  逻辑处理超时时间
        OkToRetryOnAllOperations: true  # 是否对所有操作都进行重试
        MaxAutoRetries: 1               # 对当前实例的最大重试次数(请求服务超时6s则会再请求一次)    
        MaxAutoRetriesNextServer: 1     # 切换实例的最大重试次数(如果还失败就切换下个实例访问,切换一次)

RibbonProceso de trabajo

Primero: descubrimiento de servicios

Usado para obtener la lista de direcciones: cuando nosotros Ribbony Eurekacuando se usen juntos, Ribboniremos al Eurekaregistro para obtener la lista de instancias del servicio del servidor . Puede ser estático (proporcione un conjunto de direcciones fijas) o dinámico (consulte la lista de direcciones regularmente desde el registro)

Segundo: selección de servicios

Regla de selección de servicio: de acuerdo con la política especificada por el usuario, seleccione una dirección de lista de su lista de instancias. Lo que Ribbonproporciona una serie de estrategias, como sondeo, aleatorio, ponderado de acuerdo con el tiempo de respuesta y similares. Después de obtener una dirección de lista de servicio específica, Feigncomplete la llamada de servicio al

Tercero: monitoreo del servicio

Eso es para eliminar las instancias de servicio no válidas en cualquier momento.

Supongo que te gusta

Origin blog.csdn.net/weixin_38192427/article/details/115191963
Recomendado
Clasificación