Architecture MicroServices

Principes

Les microservices sont apparus vers 2015 avec les services REST.

Un microservice est une unité fonctionnelle atomique. Elle porte une fonctionnalité précise, logique et cohérente. Celle-ci se développe, se déploie, s'exécute et gère ses données indendamment des autres services. Les microservices communiquent entre eux au travers d'appels asynchrones sur le formalisme JSON.

Les principes de cette architecture sont:

  • une adhérence très faible,
  • la minification du run,
  • la scalabilité des services,
  • une communication basée sur des messages.

Microservice

Leur implémentation est libre. Le formalisme est restreint:

  • au format d'échange
  • à la gestion des canaux d'échanges.

Un microservice possède:

  • son format d'échange
  • sa base de données
  • ses librairies utilitaires.

Toute dépendance vers un élément partagé contredit le principe de couplage faible.


Les services se sollicitent en cascade via Messaging ou REST. Une bonne organisation est alors indispensable.

Les services doivent être classifiés afin d'être gouvernables.

Echanges asynchrones

Les échanges asynchrones répondent aux problématiques suivantes:

  1. adhérence faible
  2. Pas de contentions physiques liés aux attentes
  3. Robustesse de la solution

Références Async IO:

Une comparaison des échanges REST vs Messaging pour les microservices est ici.

Les patterns d'échanges de cette architecture sont:

Apache Kafka

Le cœur de cette architecture est le gestionnaire de messages. Apache Kafka est LA référence pour la mise en oeuvre.

Quelques références sur la montée en charge et la performance:

Adhérences


AvantagesInconvénients
Interconnexion (lib, protocole, etc)
Le client s'adapte: lib natives spécifiques à utiliser.
Propagation des changements (format et version)Format et versions à gérer en gouvernance.
Run (processus)Pas de process en attente d'un autre.

Haute disponibilité du MOM.

Empilage des messages dans les files.

Exploitation
Gestion et suivi des queues.


Synthèse


AvantagesInconvénients
GouvernanceApproche fonctionnelle.

Grain trop fin au niveau service.

Classifier les services pour abstraire la complexité.

Développement

Périmètre fonctionnel clair et contraint.

Testabilité forte.

Conception logicielle indispensable.

Compétences pluridisciplinaires des développeurs.

ExploitabilitéLes services sont interchangeables et évolutifs.

Très nombreux éléments à surveiller.

Pré-requis:

  • Automatisation: déploiement lourd.
  • Collecte centralisée des logs.
Infrastructure

Infra résiliente aux pannes.

Scalabilité au niveau service.

Nombreux processus.