Todos los productos
Search
Centro de documentos

Enterprise Distributed Application Service:Implement load balancing

Última actualización: Sep 04, 2026

Cuando varias instancias de un servicio se ejecutan detrás de un único nombre de servicio, el consumidor necesita un mecanismo para distribuir las solicitudes entre ellas. Las aplicaciones Spring Cloud en Enterprise Distributed Application Service (EDAS) utilizan Ribbon para realizar el balanceo de carga del lado del cliente. Ribbon intercepta las llamadas al servicio realizadas mediante RestTemplate y Feign, y luego distribuye las solicitudes entre las instancias registradas en Nacos.

Funcionamiento

Nacos funciona como registro de servicios. Cuando un consumidor de servicios llama a un proveedor por su nombre (por ejemplo, http://service-provider/query), Ribbon resuelve el nombre a una lista de instancias registradas y distribuye las solicitudes entre ellas.

Nacos implementa la interfaz estándar com.netflix.loadbalancer.ServerList a través de NacosServerList. Otras herramientas de descubrimiento de servicios implementan la misma interfaz:

Herramienta de descubrimiento de servicios

Implementación de ServerList

Nacos

NacosServerList

Eureka

DomainExtractingServerList

Consul

ConsulServerList

ZooKeeper

ZookeeperServerList

Dado que todas las implementaciones comparten esta interfaz, cambiar de Eureka, Consul o ZooKeeper a Spring Cloud Alibaba no requiere modificaciones en su código de RestTemplate, Feign o AsyncRestTemplate (en desuso).

Al desarrollar aplicaciones localmente, puede utilizar el complemento Alibaba Cloud Toolkit para habilitar llamadas mutuas entre aplicaciones locales y aplicaciones desplegadas en EDAS; esto se conoce como interconexión de extremo a nube. De este modo, no es necesario configurar una VPN y se mejora la eficiencia del desarrollo. Para obtener más información, consulte Overview of end-to-cloud interconnection.

Requisitos previos

Antes de empezar, asegúrese de contar con lo siguiente:

  • Una aplicación Spring Cloud desplegada en EDAS con Nacos como registro de servicios

  • Como mínimo, un proveedor de servicios y un consumidor de servicios

  • (Opcional) La dependencia Hystrix agregada a su consumidor para garantizar la compatibilidad entre EDAS y Hystrix. Esta admite el atributo fallback, lo cual también puede implementarse mediante Sentinel

Aplicaciones de ejemplo

Descargue los proyectos de demostración para seguir los pasos:

Adición de balanceo de carga a RestTemplate

RestTemplate es un cliente HTTP de Spring para servicios RESTful. Agregue la anotación @LoadBalanced a un bean de RestTemplate para habilitar el balanceo de carga del lado del cliente.

public class MyApp {

    // The @LoadBalanced annotation adds LoadBalancerInterceptor to this RestTemplate.
    // LoadBalancerInterceptor uses RibbonLoadBalancerClient to distribute requests
    // across service instances registered in Nacos.
    @Autowired
    private RestTemplate restTemplate;

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

    // Use the service name ("service-provider") instead of a hostname.
    // Ribbon resolves it to an available instance.
    public void doSomething() {
        Foo foo = restTemplate.getForObject("http://service-provider/query", Foo.class);
        doWithFoo(foo);
    }

    ...
}
  • La anotación @LoadBalanced en el método @Bean registra un LoadBalancerInterceptor que enruta las solicitudes a través de RibbonLoadBalancerClient.

  • Utilice el nombre del servicio (por ejemplo, service-provider) como nombre de host en la URL. Ribbon lo reemplaza por la dirección IP y el puerto de una instancia disponible.

Adición de balanceo de carga a Feign

Feign es un cliente HTTP declarativo que simplifica las llamadas a API RESTful. El balanceo de carga funciona automáticamente cuando un cliente Feign hace referencia a un nombre de servicio registrado en Nacos.

  1. Paso 1: Habilitar Feign

    Agregue @EnableFeignClients a la clase de su aplicación Spring Boot:

    @SpringBootApplication
    @EnableFeignClients
    public class MyApplication {
        ...
    }
  2. Paso 2: Definir una interfaz de cliente Feign

    Cree una interfaz anotada con @FeignClient. Establezca el parámetro name con el nombre del servicio destino:

    @FeignClient(name = "service-provider")
    public interface EchoService {
        @RequestMapping(value = "/echo/{str}", method = RequestMethod.GET)
        String echo(@PathVariable("str") String str);
    }
  3. Paso 3: Inyectar y llamar al cliente Feign

    Inyecte la interfaz y llame a sus métodos. Cada llamada desencadena una solicitud HTTP hacia una de las instancias de service-provider:

    public class MyService {
    
        @Autowired
        private EchoService echoService;
    
        public void doSomething() {
            // Equivalent to GET http://service-provider/echo/test
            // Ribbon selects an instance from Nacos and routes the request.
            echoService.echo("test");
        }
    
        ...
    }

Comprobación del balanceo de carga

Una vez iniciados el servicio service-consumer y varios servicios service-provider, acceda a la URL proporcionada por service-consumer para comprobar si el balanceo de carga está implementado correctamente.

  • RestTemplate

    Acceda a /echo-rest/rest-test varias veces y compruebe si las solicitudes se reenvían a distintas instancias.

  • Feign

    Acceda a /echo-feign/feign-test varias veces y compruebe si las solicitudes se reenvían a distintas instancias.