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.
- Créez une base de données nommée
nacos_config. - Exécutez le script SQL fourni dans le répertoire
conf/nacos-mysql.sql. - 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.propertiesvianacos.core.auth.enabled=trueavant toute exposition sur un réseau non sécurisé.