Tous les produits
Search
Centre de documentation

Enterprise Distributed Application Service:Implement load balancing

Dernière mise à jour :Aug 10, 2026

Lorsque plusieurs instances d’un service s’exécutent derrière un même nom de service, le consommateur doit répartir les requêtes entre elles. Les applications Spring Cloud sur Enterprise Distributed Application Service (EDAS) utilisent Ribbon pour l’équilibrage de charge côté client. Ribbon intercepte les appels de service via RestTemplate et Feign, puis distribue les requêtes entre les instances enregistrées dans Nacos.

Fonctionnement

Nacos fait office de registre de services. Lorsqu’un consommateur appelle un fournisseur par son nom (par exemple, http://service-provider/query), Ribbon résout ce nom en une liste d’instances enregistrées et répartit les requêtes entre celles-ci.

Nacos implémente l’interface standard com.netflix.loadbalancer.ServerList via NacosServerList. D’autres outils de découverte de services implémentent la même interface :

Outil de découverte de services Implémentation de ServerList
Nacos NacosServerList
Eureka DomainExtractingServerList
Consul ConsulServerList
ZooKeeper ZookeeperServerList

Comme toutes les implémentations partagent cette interface, le passage d’Eureka, Consul ou ZooKeeper à Spring Cloud Alibaba ne nécessite aucune modification du code RestTemplate, Feign ou AsyncRestTemplate (déprécié).

Lors du développement local d’applications, utilisez le plug-in Alibaba Cloud Toolkit pour activer les appels mutuels entre les applications locales et celles déployées dans EDAS (interconnexion end-to-cloud). Vous évitez ainsi la configuration d’un VPN et améliorez l’efficacité du développement. Pour plus d’informations, consultez Présentation de l’interconnexion end-to-cloud.

Prérequis

Avant de commencer, assurez-vous d’avoir :

  • Une application Spring Cloud déployée sur EDAS avec Nacos comme registre de services

  • Au moins un fournisseur de services et un consommateur de services

  • (Facultatif) La dépendance Hystrix ajoutée à votre consommateur pour garantir la compatibilité entre EDAS et Hystrix. Elle prend en charge l’attribut fallback. Sentinel permet également d’implémenter cette fonctionnalité.

Exemples d’applications

Téléchargez les projets de démonstration pour suivre les étapes :

Ajouter l’équilibrage de charge à RestTemplate

RestTemplate est un client HTTP Spring destiné aux services RESTful. Ajoutez l’annotation @LoadBalanced à un bean RestTemplate pour activer l’équilibrage de charge côté client.

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);
    }

    ...
}
  • L’annotation @LoadBalanced sur la méthode @Bean enregistre un LoadBalancerInterceptor qui achemine les requêtes via RibbonLoadBalancerClient.

  • Utilisez le nom du service (par exemple, service-provider) comme nom d’hôte dans l’URL. Ribbon le remplace par l’adresse IP et le port d’une instance disponible.

Ajouter l’équilibrage de charge à Feign

Feign est un client HTTP déclaratif qui simplifie les appels d’API RESTful. L’équilibrage de charge fonctionne automatiquement lorsqu’un client Feign référence un nom de service enregistré dans Nacos.

  1. Étape 1 : Activer Feign

    Ajoutez @EnableFeignClients à la classe de votre application Spring Boot :

    @SpringBootApplication
    @EnableFeignClients
    public class MyApplication {
        ...
    }
  2. Étape 2 : Définir une interface de client Feign

    Créez une interface annotée avec @FeignClient. Définissez le paramètre name sur le nom du service cible :

    @FeignClient(name = "service-provider")
    public interface EchoService {
        @RequestMapping(value = "/echo/{str}", method = RequestMethod.GET)
        String echo(@PathVariable("str") String str);
    }
  3. Étape 3 : Injecter et appeler le client Feign

    Injectez l’interface et appelez ses méthodes. Chaque appel déclenche une requête HTTP vers l’une des instances 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");
        }
    
        ...
    }

Vérifier l’équilibrage de charge

Après le démarrage du service service-consumer et de plusieurs services service-provider, accédez à l’URL fournie par service-consumer pour vérifier si l’équilibrage de charge est correctement mis en œuvre.

  • RestTemplate

    Accédez plusieurs fois à /echo-rest/rest-test et vérifiez si les requêtes sont transmises à différentes instances.

  • Feign

    Accédez plusieurs fois à /echo-feign/feign-test et vérifiez si les requêtes sont transmises à différentes instances.