Sélectionner une page

L’adoption de l’internet mobile a profondément modifié la façon dont les consommateurs achètent et interagissent avec les applications. Le rythme du changement est effréné. Le besoin de rapidité dans le développement des applications est plus grand que jamais. Armés d’une agilité supérieure, de nouveaux entrants ont remis en cause des positions acquises. De plus en plus de grands comptes réagissent en misant notamment sur les microservices.

 

Pour être plus efficaces que leurs concurrents, certains métiers aspirent à une plus grande flexibilité et à une plus grande autonomie. Bénéficier d’une structure Agile apparaît comme une nécessité. Mais trop d’entreprises conservent encore une architecture et une organisation qui ne se prêtent pas facilement à son adoption.

C’est une erreur, car l’agilité poursuit un objectif principal : réduire les délais de mise sur le marché afin d’améliorer l’expérience client. Cela implique donc une organisation optimisée et de ne plus reposer sur une architecture monolithique.

Avec une telle architecture, l’agilité sera un objectif très difficile à attendre. Il y a en effet trop de restrictions :

  • Tous les processus sont étroitement couplés et fonctionnent comme un seul service. Cela signifie que si un processus de l’application connaît un pic de demande, l’architecture entière doit être mise à l’échelle.
  • De nombreuses fonctionnalités des applications ne peuvent pas être construites et déployées en même temps.
  • L’ajout ou l’amélioration des fonctionnalités d’une application monolithique devient de plus en plus complexe à mesure que la base de code augmente.
  • Les architectures monolithiques augmentent le risque d’indisponibilité des applications. De nombreux processus, dépendants et étroitement couplés, augmentent en effet l’impact d’une seule défaillance de processus.

Résultat, cette complexité limite l’expérimentation et rend difficile la mise en œuvre de nouvelles idées.

À l’inverse, les architectures microservices sont des patterns d’architecture capables de répondre aux problèmes d’évolutivité des monolithiques.

Apparu en 2012 et popularisé par Martin Fowler (cet informaticien est auteur notamment d’un ouvrage de référence sur le refactoring), ce terme de « microservices » représente une approche architecturale et organisationnelle du développement logiciel dans laquelle le logiciel est composé de petits services indépendants qui communiquent sur des API bien définies. Les architectures de microservices facilitent la montée en charge des applications et accélèrent leur développement. Elles permettent d’innover et de réduire les délais de mise sur le marché de nouvelles fonctionnalités.

Netflix, le modèle

Les microservices s’inscrivent dans une démarche Agile permettant de répondre à des attentes spécifiques par la réalisation de petites applications ou services ayant un périmètre restreint. À la clé, une plus-value aux clients.

Cet intérêt majeur s’explique par le fait que des petites équipes informatiques et opérationnelles peuvent  travailler ensemble sur un projet. Avec ce type d’architecture, une application est construite comme des composants indépendants qui exécutent chaque processus d’application comme un service. Ces services communiquent via une interface bien définie utilisant des API légères. L’objectif principal de l’implémentation des microservices est de diviser l’application en un service séparé pour chaque fonctionnalité de noyau et de service API et de le déployer indépendamment sur le cloud. Netflix a été l’une des premières entreprises à adopter les microservices.

Pour simplifier, cette architecture présente des intérêts certains :

  • Si l’un des services de l’application ne fonctionne pas, le système continue de fonctionner.
  • Différents langages et technologies peuvent être utilisés pour créer différents services d’une même application. Cela réduit aussi les impacts négatifs résultant d’un choix technologique non pérenne.Dans le pire des cas, un microservice pourra être réécrit rapidement et sans coûts excessifs.
  • Les composants individuels peuvent être mis à l’échelle selon les besoins (ils sont déployés sur des serveurs indépendants ou des conteneurs dédiés), il n’est pas nécessaire de mettre à l’échelle tous les composants ensemble.

Deux pizzas !

Mais attention à ce qu’un microservice ne devienne pas aussi « gros » qu’une application monolithique. À vouloir être aussi grosse que le bœuf, la grenouille s’enfla « si bien qu’elle creva » Rapporté à notre sujet, cela signifie que l’agilité tant recherchée se dégonflera. Le microservice  ne sera plus aussi évolutif, car il ne sera plus centré sur une seule et unique fonctionnalité.

La taille doit être ajustée en permanence. Les méthodologies de développement Agile permettent de disposer d’un tableau de bord très pratique pour suivre un microservice. Si cela devient plus lent et moins productif, il sera peut-être temps d’envisager la décomposition pour permettre aux équipes d’être plus efficaces. Jeff Bezos d’Amazon appelle cela « l’équipe de deux pizzas » : une équipe assez petite (avec  Dev, testeurs, administrateurs, gestion de produits, etc.) pour être nourrie avec seulement deux pizzas.

Avant de prendre la décision de les déployer, assurez-vous également de connaître les outils d’automatisation qui sont à votre disposition et qui supporteront également vos microservices.

Déployer plusieurs services est plus difficile que de déployer un seul service. Pour atteindre l’indépendance des services applicatifs, une équipe doit être en mesure de couvrir l’ensemble du cycle de vie. Cela pourrait nécessiter des changements organisationnels, en plus d’une gestion de configuration accrue. Pour chaque microservice, vous devrez créer un pipeline de construction et de livraison dédié qui sera pris en charge par des interconnexions rapides et à faible latence entre chaque service.

De plus, faire des requêtes HTTP (via une API client) et les traiter (via Java API pour RESTful Web Services ou JAX-RS) entre microservices est plus laborieux que de s’appuyer sur une seule application monolithique.

Compte tenu de la maturité de DevOps avec les  conteneurs (vs la lourdeur d’une machine virtuelle qui possède son propre système d’exploitation), les microservices permettent de profiter d’une agilité et d’une productivité renforcées.

Mais le déploiement des microservices n’est pas la panacée. Il ne résoudra pas tous les besoins informatiques de votre entreprise. Cependant, vous pouvez utiliser les microservices avec d’autres architectures existantes .L’essentiel est de trouver le bon compromis.

 

Share This