Red de conocimiento informático - Problemas con los teléfonos móviles - Equilibrio de carga seccionado

Equilibrio de carga seccionado

Equilibrio de carga del lado del servidor:

Un dispositivo de equilibrio de carga de hardware o un módulo de software de equilibrio de carga de software mantiene una lista de servidores disponibles debajo de él y utiliza la detección de latidos para solucionar problemas de servidores fallidos y garantizar que todos los servidores de la lista puedan ser accedido normalmente. Cuando un cliente envía una solicitud a un dispositivo de equilibrio de carga, el dispositivo elimina la dirección del servidor de la lista de servidores disponibles que mantiene y la reenvía basándose en algún algoritmo (como sondeo lineal, carga por peso, carga por flujo, etc.) .

Balanceo de carga del cliente: carga según tus necesidades.

La mayor diferencia entre el equilibrio de carga del lado del cliente y el equilibrio de carga del lado del servidor es dónde se almacena la lista de direcciones del lado del servidor y dónde está el algoritmo de carga.

2. Spring Cloud implementa un mecanismo de equilibrio de carga

Spring Cloud Ribbon es una herramienta de equilibrio de carga del cliente basada en HTTP y TCP, que se implementa en función de Netflix Ribbon. Encapsulado por Spring Cloud, nos permite convertir fácil y automáticamente solicitudes de plantillas REST orientadas a servicios en llamadas de servicio de equilibrio de carga del lado del cliente. Ribbon implementa el equilibrio de carga del cliente y el equilibrador de carga proporciona muchos pares de .netflix.client.conf.CommonClientConfigKey.

> lt; clientNamegt;.NFLoadBalancerRuleClassName=xx

lt;clientNamegt;.lt;nameSpacegt;.NFLoadBalancerPingClassName=xx

lt;clientNamegt;.lt;nameSpacegt; .NIWSServerListClassName=xx

lt .NIWSServerListFilterClassName=xx<; /p>

com.netflix.client.config.IClientConfig.Ribbon configuración del cliente: configuración del cliente Ribbon, la implementación predeterminada es com .netflix.client.config.DefaultClientConfigImpl.

com.netflix.loadbalancer.IRule: la estrategia de equilibrio de carga de Ribbon, implementada por com.netflix.loadbalancer.ZoneAvoidanceRule de forma predeterminada, se utiliza para seleccionar la mejor zona de acceso para instancias en un entorno multizona.

com.netflix.loadbalancer.IPing: estrategia de verificación de instancias de Ribbon. De forma predeterminada, se utiliza com.netflix.loadbalancer.NoOpPing. Esta es una implementación especial que en realidad no verifica si la instancia está disponible. en su lugar, siempre devuelve verdadero, lo que supone que todas las instancias de servicio están disponibles de forma predeterminada.

com.netflix.loadbalancer.ServerList: el mecanismo para mantener la lista de instancias de servicio, la implementación predeterminada es com.netflix.loadbalancer.ConfigurationBasedServerList.

com.netflix.loadbalancer.ServerListFilter: el mecanismo de filtrado de la lista de instancias de servicio, implementado por org.springframework.cloud.netflix.ribbon.ZonePreferenceServerListFilter de forma predeterminada. ZonePreferenceServerListFilter: un mecanismo de filtrado para la lista de instancias de servicio que da prioridad a las instancias de servicio ubicadas en la misma zona que el solicitante.

com.netflix.loadbalancer.ILoadBalancer: equilibrador de carga, implementado de forma predeterminada mediante com.netflix.loadbalancer.ZoneAwareLoadBalancer (con reconocimiento de zonas).

La configuración anterior se realizó en un proyecto que no introdujo Spring Cloud Eureka. Cuando se introducen las dependencias de Eureka y Ribbon, la configuración automatizada será ligeramente diferente.

El equilibrio de carga de los clientes se puede lograr fácilmente implementando una configuración automatizada. Al mismo tiempo, para algunas necesidades personalizadas, podemos reemplazar fácilmente la implementación predeterminada anterior. Simplemente cree la instancia de implementación correspondiente en la aplicación Springboot para anular estas implementaciones de configuración predeterminada.

@Configuration

clase pública MyRibbonConfiguration {

@Bean

pública IRule RibbonRule(){

retorno new RandomRule ();

}

}

Esto reemplaza el com.netflix.loadbalancer.ZoneAvoidanceRule predeterminado con una instancia de RandomRule que usa P.

También se puede lograr una funcionalidad más detallada utilizando la anotación @RibbonClient. Configuración del cliente

Hay dos formas de configurar los parámetros de Ribbon: configuración global y configuración de cliente específica

La configuración global es muy simple

Solo use Ribbon.lt; ;=lt;valorgt; formato. Entre ellos, lt; keygt; representa el nombre del parámetro de la configuración del cliente Ribbon y lt; valuegt; Por ejemplo, podemos configurar el tiempo de espera de la cinta de la siguiente manera

Ribbon.ConnectTimeout=250

Ribbon.ConnectTimeout=250

. ServerListRefreshInterval=2000 RibbonGetServicesTimingTimeout

La configuración global se puede establecer en el valor predeterminado Cuando el cliente especificado se configura con el valor clave correspondiente, la configuración global se sobrescribirá

Especifique el cliente. método de configuración

p>

lt;clientgt;.ribbon.lt;keygt;=lt;valuegt;Formato de configuración. lt; clientgt; representa el nombre del servicio. Por ejemplo, cuando no existe un marco de gobernanza del servicio (como Eureka), debemos especificar la lista de instancias. Puede especificar el nombre del servicio para una configuración detallada. user-service.ribbon. listOfServers.ribbon.keyltt;=lt;valuegt; Indica el nombre del servicio.

Ribbon.listOfServers=localhost:8080, localhost:8081, localhost:8082

Para obtener definiciones de claves y tipos de valores de los parámetros de la cinta, puede ver la clase com.netflix.client.config.CommonClientConfigKey.

Cuando las dependencias Spring Cloud Ribbon y Spring Cloud Eureka se introducen en una aplicación Spring Cloud, se activará la configuración automática de Ribbon implementada en Eureka. La implementación del mecanismo de mantenimiento de la lista de servidores será anulada por una instancia de com.netflix.niws.loadbalancer.DiscoveryEnabledNIWSServerList, que entregará la lista de servicios al mecanismo de gestión de servicios de Eureka para su mantenimiento. Una instancia de com.netflix.niws.loadbalancer.DiscoveryEnabledNIWSServerList.NIWSDiscoveryPing anulará la implementación de IPing, lo que también entregará el mantenimiento de la interfaz de la instancia al marco de gobierno del servicio. De forma predeterminada, la implementación de la interfaz ServerList utilizada para obtener solicitudes de instancia utilizará org.springframework.cloud.netflix.ribbon.eureka.DomainExtractingServerList encapsulado en Spring Cloud Eureka. El propósito es hacer que la estrategia de mantenimiento de la instancia sea más general, por lo que los metadatos físicos. se utilizará para el equilibrio de carga en lugar de utilizar metadatos locales de AWS AMI. Cuando se usa junto con Spring Cloud Eureka, no es necesario especificar un parámetro user-service.ribbon.listOfServers similar para especificar una lista específica de instancias de servicio, porque Eureka mantendrá una lista de instancias para todos los servicios para nosotros y para Ribbon. Configuración de parámetros, todavía podemos usar Las dos primeras configuraciones están implementadas.

Además, dado que Spring Cloud Ribbon implementa la política de afinidad regional de forma predeterminada, se pueden implementar esquemas de configuración de instancias regionalizadas a través de la configuración de metadatos de la instancia de Eureka. Por ejemplo, las instancias en diferentes salas de computadoras se pueden configurar con diferentes valores de región como una implementación del mecanismo de contenedor entre regiones. La implementación también es muy simple: simplemente agregue el parámetro de zona en los metadatos de la instancia de servicio y especifique la zona donde se encuentra, por ejemplo:

eureka.instance.metadataMap.zone=shanghai

En proyectos que combinan Spring Cloud Ribbon y Spring Cloud, podemos deshabilitar la implementación de mantenimiento de Eureka de las instancias del servicio Ribbon a través de parámetros. En este momento, usted mismo debe mantener la lista de instancias de servicio.

Ribbon.eureka.enabled=false.

Dado que el mecanismo de gobernanza del servicio implementado por Spring Cloud Eureka enfatiza el principio de límite del mecanismo ap (es decir, disponibilidad y confiabilidad), es diferente del énfasis en cp (consistencia, confiabilidad) La mayor diferencia entre el cuidador del zoológico y el marco de calidad del servicio es que Eureka está diseñado para lograr una calidad de servicio más sólida. La mayor diferencia es que para lograr una mayor disponibilidad del servicio, Eureka sacrifica cierto grado de coherencia y prefiere aceptar instancias fallidas en lugar de descartar instancias "saludables" en casos extremos.

Por ejemplo, si la red de registro de servicios falla y se desconecta, todas las instancias de servicio en la gobernanza de servicios de la aplicación de estrés se abandonarán porque no pueden mantener el latido de actualización, y Eureka activará el mecanismo de protección. porque 85 La instancia anterior ha perdido su latido y el registro retendrá todos los nodos en este momento para lograr un escenario en el que los servicios aún puedan llamarse entre sí, incluso si los servicios aún no se pueden llamar. El registro retendrá todos los nodos en este momento para lograr un escenario en el que los servicios aún puedan llamarse entre sí incluso si algunos nodos fallan, pero esto continuará garantizando el consumo normal de la mayoría de los servicios.

En la versión Camden, el reintento de primavera está integrado para mejorar la función de reintento de RestTemplate. Para nosotros, los desarrolladores, solo necesitamos configurar una estrategia de reintento simple. p> spring.cloud.loadbalancer.retry.enabled: este parámetro se utiliza para habilitar el mecanismo de reintento. El valor predeterminado está desactivado.

hystrix.command.default.execution.isolation.thread.timeoutInMillisegundos: el tiempo de espera del disyuntor debe ser mayor que el tiempo de espera de la cinta; de lo contrario, no se activará el reintento.

user-service.ribbon.ConnectTimeout: Solicita tiempo de espera de conexión.

user-service.ribbon.ReadTimeout: Tiempo de espera de procesamiento de solicitudes

user-service.ribbon.OkToRetryOnAllOperations: Reintentar todas las solicitudes de operación.

user-service.ribbon.MaxAutoRetriesNextServer: Número de reintentos para cambiar de instancia.

user-service.ribbon.maxAutoRetries: Número de reintentos para la instancia actual.

De acuerdo con la configuración anterior, cuando la solicitud de acceso falla, intentará acceder a la instancia actual nuevamente (el número de accesos lo configura maxAutoRetries. Si aún falla, cambiará a otra instancia). para el acceso Si aún falla, cambie a otra instancia para el acceso (el número de reemplazos lo configura MaxAutoRetriesNextServer. Si aún no funciona, devuelve el error

Cuando se inicia el proyecto, LoadBalancerAutoConfiguration es automático). La clase de configuración se cargará automáticamente para nosotros. Las condiciones de inicialización de esta clase de configuración automática. Debe haber una clase RestTemplate en el classpath y una clase de implementación LoadBalancerClient.

LoadBalancerAutoConfiguration hace dos cosas por nosotros. La primera es crear un Bean interceptor LoadBalancerInterceptor para interceptar las solicitudes iniciadas por el cliente para lograr el equilibrio de carga del cliente.

Creamos un bean RestTemplateCustomizer para agregar el interceptor LoadBalancerInterceptor a RestTemplate.

El método de interceptación de org.springframework.cloud.client.loadbalancer.LoadBalancerInterceptor se ejecutará en cada solicitud. LoadBalancerInterceptor tiene una referencia A a la instancia de LoadBalancerClient (cliente de carga de cliente)

Utilice este método para obtener la URL de solicitud del nombre del servicio en el interceptor (por ejemplo, /p/1bd66db5dc46

¿Cinta de descripción general de funciones de Spring Cloud Series Six, componentes principales y configuración del archivo de propiedades?

/p/f86af82fa782

El artículo de referencia está registrado en mis notas en la nube

Documento: 04_ribbon load balancing.note

Enlace: /noteshare?id= 74e2434f21c3e96fb106be44fd8ed0b9 amp;sub=2516B0E6DFEE4786B26D9528AF522928