Notas de estudio de Spring Cloud [equilibrio de carga-Cinta]

¿Qué es Spring Cloud Ribbon?

Spring Cloud Ribbon es un balanceador de carga del lado del cliente basado en Netflix Ribbon, que forma parte del ecosistema Spring Cloud para ayudar a los desarrolladores a crear sistemas distribuidos con alta disponibilidad y resiliencia.

Ribbon puede distribuir la carga entre varias instancias de servicio para mejorar la disponibilidad y el rendimiento de la aplicación. Al usar Ribbon, los desarrolladores pueden definir una lista de instancias de servicio disponibles y usar un algoritmo de equilibrio de carga para seleccionar una instancia de esta lista para manejar las solicitudes de los clientes. Además, Ribbon también proporciona algunas otras funciones, como la verificación del estado de la instancia de servicio y el mecanismo de conmutación por error, para garantizar que cuando falla una instancia de servicio, pueda cambiar rápidamente a otras instancias disponibles.

Spring Cloud Ribbon también integra el componente de descubrimiento de servicios de Eureka, que puede obtener una lista de las instancias de servicio disponibles del registro de Eureka. Esto facilita a los desarrolladores la creación de aplicaciones basadas en microservicios y el uso del equilibrio de carga del lado del cliente y el descubrimiento de servicios en las aplicaciones.

¿Qué es LB (equilibrio de carga)?

LB (Load Balancing) es una tecnología que distribuye uniformemente las solicitudes de los clientes a múltiples servidores o clústeres de computadoras para mejorar el rendimiento, la disponibilidad y la escalabilidad del sistema. En un sistema de equilibrio de carga, un equilibrador de carga recibe las solicitudes de los clientes y las reenvía a los servidores o nodos informáticos disponibles para equilibrar las cargas del servidor y mejorar el rendimiento del sistema.

¿Cuál es la diferencia entre el cliente de balanceo de carga local de Ribbon VS el balanceo de carga del servidor Nginx?

El cliente de equilibrio de carga local de cinta y el equilibrio de carga del servidor Nginx son dos tecnologías de equilibrio de carga diferentes, y existen las siguientes diferencias entre ellas:

1. La ubicación es diferente: el cliente de equilibrio de carga local Ribbon se ejecuta en el lado del cliente, mientras que el equilibrio de carga del servidor Nginx se ejecuta en el lado del servidor.

2. Diferentes estrategias de equilibrio de carga: el cliente de equilibrio de carga local Ribbon adopta la estrategia de equilibrio de carga del cliente y asigna solicitudes de clientes a diferentes instancias de servicio de acuerdo con un determinado algoritmo de equilibrio de carga. El equilibrio de carga del lado del servidor de Nginx adopta una estrategia de equilibrio de carga del lado del servidor para reenviar las solicitudes de los clientes al servidor de Nginx primero, y luego el servidor de Nginx distribuye las solicitudes a diferentes servidores back-end.

3. Diferentes funciones: el cliente de balanceo de carga local Ribbon puede implementar funciones como descubrimiento de servicios, balanceo de carga y conmutación por error bajo la arquitectura de microservicio, mientras que el balanceo de carga del servidor Nginx puede implementar funciones como proxy inverso, terminación SSL y almacenamiento en caché.

4. El alcance de la aplicación es diferente: el cliente de balanceo de carga local Ribbon es adecuado para aplicaciones Java y llamadas de servicio en la arquitectura de microservicio Spring Cloud, mientras que el balanceo de carga del servidor Nginx es adecuado para cualquier aplicación, incluidas aplicaciones web, bases de datos, DNS, correo y otros servicios.

Flujo de trabajo de la arquitectura de la cinta

El flujo de trabajo de la arquitectura de equilibrio de carga de Ribbon es el siguiente:

1. El consumidor del servicio obtiene una lista de los servicios disponibles del registro de servicios.

2. El consumidor del servicio utiliza el balanceador de carga del cliente Ribbon para seleccionar una instancia de servicio de la lista de servicios disponibles según una determinada estrategia de balanceo de carga.

3. El consumidor del servicio inicia una solicitud a la instancia de servicio seleccionada.

4. Si la instancia de servicio seleccionada falla, el balanceador de carga del cliente Ribbon cambiará automáticamente a otras instancias de servicio disponibles para garantizar la disponibilidad y la estabilidad del sistema.
inserte la descripción de la imagen aquí

Creación de la demostración de la cinta

Regla de regla

inserte la descripción de la imagen aquí

Clase de regla de equilibrio de carga integrada Descripción de la regla
Regla de todos contra todos Simplemente sondee la lista de servicios para seleccionar un servidor. Es la regla de equilibrio de carga predeterminada de Ribbon.
DisponibilidadRegla de filtradoDisponibilidadRegla de filtrado Primero filtre las instancias defectuosas y luego seleccione las instancias con menos concurrencia
Regla de tiempo de respuesta ponderada Asigne un valor de peso a cada servidor. Cuanto mayor sea el tiempo de respuesta del servidor, menos peso tendrá este servidor. Esta regla seleccionará aleatoriamente un servidor y este valor de ponderación afectará la selección del servidor.
Regla de evitación de zona La selección del servidor se basa en los servidores disponibles en la región. Use Zona para clasificar los servidores, esta Zona puede entenderse como una sala de cómputo, un rack, etc. Luego sondee múltiples servicios en la Zona.
Mejor regla disponible Ignore los servidores que están en cortocircuito y elija servidores con menor simultaneidad.
Regla aleatoria Seleccione al azar un servidor disponible.
regla de reintento Lógica de selección para el mecanismo de reintento

El principio del algoritmo de sondeo de equilibrio de carga de Ribbon

El principio del algoritmo de sondeo del equilibrio de carga de Ribbon es el siguiente:

Cuando el cliente realiza una solicitud al servidor, Ribbon primero obtiene la lista de instancias de servicio; Ribbon
mantiene un contador y agrega 1 al contador para cada solicitud;
Ribbon distribuye la solicitud a cada instancia en la lista de instancias de servicio en un sondeo y los distribuye a su vez;
si una instancia de servicio no puede proporcionar servicios debido a una falla o razones de red, Ribbon eliminará la instancia de la lista de servicios;
si todas las instancias en la lista de instancias de servicio no están disponibles, se devolverá un mensaje de error .

Configurar una IRule personalizada

El libro es la continuación del capítulo anterior y continúa modificándose en la demostración anterior.
Modifique el proyecto de autenticación.
El documento oficial da claramente una advertencia:
这个自定义配置类不能放在@ComponentScan所扫描的当前包下以及子包下,否则我们自定义的这个配置类就会被所有的Ribbon客户端所共享,达不到特殊化定制的目的了。
por lo que debemos distinguirlo del camino springcloud
inserte la descripción de la imagen aquí

Crear una nueva clase de configuración MyRuleConfig

@Configuration
public class MyRuleConfig{
    
    
    @Bean
    public IRule myRule() {
    
    
        // 定义为随机
        return new RandomRule();
    }
}

Agregue @RibbonClient a la clase de inicioinserte la descripción de la imagen aquí

@RibbonClient(name = "LF-USER", configuration = MyRuleConfig.class)

prueba

inserte la descripción de la imagen aquí
Si el acceso es exitoso y se llama varias veces, se encontrará que el puerto es aleatorio cada vez. ya no sondee

Carga de hambre de cinta

En Ribbon, la carga ansiosa es un mecanismo de precarga que reduce el tiempo de demora de la primera solicitud al obtener la lista de instancias de servicio por adelantado cuando se inicia la aplicación. De forma predeterminada, Ribbon solo obtendrá la lista de instancias de servicio cuando llegue la primera solicitud, lo que provocará una gran demora para la primera solicitud. Para resolver este problema, Ribbon proporciona un mecanismo de carga de hambre, que puede obtener previamente una lista de instancias de servicio cuando la aplicación comienza a acelerar el tiempo de respuesta de la primera solicitud.

Al habilitar la carga por inanición cuando se inicia la aplicación, Ribbon obtendrá la lista de servicios del registro de servicios y los almacenará en caché en la memoria local. De esta manera, cuando llega la primera solicitud, Ribbon puede obtener directamente la lista de instancias de servicio del caché local sin tener que solicitar el centro de registro, lo que reduce la demora de la primera solicitud.

La carga de hambre se puede habilitar o deshabilitar configurando ribbon.eager-load.enabled, el valor predeterminado es falso. Si se establece en verdadero, el mecanismo de carga por inanición está habilitado y Ribbon obtendrá previamente la lista de instancias de servicio cuando se inicia la aplicación; si se establece en falso, el mecanismo de carga por inanición está deshabilitado y Ribbon obtendrá la lista de instancias de servicio cuando llega la primera petición.
Por ejemplo:

ribbon:
  eager-load:
    enabled: true

Supongo que te gusta

Origin blog.csdn.net/qq_33129875/article/details/129582465
Recomendado
Clasificación