Nous avons présenté deux façons d’implémenter une architecture de services dans une entreprise, la première basée sur le protocole de communication SOAP est de moins en moins utilisée au détriment de la seconde basée sur REST. Une dernière implémentation est apparue récemment, adaptée aux contraintes d’agilité des systèmes d’information et à l’émergence du Cloud : les microservices.
« In short, the microservice architectural style is an approach to developing a single application as a suite of small services, each running in its own process and communicating with lightweight mechanisms, often an HTTP resource API. These services are builtaround business capabilities and independently deployable by fully automated deployment machinery. There is a bare minimum of centralized management of these services, which may be written in different programming languages and use different data storage technologies.”
Martin Fowler
Les architectures Microservices introduites par Martin Fowler dans son article : https://martinfowler.com/articles/microservices.html vont nous permettre dans un premier temps de relever les grandes idées derrière le terme de « microservice » :
- Un composant logiciel correspondant à un besoin fonctionnel précis, définis et délimité.
- Un composant autonome au niveau du déploiement et de l’exécution.
Un microservice est donc une unité de service fonctionnelle qui se développe, se déploie, s’exécute et gère ses données indépendamment des autres services du système.
Avec une application « monolithique », si on veut déployer une application sur un nouveau serveur il faut tout dupliquer. Avec une application en microservices, vous pouvez déployer chaque service sur 1 ou n serveurs, indépendamment des autres.
Avantages
- Code base indépendant : Les services sont plus simples à appréhender à développer et à repenser.
- Les services peuvent être développés et déployés de façon plus indépendante et plus rapide.
- Les services démarrent et s’arrêtent rapidement, ce qui réduit le temps de déploiement et améliore la productivité des développeurs.
- Il est plus simple de mettre uniquement les composants nécessaires à l’échelle de façon dynamique pour répondre à la demande.
- Le système tolère mieux les pannes pour une disponibilité plus élevée.
- Les microservices peuvent être mis à niveau individuellement, en temps réel et sans interrompre le service.
- Indépendances et agilité technologiques entre microservices.
- Séparation des responsabilités.
La contrepartie logique de cette architecture c’est le développement, le déploiement et l’administration d’une grande quantité de services. Ainsi, si chaque service est plus simple, le système dans son ensemble est plus complexe !
Inconvénients
-
- Augmentation de la complexité du SI.
- Intégration et déploiements plus nombreux.
- Tests plus difficiles si il y a des appels entre microservices.
- Hausse nombre d’éléments à développer, surveiller, livrer.
- Augmentation du trafic réseau et latence des appels HTTP.
- Les microservices peuvent être très hétérogènes ce qui peut rendre leur implémentation plus complexe.
Si dans la théorie un microservice est un composant logiciel plutôt simple, sa mise en œuvre suscite bon nombre de questions que nous détaillerons plus tard. Dans tous les cas un certains nombres de besoins sont déjà identifiable.
Prérequis
-
- Provisionnement de serveurs rapide.
- Solution de monitoring de services.
- Gestion des logs.
- Maturité DevOps.
- Gestion de configuration.
- Tests
- Load balancing.
Si nous prenons un peu de recul, on se rend compte qu’au-delà de certaines idées novatrices, la scalabilité et l’isolation des composants notamment, bon nombre des caractéristiques d’une architecture microservices se retrouvent dans une architecture de services plus classique.
Ainsi beaucoup n’hésite pas à qualifier les microservices de « buzzword » car en fin de compte on parle toujours de la même chose : une architecture de services qui s’adapte aux évolutions de l’IT au niveau du développement, des solutions d’infrastructure et même du management :
- La SOA a mis en avant les avantages de l’approche services en entreprise.
- L’agile et le lean startup ont fourni les modèles d’organisation des équipes pour des projets toujours plus nombreux.
- L’industrialisation des déploiements diminue les coûts de mise en production et d’exploitation pour des mises à jours régulières.
- L’essor du Cloud déporte les infrastructures hors du SI modifie les modèles DevOps.
Toutes ces évolutions ont selon moi aboutis à cette notion de microservices que nous mettrons bientôt en pratique !