Les 4 types d'architectures les plus populaires

Pragmatic Nerdz
Oct 10, 2023 - 4 Minutes

L'architecture de votre système est comme la fondation de votre maison. Choisissez le mauvais type d'architecture, c'est juste une question de temps avant que votre système ne s'écroule, quel que soit la beauté de votre code.

Cet article va présenter les patrons d'architecture les plus couramment utilisés dans l'industrie, incluant leurs avantages et inconvénients.

1. Le Monolithe

Le monolithe est un type d'architecture ou tous les composants du système sont regroupés en une seule unité.

Cette l'architecture est idéale pour démarrer tout projet: 

  • Un seul code source, il est donc facile suivre la logique du système,  déboguer en cas de problèmes
  • Le déploiement est facile car le code source génère un seul artéfact (.jar, .exe etc.) à déployer.
  • Coûts d'infrastructure faibles car on a besoin de peu de serveurs pour exécuter le serveur.

Par contre, au fur et à mesure que la base de code grossi et qu'on ajoute des fonctionnalités, la vélocité de développement peut être impactée:

  • Le temps de déploiement augmente. Chaque petit changement dans un composant requiert de redéployer toute l'application
  • Haut niveau de couplage des composants qui mène à du code spaghetti.
  • L'augmentation des régressions: chaque petit changement cause des bogues non désirés.

Stack Overflow est un exemple de plateforme qui utilise avec succès une architecture monolithe.

2. L'architecture Microservices

Contrairement au monolithe, cette architecture décompose les systèmes en une collection de services découplés et déployés de manière indépendante. Chaque service implémente une fonctionnalité d'affaire, a son propre modèle de données, et communique avec les autres services en utilisant les APIs.

Ce type d'architecture favorise:

  • La modularité des fonctionnalités, chaque service peut être développé, déployé et mis a l'échelle de façon indépendante.
  • L'agilité car elle permet d'évoluer et d'innover rapidement car le cycle de développement de chacun des services est plus rapide.
  • La mise à l'échelle plus facile. Comme les services sont séparés, on peut augmenter la capacité plus facilement, uniquement sur les services qui en ont besoin.

Par contre, ce type de service s'ajoute un niveau de complexité:

  • La gestion de la communication entre les services dû au fait que les communications se font via réseau (HTTP, gRPC), qui implique plus de latence ou des risque de pannes.
  • Le maintien de la consistence des données, car les données sont distribuées à travers le different services. Contrairement au monolithe, Il n'y a plus de base de donnée centrale.
  • Chaque service a son propre code source, donc c'est plus complexe de suivre le code ou faire des tests.
  • Les coûts d'infrastructure plus élevés, car chaque service a besoin des ses propres serveurs (cache, base de données, serveur d'application etc.) en plus d'un serveur pour répartir les requêtes des clients (API Gateway) aux différents services.

Netflix est un exemple de compagnie dont le succès provient en partie du fait qu'elles ont adopté ce type d'architecture.

3. L'architecture Microkernel

Receive my Stories your e-mail inbox as soon as I publish them.
Subscribe to my Blog

Les architectures de type mirokernel sont des architectures ou il y a une séparation entre:

  1. Un petit microkernel, le cœur du système, qui implémente les fonctionnalités principales.
  2. Les plugins qui sont des extensions qui ajoutent des fonctionnalités additionnelles au système

Ce type d'architecture favorise

  • L'extensibilité, par l'ajout de fonctionnalités additionnelles via des plugins.
  • L'isolation des pannes. Une panne dans un plugin ne va impacter ni le cœur, ni les autres plugins.

Par contre, ce type d'architecture nécessite une conception minutieuse pour la coordination entre le kernel et les différents plugins pour maintenir la stabilité et la performance du système. 

Un exemple d'application de cette architecture est la plateforme Eclipse. Le kernel d'Eclipse offre les fonctionnalités de gestion de fichier, interface usager, l'inter-communication en la communication entre les plugins. 

L'IDE Elipse a été conçu en intégrant les plugins tels que le compilateur Java, de débogueur, Git etc. Vous pouvez consulter ici la liste des applications conçues sur la plateforme Eclipse.

4. L'architecture orientée événement

Cette architecture encourage la publication et consommation d'événements entre des composants complètements découplés:

  • Des composants publient des événement lorsqu'ils accomplissent une tâche.
  • Et d'autres composant s'abonnent aux événements auxquels ils sont intéressés.
  • Un Message Broker (Kafka, ActiveMQ etc.) est utilisé pour archiver et répartir les événements aux composants.

Cette architecture offre les benefices suivant:

  • Découplage total des composants. Aucun composant n'appelle directement un autre. Toute la communication se fait via les événements.
  • Ce type d'architecture est très robuste. Aucun composant n'est impacté par les erreurs d'autres composants.
  • Parallélisation du traitement qui augmente la performance du système.

Les désavantage de ce type d'architecture:

  • La complexité inhérente de la gestion et synchronization des événements
  • La nature distribuée dans l'architecture rend le débogage et les investigations plus complexes.

Ce type d'architecture est largement utilisé pour l'intégration de systèmes. L'utilisation d'événement comme mécanisme de communication permet l'interopérabilité entre  des systèmes développés sur différentes technologies ou plateformes.


Voici les différents patrons d'architectures que vous avez a votre disposition. N'oubliez jamais que le type d'architecture que vous choisirez doit toujours dépendre de vos challenges et besoins. Dans la réalité, on combine généralement plusieurs types d'architectures: il est tres commun de voir des architectures qui combinent microservices et événements.


Si vous avez aimé l'article, montrez votre soutien avec un ❤️ et abonnez vous a mon blog! Votre engagement m’inspire!

Microservice
Architecture
Microkernel
Monolythe
Eclipse