1. Accueil
  2. Articles
  3. Développement

Adoptez une infrastructure en microservices pour votre produit

Partager :

Cet article a pour objectif de vous présenter rapidement ce qu’est un microservice et pourquoi il est intéressant d’en utiliser lorsque vous souhaitez réaliser votre produit digital (sur une base nouvelle ou déjà existante) ou pour l’intégrer à votre infrastructure monolithique existante. Enfin nous allons créer ensemble une base de microservice en nodeJS.

Si vous le souhaitez, vous pouvez écouter une partie de la présentation que j’ai donné pendant notre Team Building à belle Epoque ainsi que la présentation :

Définition d’un microservice

source : confluent.io

Vous connaissez surement déjà les infrastructures classiques que l’on retrouve toujours de nos jours : un serveur qui exécute une application unique et des dépendances sous la forme de modules (qui tournent également grâce au coeur de l’application principale). A cela s’ajoute une base de données centralisée et surement quelques services externes qui sont connectés toujours à l’application principale grâce à des API. Ce type d’infrastructure est ce que l’on peut appeler un monolithe (un bloc applicatif unique). Ce dernier s’oppose à une architecture basée sur des microservices. Cette dernière est formée de plusieurs entités qui ont chacune un périmètre fonctionnel restreint (gestion des utilisateurs, gestion des articles, etc.). Chaque microservice utilise un système d’API pour communiquer avec les autres (en interne ou en externe). De plus chaque microservice est exécuté de façon indépendante (exécution sur un port différent).

Voici la définition proposée par wikipedia : “les microservices sont un style d’architecture logicielle à partir duquel un ensemble complexe d’applications est décomposé en plusieurs processus indépendants et faiblement couplés, souvent spécialisés dans une seule tâche. Les processus indépendants communiquent les uns avec les autres en utilisant des API”.

source : confluent.io

Microservice : les avantages

Maintenir un monolithe applicatif est beaucoup plus chronophage et par conséquent a un impact budgétaire non négligeable dans le cycle de vie d’un service. En effet, les équipes de développement changent régulièrement et il est plus compliqué pour un nouveau développeur d’appréhender le code dans sa globalité pour faire évoluer une fonctionnalité. Le microservice a un périmètre fonctionnel plus restreint ce qui permet de faire évoluer plus rapidement le code existant. De plus, chaque microservice étant exécuté séparément cela permet d’augmenter les cycles de déploiement en production. Plus besoin de redéployer systématiquement l’application principale par exemple.

Avec le temps, il peut également se créer des silos entre les différentes applications d’une même entreprise et certains codes sont inutilement produits plusieurs fois et devront être maintenus. Au contraire, un microservice communique grâce à un système d’API. Ce dernier peut donc être utilisé et partagé par plusieurs applications, ce qui permet d’éviter une duplication de code.

Microservice : les inconvénients

Développer sur une architecture en microservices demande un peu de temps d’adaptation par rapport à une infrastructure plus standard. Il faut notamment mettre en place des outils de déploiement multi-noeuds comme Ansible. En plus d’une gestion via docker par exemple.

Il peut aussi arriver qu’un microservice est besoin de données issues d’autres microservices. Si les microservices interrogés ne répondent pas, cela peut provoquer des erreurs inattendues qu’il faut anticiper. Une solution envisageable est d’utiliser un load balancer devant chaque microservice (2 instances actives par microservice). Cela peut être notamment piloté via Rancher qui permet de manager visuellement les containers docker et de gérer le multi clustering.

Pratique : concevoir un microservice nodeJS pour gérer les utilisateurs

Un repo github a été créé pour l’occasion. Vous pouvez suivre le pas à pas afin de créer votre premier micro-service.

Quelques notions qui seront employées dans ce service :

  • micro : node module permettant de concevoir rapidement un microservice
  • microrouter : node module permettant de gérer les routes de micro
  • winston : node module permettant de logger des messages d’erreurs
  • decorator : une fonction de “décoration” encapsule une fonction de base et étend ainsi les fonctionnalités de cette dernière. Voir la première partie de cet article pour voir un exemple simple : https://www.sitepoint.com/javascript-decorators-what-they-are/
  • composition : utilisation de plusieurs fonctions simples pour créer des fonctions plus complexes. L’utilisation d’une fonction “compose” permet de chainer des fonctions simples. Ici un exemple d’usage : https://www.codementor.io/michelre/use-function-composition-in-javascript-gkmxos5mj

Sources et ressources