Aller directement à la fin des métadonnées
Aller au début des métadonnées

Depuis plusieurs années, Gadz.org s'oriente vers une architecture découpée en services, voir en micro-services. Voyons ensemble ce que cela signifie et les raisons de ce choix.

Cet article ne rentre volontairement pas dans les détails techniques. Cecis feront l'objets d'autres billets de blog. Pour les plus impatients, n'hésitez pas à poser vos questions en commentaire


L'architecture en services c'est quoi ?

Architecture en services

L'architecture orienté service vise à résoudre un problème récurent dans les environnement informatique : l'augmentation boulimique des fonctionnalités des applications. Les applications grossissant, leur complexité augmente pour finalement devenir d'énormes monstres que plus personne n'ose modifier de peur de "casser" quelque chose. Rajoutez à cela des resources humaines avec un fort turnover vous serait assurer d'avoir perdu toute votre agilité.

Pour répondre à ce problème, les applications sont découpées en applications plus petites ayant chacun un périmètre fonctionnel bien défini.

 Mais ces applications ne sont que rarement autonomes et ont besoin de communiquer avec les autres applications, le plus souvent au moyen d'API [wikipedia]. Dans les systèmes Gadz.org  par exemple, lors de l'inscription d'un nouvel utilisateur dans le site de la Soce, il est également nécessaire de l'inscrire dans le système d’authentification universel.

Architecture en services : plusieurs applications qui dialoguent entre elles

Cette architecture présente un gros avantage  : le découpage des équipes projets. Il nous est ainsi possible de sous-traité le développement du site de la Soce tout en l'intégrant au sein d'un environnement applicatif plus large. Elle nous permet également de trouver des briques "toute faites" dans le commerce ou open-source.

Mais l'architecture en services ne résout pas tout ! La complexité n'a pas été supprimée elle a été déplacée. Le parc applicatif évoluant, les liens entre les applications s'intensifient au point de créer des couplages fort entre le fonctionnement des applications et de brouiller les pistes entre les responsabilité de chacune.

Deuxièmement, les "services" restent des applications à part entière, nécessitant chacune de multiple compétences (gestion de base de données, envoie de mail...) et une bonne connaissance de la base de code pour en assurer l'évolutivité. Même si le phénomène est amoindir, les équipes projets restent de tailles conséquente, ce qui est un problème pour des organisations telles que la notre, reposant sur des bénévoles. De plus, la complexité des applications pose généralement une barrière à l'entrée pour les nouveaux bénévoles, souvent débutants.

Architecture en micro-services

Pourquoi ne pas faire des applications encore plus petites ?

C'est ce que proposent les architecture en micro-services. Pour éviter les problèmes des gros projets, il suffit de n’avoir que des petits projets.
 
Architecture en micro-services : plein de petites applications qui dialoguent entre elles

Ceci présente de nombreux avantages :

  • L'application étant de taille limité, les "cas particuliers" sont peu nombreux et facilement identifiables
  • Les équipes projets sont réduites et plus spécialisées
  • L'architecture force les interfaces à être formalisées, une obligation de documenter les entrées-sortie de son application
  • Les technologie utilisées sont indépendantes et permettent de sélectionner celle qui répond le mieux aux besoins spécifiques
  • Il est plus facile de démarrer un nouveau projet en s'appuyant sur les services existants
  • L'amélioration des performances est simplifiée : il est plus facile d'identifier le service le plus lent et de l'améliorer

Evidemment, les micros-services ne sont pas une solution miracle et il viennent avec leur lot de complications :

  • L'industrialisation (la mise en production) est plus complexe : "beaucoup de petites applications" signifie "beaucoup de déploiements", ce qui peut être pénible à réaliser si le processus de déploiement est lourd à utiliser
  • Les interfaces doivent être documentées : c'est également un inconvénient car un service non documenté deviendra rapidement inutilisable
  • Le système devient distribué : la vision globale est plus compliquée à atteindre et nécessite beaucoup de communication entre les équipes

Chez Gadz.org, ça donne quoi ?

L'architecture Gadz.org

Nous avons opté pour une architecture en "bus de message" plutôt que d’utiliser des API [les architectures microservices]. Vous pourrez en apprendre plus sur les détails techniques sur la page de l'Architecture Orientée Service (SOA). A l'heure de l'écriture de cet article, elle est encore en cours de construction et de formalisation mais les progrès sont rapide.

Et maintenant ?

L'histoire de Gadz.org a montré qu'il est difficile de maintenir de grosse applications dans un contexte où la resource bénévole est incertaine. Bien souvent, lorsque les initiateur d'un projet s'en vont, la connaissance part avec eux. De plus, il est compliqué de "passer la main" car la complexité des applications décourage rapidement les nouveaux venus.

Nous espérons que cette nouvelle architecture réduira cette barrière à l'entrée en permettant aux débutant d'appréhender nos systèmes petits à petit et en leur donnant la possibilité d'ajouter de nouvelle fonctionnalités dès leur arrivée, en utilisant les technologies avec lesquelles ils sont à l'aise.

Si ce sujet vous intéresse, laissez des commentaires sur Confluence et venez nous rejoindre sur Slack !

Sources

http://blog.octo.com/larchitecture-microservices-sans-la-hype-quest-ce-que-cest-a-quoi-ca-sert-est-ce-quil-men-faut/

  • Aucune étiquette