Microservices en Rust : par où commencer sans perdre la tête

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Pourquoi Rust est votre prochaine étape dans les microservices ?

\n\n

Le monde des microservices a longtemps été partagé entre Java (avec son Spring Boot), Python (FastAPI, Django) et Go. Mais ces dernières années, on entend de plus en plus la voix de Rust. Pourquoi ? Parce que Rust offre ce qui semblait auparavant inaccessible : les performances du C++ et la sécurité mémoire — sans ramasse-miettes.

\n\n

Si vous écrivez en Python, vous êtes habitué à la rapidité de développement. Mais lorsque la charge augmente, Python commence à « ralentir ». Rust résout ce problème radicalement : un microservice en Rust peut remplacer 3 à 4 services en Python en termes de performances. Et en plus, le code ne « plante » pas à l'exécution avec une NullPointerException.

\n\n

Dans cet article, nous ne philosopherons pas. Nous allons prendre et écrire un microservice en Rust de zéro. Vous verrez que ce n'est pas effrayant, mais plutôt passionnant.

\n\n

Préparer l'environnement : ce qu'il faut installer

\n\n

Avant d'écrire du code, assurons-nous que vous avez tout le nécessaire. Si vous êtes débutant en Rust — n'ayez pas peur, l'installation prend 2 minutes.

\n\n

1. Installation de Rust

\n

Le moyen le plus simple est via l'installateur officiel rustup :

\n\n
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
\n\n

Après l'installation, vérifiez la version :

\n\n
rustc --version\ncargo --version
\n\n

2. Choix de l'éditeur

\n

Je recommande VS Code avec l'extension rust-analyzer. Cela vous donnera l'autocomplétion, la mise en évidence des erreurs et le refactoring « prêts à l'emploi ».

\n\n

3. Docker (pour la conteneurisation)

\n

Les microservices vivent généralement dans des conteneurs. Installez Docker Desktop ou Docker Engine. Nous construirons une image à la fin de l'article.

\n\n

Choisir le framework : Actix-web vs Axum vs Rocket

\n\n

Dans le monde de Rust, il existe trois frameworks principaux pour les serveurs HTTP. Voici leur brève comparaison :

\n\n
    \n
  • Actix-web — le plus rapide (jusqu'à 1 million de requêtes/s). Mature, beaucoup d'exemples. Idéal pour la production.
  • \n
  • Axum — moderne, créé par les développeurs de Tokio. S'intègre le mieux avec l'écosystème async.
  • \n
  • Rocket — la syntaxe la plus « conviviale », mais se met à jour plus lentement.
  • \n
\n\n

Dans cet article, nous utiliserons Actix-web, car il est éprouvé depuis des années et possède la plus grande communauté. Mais si vous voulez une stack « tendance » — prenez Axum sans hésiter.

\n\n

Premier microservice : service de raccourcissement de liens

\n\n

Pour ne pas être abstraits, écrivons un vrai microservice — un url-shortener. Il prendra une URL longue et retournera une URL courte.

\n\n

Étape 1. Créer le projet

\n
cargo new url-shortener\ncd url-shortener
\n\n

Étape 2. Ajouter les dépendances

\n

Ouvrez Cargo.toml et ajoutez :

\n\n
[dependencies]\nactix-web = "4"\nserde = { version = "1", features = ["derive"] }\nserde_json = "1"\nuuid = { version = "1", features = ["v4"] }\ntokio = { version = "1", features = ["full"] }
\n\n

Étape 3. Écrire le code

\n

Remplacez le contenu de src/main.rs par le code suivant :

\n\n
use actix_web::{web, App, HttpServer, HttpResponse, Responder};\nuse serde::{Deserialize, Serialize};\nuse std::sync::Mutex;\nuse uuid::Uuid;\n\n// Structure pour stocker les liens en mémoire\nstruct AppState {\n    links: Mutex>,\n}\n\n#[derive(Serialize, Deserialize, Clone)]\nstruct Link {\n    id: String,\n    url: String,\n}\n\n#[derive(Deserialize)]\nstruct CreateLinkRequest {\n    url: String,\n}\n\n// POST /shorten — crée un lien court\nasync fn shorten(data: web::Data<AppState>, body: web::Json<CreateLinkRequest>) -> impl Responder {\n    let new_link = Link {\n        id: Uuid::new_v4().to_string()[..8].to_string(), // on prend les 8 premiers caractères de l'UUID\n        url: body.url.clone(),\n    };\n\n    let mut links = data.lin                

Blogs

Book Recommendations