Python vers Rust : 30k lignes migrées, chiffres bruts
En novembre 2025, j'ai pris une décision que 6 mois plus tard me fait encore hésiter : migrer un projet perso de 30 000 lignes de Python vers Rust. Le projet : un pipeline d'ingestion qui lit 12 GB de logs par jour, parse, enrichit, écrit dans une DB. Le Python fonctionnait, mais saturait mon VPS. Le Rust devait être 5-10× plus rapide. Après 6 semaines de migration + 4 mois de prod, voici les chiffres bruts.
Le projet et le pourquoi
Soutenez mon travail sur Patreon
Accès anticipé aux articles, contenu exclusif, et la satisfaction de soutenir un auteur indépendant.
Rejoindre — à partir de 3€/moisLe pipeline tournait sur un VPS 4 vCPU / 16 GB pour 22 € /mois. Python + asyncio + SQLAlchemy + Pydantic. Il consommait 70% du CPU en moyenne, et pendant les pics d'ingestion, il tombait à 95-98% avec de l'accumulation de lag. J'aurais pu upgrader le VPS (44 € pour un 8 vCPU) mais j'avais envie de tester Rust en vrai.
Objectif : même code, même résultat, moins de CPU. Espoir secret : pouvoir downgrader le VPS et économiser 5-10 €/mois.
Les 6 semaines de migration
Semaine 1 — Apprentissage + setup
Je connaissais Rust « en lecture » mais je n'avais jamais livré de code en prod. Semaine d'onboarding : The Rust Book (10h), cargo new, setup CI, premier commit. Productivité réelle : 5% de la cible.
Semaines 2-3 — Parser + modèles
La partie la plus facile. Lire des logs et les parser. Rust brille ici : serde pour la désérialisation, types stricts, performances imbattables. 8 000 lignes Python → 4 200 lignes Rust. Factor de compression : 1,9×.
Mais le temps mis : 2 fois plus long qu'en Python parce que je me battais avec le borrow checker sur des structures imbriquées.
Semaines 4-5 — Pipeline + DB
Intégration SQLx (Postgres async en Rust). Là, ça se corse. Les relations DB dans Rust sont plus verbeuses qu'avec SQLAlchemy. J'ai passé 2 jours entiers sur une erreur lifetime que je n'ai toujours pas vraiment comprise (j'ai workaround avec un Box::leak).
18 000 lignes Python → 12 000 lignes Rust.
Semaine 6 — Tests + déploiement
Écrire les tests en Rust. cargo test est excellent. Déploiement : un binaire cargo build --release de 18 MB, zero dépendance runtime. SCP sur le VPS, systemd service, terminé.
Temps total migration : 6 semaines réelles. Temps estimé original : 3 semaines. Dérapage : 100%.
Les chiffres en prod (4 mois)
| Métrique | Python (avant) | Rust (après) |
|---|---|---|
| CPU moyen | 70% | 8% |
| CPU pic | 98% | 22% |
| RAM moyenne | 4,2 GB | 380 MB |
| Latence p50 (ingest) | 14 ms | 1,2 ms |
| Latence p99 (ingest) | 180 ms | 4 ms |
| Throughput (events/s) | 8 400 | 47 000 |
| Binary size | N/A (Python 95 MB deps) | 18 MB |
| Temps de démarrage | 3,4 s | 40 ms |
La perf est folle. CPU ×9 moins utilisé, RAM ×11 moins, latence ×12 plus basse, throughput ×5,6. Je pouvais donc downgrader mon VPS de 4 vCPU à 2 vCPU (10 € /mois) et économiser 12 €/mois.
Mais. Est-ce que c'est rentable ?
Le coût réel de la migration
- •6 semaines × 30h/semaine = 180 heures de travail concentré
- •À mon taux horaire moyen (75 €/h) : 13 500 € de coût opportunité
- •Économie VPS : 12 €/mois × 60 mois (5 ans) = 720 €
- •Ratio : 5,3% de retour sur investissement sur 5 ans
Sur ce critère seul, la migration est une catastrophe financière. Même si je compte zéro maintenance (ce qui est faux), je perds ~12 780 € sur 5 ans pour économiser quelques euros par mois de VPS.
Mais l'argent n'est pas tout
Ce que le ROI ne capture pas :
- 1.J'ai appris Rust en prod — expérience réelle qui vaut pour d'autres projets
- 2.Le code est plus fiable — 0 crash en 4 mois vs 2 crashs en 6 mois de Python (problèmes de types à runtime)
- 3.Les mises à jour sont triviales —
cargo update, rebuild, redeploy. Contre les cauchemarspip installsur un venv corrompu - 4.La maintenance mentale est plus simple — le code Rust force des choix explicites que Python laissait à l'intuition
Donc : mauvais ROI financier, bon ROI technique et personnel.
Les 5 surprises
Surprise 1 : le compilateur est ton meilleur ami
Tout ce qu'on entend sur le borrow checker est vrai — c'est brutal. Mais une fois que ça compile, ça marche. 90% des bugs que j'aurais eu en Python ne passent même pas la compilation Rust. C'est un gain qualitatif invisible dans les métriques.
Surprise 2 : l'écosystème async est fragmenté
Tokio vs async-std, streams manuels, problèmes de Send + Sync, Pin<Box<dyn Future>>. L'async en Rust est encore moins mature qu'en Python. J'ai passé 6 jours juste sur des erreurs async.
Surprise 3 : le tooling est exceptionnel
cargo, clippy, rustfmt, cargo-edit, cargo-watch. Tout est uniforme, rapide, bien documenté. Le tooling Python (pip, poetry, black, ruff, etc.) paraît soudain archaïque.
Surprise 4 : AI assistance plus faible
Claude Code est moins bon en Rust qu'en Python. Il propose souvent du code qui ne compile pas à cause de subtilités de lifetimes ou de traits. J'ai dû manuellement corriger ~30% de ses suggestions. En Python c'est plutôt 10%.
Surprise 5 : le deploy est un rêve
Un binaire statique, 18 MB, qui tourne n'importe où. Pas de pip install, pas de venv, pas de conflicts de dépendances. Rust gagne le déploiement sans compétition.
Ma recommandation après 6 mois
| Cas d'usage | Python ou Rust ? |
|---|---|
| Script one-off | Python — 10× plus rapide à écrire |
| Pipeline ML | Python — écosystème imbattable |
| Backend API B2B | Rust si perf critique, Python sinon |
| Outil CLI distribué | Rust — le deploy est un rêve |
| Pipeline de données haute perf | Rust si ça en vaut le coup financièrement |
| Project perso d'apprentissage | Rust — tu apprendras énormément |
Ce qu'il faut retenir
- 1.Performance réelle : CPU ÷9, RAM ÷11, throughput ×5,6 sur mon workload.
- 2.Coût réel : 180h de travail pour 720 € d'économie sur 5 ans — ROI financier négatif.
- 3.Rust gagne sur le déploiement et la fiabilité de compilation.
- 4.L'async Rust est encore immature — 6 jours perdus dessus.
- 5.Claude Code est moins bon en Rust qu'en Python — prévois plus de corrections manuelles.
Pour le workflow Ralph Loop que j'ai utilisé pendant cette migration avec Claude Code, j'ai écrit un livre dédié :
Soutenez mon travail sur Patreon
Accès anticipé aux articles, contenu exclusif, et la satisfaction de soutenir un auteur indépendant.
Rejoindre — à partir de 3€/mois