Microservices : la fausse bonne idée pour sauver ton monolithe

Arnaud Lenglet
|
Ruby on Rails
|
23/9/2024

Ton équipe tech est en PLS à chaque déploiement. Tu sais de quoi je parle : chaque mise en prod est une bataille épique entre les bugs, les régressions et les effets de bord. L'équipe QA a pris l'habitude de travailler avec des mugs géants remplis de café, parce que rien ne va jamais comme prévu. Le code, c'est du spaghetti sauce bolognaise, et tu te dis qu'il doit bien y avoir une solution pour arrêter ce cirque.

Un jour, en désespoir de cause, tu assistes à un meetup, et là, un speaker te vante la solution miracle : les microservices. "Diviser pour mieux régner," qu’il te dit, avec une étincelle dans les yeux. "Avec des microservices, tu n’auras plus qu’à gérer des petites applications simples, chacune dédiée à un domaine spécifique." Tentant, non ?

Oublie. Sérieusement, oublie. Parce que si ton monolithe est déjà un gros bazar à maintenir, les microservices ne vont pas résoudre ton problème. Ils vont même l'aggraver. Laisse-moi t'expliquer pourquoi tu n'as vraiment pas envie de te lancer là-dedans.

1. Ton problème de base : l'architecture

Ton problème, ce n’est pas que ton application est trop grosse. Ce n’est pas non plus que tout est empaqueté dans une seule et même base de code. Ton vrai problème, c'est que ton architecture est un joyeux bordel. Et tant que tu n’auras pas compris ça, que tu passes à des microservices ou non, tu vas juste déplacer tes bugs d’un endroit à un autre.

Rails, comme plein d'autres frameworks, encourage souvent une approche où tu balances tout dans des modèles, des contrôleurs et des vues, sans trop te poser de questions sur les responsabilités de chaque couche. Résultat ? Des modèles géants et des contrôleurs qui finissent par gérer plein de trucs qui n'ont rien à voir avec leur rôle initial. L'architecture se dilue, et l'application devient de plus en plus difficile à faire évoluer sans tout casser.

Et devine quoi ? Si tu passes aux microservices avec cette même philosophie, tu vas juste éclater ton monolithe en une multitude de mini-monstres mal foutus.

2. Le problème que résolvent les microservices : le passage à l'échelle

Les microservices, c'est la nouvelle coqueluche des architectures logicielles pour une bonne raison : ils sont super efficaces pour résoudre les problèmes liés au passage à l'échelle. Quand ton application commence à attirer des millions d'utilisateurs, la charge sur certains modules explose, et là, avoir une grosse application monolithique devient un goulot d’étranglement.

L'idée derrière les microservices, c'est que tu peux isoler chaque brique fonctionnelle en une application indépendante. Résultat ? Si un service a besoin de plus de puissance de calcul, tu n’as qu’à lui allouer des ressources supplémentaires, sans toucher aux autres parties du système. Pratique, non ? C’est là que les microservices brillent. Netflix, Amazon et plein d'autres grosses boîtes ont adopté cette architecture parce qu'elle leur permet de faire tourner des centaines (voire des milliers) de services indépendants qui scalent selon leurs besoins.

Mais... (parce qu'il y a toujours un "mais")... est-ce que tu es vraiment Netflix ? Si ton problème actuel, c'est que tu as du mal à déployer un monolithe correctement parce que l'architecture est en sueur sous le poids de bugs et de dettes techniques, crois-moi, passer aux microservices ne va pas te sauver. Les microservices sont faits pour les entreprises qui ont besoin de scalabilité massive, pas pour résoudre des problèmes d'organisation de code ou de structure interne.

En fait, si ton monolithe galère à être maintenu, c'est souvent parce qu'il y a des erreurs de design qui traînent depuis longtemps. Passer aux microservices sans résoudre ces problèmes, c'est comme mettre un pansement sur une jambe cassée.

3. La solution qu'il te faut : une stratégie de résorption de dette technique

Alors, plutôt que de sauter tête baissée dans l'aventure microservices en pensant que ça va miraculeusement résoudre tes problèmes, il faut que tu prennes un peu de recul et que tu t'attaques à la racine du mal : la dette technique. C’est ce truc insidieux qui se glisse dans ton code à chaque fois que tu choisis la solution rapide plutôt que la solution propre. Et crois-moi, ce n'est pas en multipliant les services que tu vas la faire disparaître, bien au contraire.

La vraie solution, c'est de mettre en place une stratégie de résorption progressive de cette dette. Comment ? En appliquant des principes solides d'architecture logicielle. On parle ici de refactorisation, de découpage intelligent de ton code, et de reconsidérer la façon dont tu organises tes fonctionnalités.

Commence par des étapes simples. Par exemple, plutôt que de tout balancer dans des modèles ou des contrôleurs géants, utilise des services ou des concerns pour mieux structurer ta logique métier. Cela permet non seulement d’isoler certaines fonctionnalités (un peu comme le principe des microservices), mais sans éclater ton app en mille morceaux. Rails est très flexible et te permet de restructurer progressivement ton application tout en conservant la simplicité d’un monolithe.

Mise sur des tests unitaires solides, élimine les dépendances circulaires, et arrête de patcher en urgence à chaque fois qu’un bug apparaît. Bref, avant de parler d’architecture à l’échelle, parle d’architecture tout court. Parce que si tu arrives à nettoyer ton code existant et à établir une base saine, tu n’auras peut-être jamais besoin de microservices. Ou alors, si un jour tu y passes, tu le feras pour les bonnes raisons (scalabilité), et non pour tenter de sauver un projet mal foutu.

Conclusion

Alors voilà, les microservices, c’est sexy sur le papier, mais avant de te jeter dans ce piège, regarde en face les vrais problèmes de ton application. Ce n’est pas parce que ton code est gros que c’est mauvais, et ce n’est pas parce qu’on parle de microservices que ça va miraculeusement devenir simple.

La clé est de comprendre d’où viennent les douleurs de ton équipe avant chaque déploiement. Très souvent, c'est l'architecture interne qui a besoin d'un bon nettoyage, pas un changement radical de paradigme. Et ce nettoyage, tu peux le faire sans tout casser en restant dans une approche monolithique bien pensée.

En d’autres termes : commence par une bonne résorption de dette technique. Tu verras, tes déploiements se passeront beaucoup mieux. Et peut-être, juste peut-être, que tu pourras remettre ton équipe QA en pause café, plutôt qu’en mode stress avant chaque mise en prod.

Arnaud Lenglet
Développeur. Concepteur. Créateur.
Je partage mes expériences autour de la création de produit.

Sur la même thématique

Une idée ? Un projet ?
Travaillons ensemble