49.13. Architecture de microservices avec Java : base de données par service et modèles de cohérence des données

L'architecture de microservices est devenue de plus en plus populaire dans le développement d'applications évolutives et résilientes. Il permet de décomposer des systèmes complexes en services plus petits et indépendants, chacun s'exécutant dans son propre processus et communiquant via des mécanismes légers, généralement des API HTTP. Ce chapitre explore le modèle de base de données par service et les défis liés à la cohérence des données dans un environnement de microservices, en se concentrant sur le langage de programmation Java.

Base de données par service

Le modèle Base de données par service est un composant clé de l'architecture des microservices, dans lequel chaque service possède sa propre base de données, qu'il s'agisse d'une base de données complète, d'un schéma au sein d'une base de données partagée ou même d'un groupe de tables. Cette approche présente plusieurs avantages :

  • Isolement des données : chaque service gère ses propres données, ce qui réduit la complexité et évite le couplage entre les services.
  • Évolutivité : les services peuvent être mis à l'échelle indépendamment, ce qui permet d'allouer des ressources en fonction des besoins de chaque service.
  • Résilience : les pannes d'un service ou de sa base de données n'affectent pas directement les autres services.

Cependant, cette approche pose également des défis, notamment en ce qui concerne la cohérence des données entre les services. Dans un système monolithique, la cohérence est généralement assurée par l'utilisation de transactions ACID (Atomicité, Consistence, Isolation et Durabilité) au sein d'une seule base de données. Dans les microservices, où chaque service possède sa propre base de données, cela n'est pas possible.

Normes de cohérence des données

Pour gérer la cohérence des données dans les microservices, plusieurs modèles peuvent être appliqués :

Sagas

Une saga est une séquence de transactions locales, où chaque transaction locale met à jour la base de données et publie un événement ou un message qui déclenche la transaction suivante de la saga. Si une transaction échoue, des compensations sont effectuées pour annuler l'impact des transactions précédentes. Ce modèle peut être implémenté de deux manières :

  • Orchestration : un coordinateur central (orchestrateur de saga) est chargé de gérer la séquence des transactions.
  • Chorégraphie : chaque service envoie des événements/messages qui déclenchent les étapes suivantes, sans point de contrôle central.

Cohérence éventuelle

La cohérence éventuelle est un modèle dans lequel les systèmes sont conçus pour atteindre une cohérence au fil du temps. Les mises à jour apportées à un service peuvent ne pas être immédiatement répercutées sur d'autres services, mais à terme, tous les services auront une vue cohérente des données.

Recherche d'événements

Le sourcing d'événements implique le stockage de l'état d'une entité sous la forme d'une séquence d'événements d'état. Au lieu de stocker uniquement l'état actuel, chaque événement qui modifie l'état est conservé. Cela vous permet de reconstruire l'état de l'entité à tout moment et garantit que tous les services qui s'appuient sur ces événements peuvent maintenir la cohérence des données.

CQRS (ségrégation des responsabilités des requêtes de commande)

La norme CQRS suggère la séparation des opérations de lecture et d'écriture. Les commandes sont responsables des mises à jour des données, tandis que les requêtes sont utilisées pour lire les données. Cela vous permet d'optimiser chaque aspect indépendamment et facilite l'évolutivité et la maintenance du système.

Mise en œuvre des normes de cohérence en Java

Java est un langage de programmation robuste et mature, doté d'un vaste écosystème de bibliothèques et de frameworks qui peuvent aider à mettre en œuvre une architecture de microservices et des normes de cohérence des données. Des frameworks comme Spring Boot et Micronaut facilitent la création de microservices autonomes, tandis que des bibliothèques comme Axon et Eventuate vous aident à mettre en œuvre des modèles tels que Sagas, Event Sourcing et CQRS.

Exemple de mise en œuvre

Prenons l'exemple d'un système de commerce électronique composé de microservices tels que les commandes, les paiements et l'inventaire. Lorsqu'un client passe une commande, le service Order crée une nouvelle transaction de commande et publie un événement OrderCreated. Le service de paiement écoute cet événement et démarre le processus de facturation. Si le prélèvement réussit, il publie un événement PaymentApproved, que le service d'inventaire écoute pour mettre à jour l'inventaire. Si à un moment donné le processus échoue, les événements de compensation sont publiés pour garantir la cohérence des données.

Avec Spring Boot, par exemple, la publication d'événements peut être effectuée via l'utilisation d'événements d'application et la communication entre les services peut être effectuée via des messages dans les systèmes de messagerie.comme RabbitMQ ou Kafka. Pour la persistance des événements, vous pouvez utiliser des bases de données telles que PostgreSQL avec prise en charge JSONB pour stocker des événements ou des solutions spécifiques telles que Event Store.

Considérations finales

L'architecture de microservices avec Java offre une approche flexible et évolutive pour créer des systèmes complexes. La norme Database per Service et les normes de cohérence des données telles que Sagas, Eventual Consistency, Event Sourcing et CQRS sont fondamentales pour garantir que chaque service maintient son intégrité et que le système dans son ensemble reste cohérent. Bien que la mise en œuvre de ces normes puisse s'avérer difficile, l'écosystème Java fournit les outils et les cadres nécessaires pour faciliter ce processus.

Avec les connaissances et les outils appropriés, les développeurs peuvent créer des systèmes robustes et fiables qui peuvent être facilement adaptés et mis à l'échelle pour répondre aux besoins en constante évolution du monde technologique moderne.

Répondez maintenant à l’exercice sur le contenu :

Quel est le principal avantage du modèle Base de données par service dans l’architecture des microservices et quel est l’un des défis qui y sont associés ?

Tu as raison! Félicitations, passez maintenant à la page suivante

Vous avez raté! Essayer à nouveau.

Image de l'article Architecture de microservices avec Java : Intégration continue/Déploiement continu (CI/CD)

Page suivante de lebook gratuit :

207Architecture de microservices avec Java : Intégration continue/Déploiement continu (CI/CD)

0 minutes

Obtenez votre certificat pour ce cours gratuitement ! en téléchargeant lapplication Cursa et en lisant lebook qui sy trouve. Disponible sur Google Play ou App Store !

Get it on Google Play Get it on App Store

+ 6,5 millions
d'étudiants

Certificat gratuit et
valide avec QR Code

48 mille exercices
gratuits

Note de 4,8/5 dans les
magasins d'applications

Cours gratuits en
vidéo, audio et texte