Getty Images

Développer des microservices en Python, est-ce viable ?

Python permet aux développeurs de microservices d’accéder à des outils de scripting avancés, de tests intégrés et de plug-ins. Mais est-ce une bonne solution pour vous ? Et quelles sont les alternatives si ce n’est pas le cas ?

Les développeurs ont découvert de nombreuses raisons de créer des microservices en Python, qu’il s’agisse de ses fondations édifiées sur la programmation-objet, de sa capacité à gérer les API REST ou de sa prise en charge immédiate du prototypage de logiciels. En particulier, ses partisans font l’éloge de l’ensemble des fonctionnalités intégrées de Python. Elles permettent d’isoler les processus applicatifs clés et d’inclure des collections dynamiques de services distribués.

Toutefois, comme c’est le cas avec tout langage de programmation, Python présente également son lot de difficultés à surmonter. Pour certains, notamment ceux qui ne maîtrisent pas les langages interprétés ou qui ont besoin de temps de compilation rapides, Python n’est peut-être pas le langage idéal pour leurs efforts de développement de microservices.

Examinons les raisons pour lesquelles les développeurs pourraient vouloir créer des microservices en Python, les caractéristiques remarquables qui rationalisent les processus de construction des applications et les obstacles potentiels qu’ils peuvent rencontrer. Nous évaluerons aussi certains des langages concurrents qui offrent une approche légèrement différente pour la conception d’architectures logicielles distribuées.

Pourquoi le choix de la langue est important dans le développement de microservices

Les microservices sont conçus pour fonctionner de manière aussi indépendante que possible. Ces éléments doivent néanmoins communiquer et partager des données à l’aide de divers composants de messagerie, protocoles réseau, déclencheurs d’événements, appels d’API et autres techniques d’intégration. La séparation des responsabilités entre les services, y compris la logique qui pilote ces opérations, est un principe fondamental pour favoriser l’autonomie au sein des architectures de microservices.

Plutôt que de passer par un système de messagerie centralisé, les services doivent communiquer entre eux pour effectuer des tâches distinctes et évoluer en fonction des besoins. Cela signifie que le langage que les développeurs choisissent pour leur projet doit idéalement prendre en charge un certain nombre de formats et de protocoles de communication importants.

Tout langage utilisé pour concevoir des microservices doit supporter REST, un style d’architecture assurant l’orchestration de requêtes HTTP permettant de publier, lire et supprimer des données. Néanmoins, des protocoles tels que Remote Procedure Call (RPC), gRPC et le langage de requêtes/environnement d’exécution GraphQL sont aussi considérés par certains comme essentiels pour les échanges entre microservices.

Les développeurs qui composent des microservices s’appuieront également sur les conteneurs pour créer des environnements d’application uniques et reproductibles. Il s’agit d’appliquer des contextes limités entre les services. À ce titre, le langage de programmation utilisé doit offrir une prise en charge solide de la compilation, du déploiement et de l’orchestration de conteneurs.

Avantages de Python pour le développement de microservices

Python est un langage qui permet aux développeurs de traiter les éléments comme des objets et de les organiser en entités réutilisables au sein d’une structure modulaire claire. Il s’agit d’écrire rapidement du code applicatif, d’ajouter des fonctions passe-partout (boilerplate en VO) et de tester les programmes avant de les convertir en script. En outre, Python est un langage fortement typé, ce qui signifie qu’il assure une cohérence uniforme et minimise les erreurs en imposant les types de données. Par ailleurs, les développeurs peuvent réutiliser le même code au sein d’une application ou entre plusieurs modules, à l’aide de fonctions intégrées.

Les capacités de scripting avancées de Python permettent également aux développeurs d’automatiser l’approvisionnement et la configuration des systèmes pour les microservices. Les modifications individuelles sont répliquées dans l’ensemble de la base de code. Les programmeurs peuvent créer et personnaliser des frontaux Web par le biais de scripts côté serveur, grâce à la rétrocompatibilité de Python avec les langages existants tels que PHP et le framework ASP.NET. La bibliothèque standard de Python est complétée par des milliers de librairies tierces pensées pour écrire des services REST, et la communauté des utilisateurs de Python offre un soutien considérable.

Enfin, Python s’accorde bien avec les conteneurs. Cette prise en charge comprend des types de données de conteneurs intégrés tels que les listes, les tuples et les ensembles, ainsi que ceux disponibles dans la bibliothèque standard. Les développeurs peuvent empaqueter les dépendances et exécuter les microservices dans des environnements isolés pour les tester avec ces fonctionnalités Python.

Les limites de Python

Bien sûr, il y a quelques éléments à prendre en compte avant de se précipiter pour développer des microservices avec Python. Par exemple, la vitesse d’exécution et la nature de l’environnement de l’interpréteur sont souvent citées comme deux gros inconvénients à l’usage de ce langage dans ce type d’architecture.

D’une part, Python est un langage interprété, ce qui signifie qu’il ne génère pas de code machine à l’exécution. Ensuite, un interpréteur tel que CPython, Jython, PyPy ou PyCharm le transforme au moment de l’exécution en instructions de type bytecode exécutées dans l’environnement virtuel du CPU. Cela peut engendrer des temps d’exécution nettement plus élevés que ceux constatés avec Rust et d’autres langages qui compilent directement en code natif.

Le code Python peut également s’avérer difficile à nettoyer et à débugger. Python étant typée dynamiquement, il est possible que des erreurs ignorées lors de la phase de compilation apparaissent soudainement lors de l’exécution, entraînant un retard dans les opérations des applications, ou au pire, une défaillance totale.

C’est un problème évident quand l’on déploie une architecture de microservices, étant donné que les instances peuvent être déployées, retirées ou modifiées de manière dynamique. Bien qu’il existe certains mécanismes de sécurité de type sur lesquels les développeurs peuvent s’appuyer, il faudra tout de même prêter une attention particulière aux affectations de variables et aux processus de test des applications avec Python.

Les alternatives Go, Java et .Net

Python n’est pas le seul choix en matière de développement de microservices, et il existe quelques options à envisager si cette technologie ne semble pas convenir. D’autres langages polyvalents, dont Go, Java et les langages .NET, offrent des avantages tangibles pour la création de microservices.

Go

Go, également appelé Golang, ne dispose pas d’un catalogue de fonctions préconstruites comparable à celui de Python. En revanche, il offre aux développeurs un moyen sûr et simple de gérer des réseaux complexes d’instances de services et des collections distribuées de bibliothèques fonctionnelles. Go est un langage compilé et typé statiquement, qui peut se targuer d’une forte sécurité de la mémoire et de son système de collecte des déchets, entre autres. Go utilise également des threads légers appelés goroutines pour favoriser la concurrence — la possibilité pour des fonctions de s’exécuter indépendamment les unes des autres —, ce qui constitue un avantage considérable pour les microservices.

Java

Java offre stabilité et cohérence aux applications distribuées. En tandem avec le framework Java Spring Boot, les développeurs peuvent utiliser l’outil d’autoconfiguration pour créer rapidement des API REST et des applications de liaison. Les développeurs Java disposent également des ressources du framework Spring Cloud pour l’intégration et le traitement par lots et en flux.

.NET

Les langages .NET tels que C#, F# et Visual Basic sont conçus pour produire des logiciels dans le cadre du langage de développement propriétaire de Microsoft. Les premières versions du cadre .NET Core étaient axées sur le développement de microservices et l’élargissement de l’accès aux API. Les développeurs peuvent inclure des dépendances et exécuter plusieurs instances de .NET Core en recourant à l’architecture modulaire de la plateforme. .NET est particulièrement utile pour les microservices, car il offre des connecteurs pour les applications externes préétablies ainsi que des API qui facilitent les communications entre les composants.

Pour approfondir sur Langages