Note de lecture : Microservices Patterns, par Chris Richardson

Note : 8 ; La bible du Microservice !

A beaucoup de points de vue, c’est un livre imposant ! D’abord par sa taille : 470 pages, découpées en seulement 13 chapitres, mais aussi par son contenu qui va assez loin dans les aspects techniques abordés. Le propos n’en reste pas moins clair, je regrette juste que les fameux patterns soient juste évoqués mais pas vraiment documentés en tant que tel.

Le premier chapitre couvre une trentaine de pages et aborde deux sujets : le monolithe et les patterns. Le monolithe est traité avec intelligence, loin du bashing habituel. Ici on part du postulat d’une architecture hexagonale pour explorer les conséquences en maintenance et en organisation d’équipe ! La big picture des patterns vaut aussi le détour, pas seulement pour la classification de ces derniers, mais aussi par la qualité de l’explication sur l’approche patterns.

Ce sont aussi une trentaine de pages consacrées au chapitre 2 sur les stratégies de décomposition. On y parle, et c’est un peu inattendu, UML, Use Cases et DDD. C’est aussi le moment pour l’auteur d’exposer sa vision du découpage en « capabilities » et « services ». C’est intéressant, de bon niveau même, mais pas flamboyant.

Les choses sérieuses commencent au chapitre 3 et ses 45 pages sur l’IPC qui en est le sujet ! Il couvre les aspects conceptuels tels que la définition des interfaces, le versionning et les transactions. Puis on rentre dans le dur avec la communication synchrone (ReST, gRPC), puis asynchrone (JMS, Kafka), en publication ou en requête / réponse. Le chapitre s’étend jusqu’aux patterns essentiels que sont le circuit breaker et le gateway. C’est du solide.

Encore plus solide, le chapitre 4 nous entraine vers les Sagas, c’est-à-dire les requêtes traversant plusieurs services. L’auteur nous entraine vers les transactions distribuées, les compensations et les pivots tout en rentrant successivement dans les Sagas orientées chorégraphie ou orientées orchestration. C’est l’un des chapitres clé du livre, et l’auteur l’illustre avec son propre framework : Eventuate qui lui ne gère que l’orchestration. On retrouvera Eventuate dans les autres chapitres et ce n’est pas le meilleur aspect du livre.

Au chapitre 5, l’auteur nous invite à concevoir la logique métier. Cela reste mystérieux de prime abord, mais au final il s’agit simplement d’identifier les agrégats au sens DDD et de publier les évènements métiers dont pourront se servir les autres services. Ce qui constitue une bonne introduction au chapitre 6 consacré à l’Event Sourcing. Ce dernier sujet est abordé en profondeur du point de vue conceptuel et du point de vue des aspects design : event store, lock optimiste, snapshots, etc. Seule l’omniprésence d’Eventuate constitue une gêne pour moi.

Le chapitre 7 évoque les requêtes. On aura vite compris que c’est de CQRS dont il est question ! Là encore le traitement du sujet ne décevra pas, à commencer par la composition d’API et ses conséquences, pour aborder les réelles vues CQRS. On a même droit à une « big picture » où services transactionnels et vues query sont reliés via les évènements vus précédemment. « external API patterns », titre du chapitre qui vient ensuite est assez explicite pour que l’on comprenne qu’il va s’agir de gateway. Là encore l’auteur s’efforce de ne rien rater : edge functions (autorisations, cache, logging, limitation d’usage), l’adaptation de protocole, le pattern « back-end for front-end) et même GraphQL qui en est l’alternative. D’un point de vue pratique, j’ai bien aimé l’introduction à Spring Cloud Gateway qui me semble être une alternative plus aboutie à Zuul souvent évoqué dans les autres ouvrages.

Les chapitres 9 et 10 totalisent pas loin de 60 pages uniquement consacrées aux tests ! Et c’est du lourd. Le contenu n’est pas très loin de faire concurrence au « testing Java Microservice » qui continue quand même d’avoir son intérêt, surtout par rapport à Arquilian. Le chapitre 9 se focalise sur la stratégie de test et les test unitaires et Eventuate revient par la fenêtre avec son framework de test unitaire !

Au chapitre 10 on attaque les choses à plus haut niveau avec les tests de service, de contrat et de bout en bout. Le texte nous livre une bonne introduction à Spring Cloud Contract (une alternative à PACT testing) et à WireMock. Les tests de composants « dans le conteneur » et les tests de bout en bout sont évoqués vraiment brièvement. Il reste de la place pour « Testing Java Microservices » !

Au chapitre 11, on s’intéresse aux contraintes de production. L’auteur nous les résument sous 3 thèmes : sécurité, observabilité et configuration. L’authentification a déjà été abordée, mais ici c’est d’avantage la sécurisation des appels entre microservices qui va nous intéresser. C’est l’occasion d’évoquer JWT. Côté observabilité, on parle de health check, de logs et de traces. Tandis que la configuration est surtout abordée via Spring Cloud Configuration. Un chapitre indispensable qui aborde efficacement le « dernier mètre ».

Au chapitre 12, c’est de déploiement qu’il est question. On y va crescendo avec les méthodes classiques de packaging, pour aborder les machines virtuelles, puis Docker pour aboutir enfin à Kubernetes, clou du spectacle. C’est vraiment une excellente introduction à Kubernetes (puis à Istio, car on va jusque-là), certainement parce que l’auteur cherche à déployer des services simples, ce qui clarifie beaucoup le Yaml par ailleurs très bien expliqué. Je suis moins fan du serverless qui clôt le chapitre.

Le livre se referme sur un gros chapitre dédié au refactoring en microservices. Le désormais célèbre « stangler application » ouvre le bal. Puis l’auteur aborde différentes stratégies de refactoring progressif après avoir réglé son compte au « greenfield projects ». Le tour d’horizon des stratégies est excellent, mais le texte échoue à être passionnant à cause de la déclinaison un peu laborieuse qu’en fait l’auteur sur l’étude de cas.

Le livre de Richardson est une somme de connaissances, sinon un monument. Les évocations récurrentes du framework développé par la startup de l’auteur ne sont pas les meilleurs moments du livre. Mais la profondeur de traitement des différents sujets est sans égale dans les autres ouvrages. Cela en fait une lecture très dense surtout quand on considère aussi le volume. Une lecture « dans le dur » pour compléter efficacement le texte de Same Newman qui sert plutôt à dessiner le paysage. Un gros investissement de temps mais une excellente lecture !

Microservices Patterns, par Chris Richardson

Référence complète : Microservices Patterns – Chris Richardson – Manning 2018 – ISBN: 978 1 61729 454 9

Répondre

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion /  Changer )

Photo Google

Vous commentez à l'aide de votre compte Google. Déconnexion /  Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur la façon dont les données de vos commentaires sont traitées.