Imaginez une mégalopole, centre administratif et économique gérant un ensemble plus vaste tel qu'une région, un pays ou un continent. Elle est composée de différents bâtiments ayant des fonctions précises à remplir pour assurer le bon fonctionnement de l'ensemble. De la même manière, une solution logicielle peut être constituée de plusieurs composants architecturés pour fonctionner de concert.
La cité numérique
Notre cité numérique se décompose en deux parties. Nous avons une composante matérielle, qui englobe les murs et les fondations de notre cité numérique, comprenant le stockage, le calcul et le réseau. Nous avons également des composantes administratives, c'est-à-dire les services que notre édifice doit offrir, tels que les APIs, les bases de données, le backend, le frontend et l'interface utilisateur.
Toutes ces tâches pourraient être accomplies par une seule entité, dans un unique bâtiment, un monolithe. Cependant, elles pourraient également être réalisées de manière distribuée, divisées en tâches plus petites, réparties entre plusieurs agents spécialisés appelés microservices. Ces derniers doivent accomplir leurs tâches de manière optimale et communiquer avec les autres microservices pour offrir une expérience complète.
Il est à noter que les architectures monolithes et les microservices ont leurs propres avantages et inconvénients, et il convient d'adapter le choix de l'infrastructure aux besoins et aux ressources disponibles.
Microservices
AVANTAGES | INCONVÉNIENTS |
|
|
Monolithe
AVANTAGES | INCONVÉNIENTS |
|
|
Par exemple, on peut imaginer un système de gestion locative avec une brique de "salutation des utilisateurs", une brique de "gestion de l'upload des documents" et une brique de "gestion des réservations". Cela crée une solution éclatée composée de services petits, faciles à comprendre, travaillant ensemble pour créer le système. Ceci procure différents avantages.
Gestion des arrivées
Notre service, la ville numérique, gagne en popularité et devient une destination touristique prisée. De nombreuses demandes arrivent et doivent être traitées. Tel un contrôleur d’aéroport, le load balancer va diriger les demandes, telles des avions, vers la bonne route et le microservice adapté. Cela assure que les demandes des utilisateurs sont remplies de manière optimisée sans saturer un composant par rapport à un autre.
Le load balancer va aiguiller les requêtes vers les instances de microservices en se basant sur l'usage, la latence et d'autres paramètres. En augmentant le nombre d'instances de microservices en fonction de la demande et de la croissance du service, le load balancer va pouvoir diriger la requête vers la bonne instance de manière optimale.
Dockerisation
Mais aussi efficaces qu'ils puissent l'être, les load balancers ont des limites : un aéroport ne peut pas gérer une piste d'atterrissage bouchée, tout comme les load balancers ne peuvent pas gérer un service dont l'adresse a changé sans en avoir été informés.
Les conteneurs permettent de composer avec la volatilité et la flexibilité de cet environnement. Ils peuvent être vus comme des bureaux mobiles, standardisés et autonomes capables de fournir le service pour lequel ils sont créés de manière uniforme. Ils disposent de toutes les ressources et configurations nécessaires pour exécuter leur service. Cela permet de les faire fonctionner de manière cohérente sans tenir compte de l'infrastructure de déploiement sous-jacente.
Docker est l'architecte de ces conteneurs. Il fournit des plans de fabrication sous la forme de Dockerfiles qui décrivent les modèles nécessaires à la création des microservices avec leurs bibliothèques, dépendances et configurations nécessaires au déploiement de l'image.
Ainsi, le service pourra fonctionner de la même manière quel que soit l'environnement de déploiement. Docker aide non seulement à la création du service, mais il contribue également au développement, au déploiement, à la portabilité et à l'exécution du service.
Croissance de la cité
Si l'on regarde à une échelle plus grande, notre ville, son aéroport et son aiguillage ne sont que des entités d'un monde plus vaste. À ce niveau, multiplier les instances ne suffit plus pour passer à l'échelle, il faut une meilleure stratégie. Les demandes sont plus nombreuses, les flux de données plus importants, de nombreux services sont interconnectés, la cohérence des données devient primordiale, et la résilience de l'architecture est mise à l'épreuve. Le défi n'est plus de croître, mais de croître tout en maintenant la même qualité de service.
CROISSANCE VERTICALE | CROISSANCE HORIZONTALE |
|
|
La croissance de la cité n'est donc pas une mince affaire, car il faut faire des compromis entre complexité, coût, résilience et qualité de service.
Les microservices offrent une approche agile et évolutive pour la construction de solutions logicielles complexes. Leurs avantages sont nombreux, notamment en ce qui concerne la gestion de la croissance. Cependant, le passage à l'échelle peut être un défi. Les choix entre croissance verticale et horizontale impliquent des compromis entre complexité, coût, résilience et qualité de service. Il n'y a pas de solution unique, mais plutôt une nécessité d'adapter la stratégie de croissance en fonction des besoins et des contraintes. Comme toute ville en pleine expansion, notre cité numérique doit faire des choix judicieux pour maintenir son dynamisme tout en préservant la qualité de vie de ses habitants, c'est-à-dire les utilisateurs du service.