Guide complet sur Nacos : Maîtriser la découverte de services et la gestion de configuration

Dans l'écosystème moderne des microservices, la découverte dynamique des instances et la gestion centralisée des configurations sont devenues des piliers indispensables. Nacos (Dynamic Naming and Configuration Service), un projet open-source initié par Alibaba, s'impose comme une solution robuste combinant ces deux fonctionnalités essentielles. Ce guide technique détaille comment déployer et intégrer Nacos dans vos architectures logicielles.

1. Comprendre les fodnements de Nacos

Nacos est conçu pour aider les développeurs à construire, configurer et gérer des plateformes de microservices. Il remplit deux rôles majeurs :

  • Registre de services (Discovery) : Il agit comme un annuaire dynamique où chaque microservice s'enregistre au démarrage, permettant aux autres services de les localiser sans connaître leur adresse IP statique.
  • Centre de configuration (Config Service) : Il permet de centraliser les paramètres applicatifs. Une modification effectuée sur l'interface de Nacos peut être propagée en temps réel aux instances actives sans redémarrage.

2. Installation et démarrage rapide

Nacos nécessite un environnement Java (JDK 8 ou supérieur). Voici la procédure pour un déploiement en mode autonome (standalone).

Sur Linux ou macOS

# Téléchargement de la version stable
wget https://github.com/alibaba/nacos/releases/download/2.2.3/nacos-server-2.2.3.tar.gz

# Extraction
tar -xvf nacos-server-2.2.3.tar.gz
cd nacos/bin

# Lancement en mode autonome
sh startup.sh -m standalone

Une fois démarré, l'interface d'administration est accessible à l'adresse http://localhost:8848/nacos avec les identifiants par défaut nacos/nacos.

3. Intégration avec Spring Cloud : Découverte de services

Imaginons un scénario où un service de gestion de stock (Inventory) est appelé par un service de commande (Order).

3.1 Configuration du fournisseur (Inventory Service)

Ajoutez la dépendance suivante dans votre fichier pom.xml :

<dependency>
   <groupId>com.alibaba.cloud</groupId>
   <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

Fichier application.yml du service d'inventaire :

server:
 port: 9001
spring:
 application:
   name: inventory-module
 cloud:
   nacos:
     discovery:
       server-addr: 127.0.0.1:8848

Contrôleur simple pour exposer une ressource :

@RestController
@RequestMapping("/stock")
public class StockController {
   @Value("${server.port}")
   private String activePort;

   @GetMapping("/check/{productId}")
   public String checkStock(@PathVariable Long productId) {
       return "Produit " + productId + " disponible via l'instance sur le port : " + activePort;
   }
}

3.2 Configuration du consommateur (Order Service)

Le service de commande utilise OpenFeign pour appeler l'inventaire via son nom logique enregistré dans Nacos.

@FeignClient(name = "inventory-module")
public interface InventoryClient {
   @GetMapping("/stock/check/{productId}")
   String verifyProduct(@PathVariable("productId") Long productId);
}

4. Gestion dynamique de la configuration

Nacos permet de modifier des variables d'environnement à la volée grâce à l'annotation @RefreshScope.

Configuration du bootstrap.yml

Il est crucial d'utiliser un fichier bootstrap.yml pour que la configuration soit récupérée avant le démarrage complet du contexte Spring.

spring:
 application:
   name: order-processing
 cloud:
   nacos:
     config:
       server-addr: 127.0.0.1:8848
       file-extension: yaml
       group: DEV_GROUP

Exemple d'utilisation avec rafraîchissement

@RestController
@RefreshScope
public class PromotionController {
   @Value("${app.discount.rate:0}")
   private double discount;

   @GetMapping("/promo")
   public String getCurrentDiscount() {
       return "Le taux de remise actuel est de : " + (discount * 100) + "%";
   }
}

Dans l'interface Nacos, créez un Data ID nommé order-processing.yaml dans le groupe DEV_GROUP et insérez app.discount.rate: 0.15. Le service mettra à jour sa valeur instantanément.

5. Persistance des données avec MySQL

Par défaut, Nacos utilise une base de données embarquée (Derby). Pour une utilisation en production, il est impératif d'utiliser MySQL.

  1. Créez une base de données nommée nacos_config.
  2. Exécutez le script SQL fourni dans le répertoire conf/nacos-mysql.sql.
  3. Modifiez le fichier conf/application.properties :
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://localhost:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user.0=db_admin
db.password.0=votre_mot_de_passe

6. Déploiement en Cluster

Pour garantir une haute disponibilité, Nacos doit être déployé en grappe. Une architecture type comprend :

  • Un minimum de 3 instances Nacos.
  • Une base de données MySQL partagée.
  • Un équilibreur de charge (Nginx ou HAProxy) en frontal.

La configuration des nœuds se fait dans le fichier conf/cluster.conf en listant les adresses IP et ports :

192.168.1.10:8848
192.168.1.11:8848
192.168.1.12:8848

7. Bonnes pratiques de maintenance

  • Namespaces : Utilisez les espaces de noms pour isoler strictement les environnements (dev, test, prod).
  • Metadata : Enrichissez vos instances de services avec des métadonnées (version, zone géographique) pour affiner les stratégies d'équilibrage de charge.
  • Sécurité : Activez l'authentification dans application.properties via nacos.core.auth.enabled=true avant toute exposition sur un réseau non sécurisé.

Étiquettes: Nacos Microservices Spring-Cloud-Alibaba Service-Discovery Configuration-Management

Publié le 20 juin à 16h24