Qu’entend-on par « évolutivité » en génie logiciel ?


Je n'ai pas beaucoup traité ce terme directement, et je suppose qu'il serait facile de trouver une définition de manuel sur Google. Mais j'ai eu des problèmes liés à l'évolutivité dans mon travail de développement, et je vais donc fournir ma compréhension du terme à partir de mon expérience de programmeur sans avoir cherché quoi que ce soit.

L'évolutivité est une considération importante pour un ingénieur logiciel qui conçoit ou implémente un système susceptible de supporter une charge beaucoup plus lourde que celle qui sera expérimentée dans un environnement de test. Mais je m'attends à ce qu'elle se réfère en fait non seulement à la capacité d'assumer une charge lourde, mais aussi à refléter les capacités en fonction des ressources qui lui sont données.


Par exemple, considérons un système qui peut permettre aux résultats de recherche de retourner une liste complète d'articles en 3 secondes. Une solution non évolutive pourrait nécessiter une adresse de serveur dédiée qui est uniquement destinée à l'indexation des mots-clés des articles. Cette solution ne peut pas être adaptée à une situation où vous n'avez que quelques centaines d'articles de quelques milliers de mots chacun. Ces articles pourraient facilement être gérés sur un seul serveur, et la création d'un serveur distinct pour l'indexation serait excessive et inutile. Une autre solution non évolutive pourrait rechercher séquentiellement les articles avec une simple recherche textuelle chaque fois qu'une demande est faite, et ne dispose pas d'un moyen de diviser la charge de travail. Cette solution n'est pas évolutive à plusieurs égards : elle ne fournit aucun moyen de tirer parti de ressources supplémentaires (diviser la charge de travail) et le fait mal en n'optimisant pas la manière dont le travail est effectué lorsqu'une grande quantité de données est impliquée.


Si vous avez un milliard d'articles qui ne sont pas indexés d'une manière ou d'une autre, les rechercher séquentiellement en 3 secondes va nécessiter beaucoup plus de ressources qu'un système qui conserve les données sous une forme optimisée pour la recherche répétée de grandes quantités de données. Une solution évolutive à ce problème utilisera les ressources de manière optimale pour les petites et les grandes quantités de données, et peut faire bon usage de toutes les ressources qui lui sont données plutôt que de supposer une grande ou une petite tâche.

Un exemple de problème d'évolutivité avec lequel j'ai été personnellement impliqué est lorsque j'ai conçu un système pour traiter les données d'un système ERP en mémoire pour optimiser les performances. Il y avait certains systèmes où des centaines de milliers d'enregistrements étaient concernés et leur chargement en mémoire donnait des résultats médiocres au mieux, et échouait carrément au pire. L'architecture mémoire des systèmes concernés n'était pas conçue pour utiliser la mémoire à ces échelles de cette manière. Un système plus évolutif se serait davantage appuyé sur le stockage persistant et l'indexation et n'aurait pas supposé que tant de choses puissent être chargées dans la mémoire de travail.

Un autre exemple est la reconstruction des structures d'information de sécurité pour les grandes entreprises. Nous avons une procédure pour effacer et reconstruire ces informations sur la base de données hiérarchiques définissant qui a accès à quelles parties de l'entreprise. Nous l'avons testée sur des systèmes comptant quelques milliers d'employés dans quelques centaines de filiales. Mais lorsqu'il a été exécuté sur un système où il y a des centaines de milliers d'employés dans des milliers de succursales, le processus de reconstruction s'est avéré demander plus de temps que ce qui était pratique, et il n'y avait't aucun moyen d'affecter plus de ressources à la tâche afin de la réaliser plus rapidement.

Pour améliorer l'évolutivité de notre deuxième solution, nous mettons en œuvre la possibilité de répartir le travail sur un plus grand nombre de processeurs, et nous étudions des solutions optimisées, ce qui nécessite des procédures de test qui fonctionnent sur davantage de données.

En général, les problèmes d'évolutivité se trouvent dans les échecs de mise à l'échelle pour gérer des charges de travail plus importantes. Je n'ai pas été impliqué dans des solutions qui n'ont pas réussi à passer à l'échelle inférieure.