Il y a quelques temps, un de nos microservices commençait sérieusement à tirer la sonnette d’alarme en production.
Montées soudaines de la mémoire, lenteurs progressives sous charge, et même quelques erreurs OutOfMemoryError en prime. Plutôt que de chercher à ajouter une couche technique supplémentaire, j’ai voulu commencer par revoir l’existant.
En creusant, plusieurs points d’optimisation se sont révélés assez vite :
• Nos DTOs transportaient des blocs entiers de données inutilisées
• Certaines routes exposaient tout un ensemble sans limite ni pagination
• Et côté traitement, on avait tendance à charger des listes complètes en mémoire, là où un flux suffisait
Résultat, après un passage au peigne fin :
• Refonte des DTOs pour ne garder que l’essentiel
• Ajout de la pagination sur les points d’accès critiques
• Utilisation des streams pour éviter les charges inutiles en mémoire
Effets immédiats :
• 50 % de mémoire consommée en moins
• Moins de pression sur le garbage collector
• Des temps de réponse plus stables
• Et surtout, des logs enfin débarrassés d’erreurs mémoire
Ce genre de refacto m’a rappelé une chose : avant d’introduire une nouvelle techno ou un cache complexe, il vaut parfois mieux regarder ce qu’on a déjà sous les yeux. Une bonne conception, ça reste le meilleur levier de performance même dans un Spring Boot microservice.
(image d'illustration)
---
Vous cherchez un Développeur Backend Java expérimenté ? Je suis disponible ! Discutons : https://lnkd.in/ecRArCmt
Ou envoyez-moi un message en DM
Regarde aussi au niveau de la couche d'acces au données... Si tu retourne le DTO utile ou si tu retourne " l'entity" (Cache Hibernate) ... Et regarde aussi si les queries en base ont un index.
Après tu peux revoir la complexité dans les services...
Happy refactoring mister!