Migration des systèmes monolithiques vers des microservices en utilisant des techniques d'intelligence artificielle

La maintenance logicielle est considérée une des principales étapes du cycle de vie du logiciel. Plusieurs entreprises de nos jours dépensent des ressources importantes en corrigeant, adaptant, augmentant, et restructurant ses programmes existants surtout en présence de systèmes monolithiques. Ce type de système est généralement considéré comme un composant vital et très important pour plusieurs compagnies (notamment les banques et les assurances) surtout que ces systèmes--souvent légataires--ont démontré une certaine efficacité d’exécution de logique métier complexe et critique pendant plusieurs années. Cependant les systèmes monolithiques sont devenus difficiles à maintenir en raison du couplage fort entre leurs composants internes. La modification d'une fonctionnalité dans un module implique souvent des modifications dans plusieurs autres modules, ce qui augmente le temps et les efforts de développement nécessaires. 

Les architectures à base de microservices sont considérées comme un très bon candidat pour moderniser de tels systèmes surtout que ce type d'architecture permet de développer des applications complexes et inter-organisationnelles en intégrant des microservices réutilisables, relativement indépendants, généralement hétérogènes et distribués. Cependant, la migration des applications monolithiques vers les microservices est un processus complexe qui doit prendre en considération plusieurs facteurs à savoir le choix du processus de migration, la méthode d'identification des microservices, la qualité des services identifiés, etc.

L’identification des microservices est considérée comme l’étape la plus importante et la plus critique dans le processus de migration surtout que la qualité et la robustesse de la nouvelle architecture  dépendra de la qualité des services identifiés. L’identification des microservices consiste à identifier des composantes réutilisables du système légataire qui peuvent être encapsulées et représentées sous forme de services.

Dans ce projet, nous proposons de développer un outil d’identification de microservices pour assister le processus de migration des applications monolithiques vers les architectures à base de microservices tout en utilisant des techniques de l’IA. Notre approche se base sur une analyse statique et lexicale du code source du projet afin de détecter les relations logiques entre les différentes entités et leurs similarités sémantiques. Cette approche consiste à (1) identifier des services selon leurs types (services métiers, applicatifs, entités, utilitaires, etc.) en utilisant des techniques d’apprentissage automatique, et (2) regrouper les services identifiés pour former les microservices finaux. Nous visons également à définir une méthode d'identification des microservices qui soit guidée par des patrons pour promouvoir l’utilisation des bonnes pratiques de conception/développement des architectures à base de microservices.

Connaissances requises

Le candidat doit contribuer à la réalisation des tâches suivantes:
● Utilisation de techniques de rétro-ingénierie pour générer le graphe d'appel des applications monolithiques à analyser.
● Spécification d’une architecture de référence basée sur les microservices pour chaque application monolithique à analyser.
● Utilisation de techniques de NLP pour déterminer le couplage sémantique entre les éléments du système (classes, services, etc.).
● Collecte et préparation des jeux de données pour les phases d'entraînement et de test des modules d'IA.
● Benchmarking de différentes techniques d'IA pour classer les entités du système en fonction des types de services.
● Utilisation d'algorithmes de clustering pour identifier les services puis les microservices.
● Évaluation des résultats en comparant les microservices identifiés pour chaque système avec l'architecture de référence spécifiée précédemment.
● Comparaison de l'outil développé avec d'autres approches d'identification de microservices.

● Bonne maîtrise du langage Python et des différentes librairies de traitement de texte et de graphes (NLTK, networkxx)
● Compétences dans la création, le training et le test des architectures simples de réseaux de neurones.
● Connaissance des patrons et anti-patrons des microservices
● Compréhension de base des techniques NLP Natural language processing
● Connaissance des différentes approches de clustering

Programme d'études visé

Maîtrise avec projet, Maîtrise avec mémoire

Domaines de recherche

Technologies de l'information et des communications

Financement

Bourse de professeur 

Autres informations

 Dès que possible

Personne à contacter

Naouel Moha | naouel.moha@etsmtl.ca