Un système évolutif est un système en mesure de s’adapter à des charges de travail et des demandes utilisateur qui évoluent rapidement. L’évolutivité indique la capacité de ce système à réagir au changement en ajoutant ou en supprimant des ressources pour répondre aux demandes. L’architecture correspond aux équipements, aux logiciels, aux technologies et aux meilleures pratiques utilisés pour créer les réseaux, applications, processus et services qui constituent l’ensemble de votre système.
Votre système, qui comprend l’architecture, les services, les produits et tout ce qui définit votre marque, est considéré comme évolutif lorsqu’il répond aux conditions suivantes :
- Il peut ajouter des ressources et faire face sans problème à un accroissement de la demande des clients et des charges de travail.
- Il peut facilement supprimer des ressources lorsque la demande et les charges de travail diminuent.
L’idée est de créer un système capable de moduler sa capacité pour répondre à une demande en constante évolution. Le système doit être très facile d’accès et il faut que tous vos clients puissent y accéder, à l’endroit et au moment où ils en ont besoin.
Par exemple, un site Web évolutif et bien conçu fonctionnera tout aussi bien qu’il soit consulté par un ou par plusieurs milliers d’utilisateurs en parallèle. Il ne doit pas présenter de dégradation perceptible de son fonctionnement lorsque le nombre d’utilisateurs connectés augmente.
Qu’est-ce qu’un modèle d’évolutivité informatique ?
Avez-vous déjà joué avec des briques LEGO® ? Peut-être une des structures que vous avez construites sans suivre les instructions s’est-elle effondrée devant vos yeux ? En revanche, lorsque vous avez suivi les instructions illustrées dans les moindres détails, vous avez obtenu une structure solide qui ne se serait effondrée que si vous aviez délibérément retiré des briques. Les techniques de construction présentées dans les instructions ont été testées et se sont révélées efficaces pour résoudre les problèmes structurels courants rencontrés par de nombreux utilisateurs.
Les modèles architecturaux utilisés dans le domaine du développement informatique sont similaires aux techniques de construction que l’on trouve dans les instructions de LEGO®. Ils sont constitués d’un ensemble de techniques de développement et de programmation qui se sont révélés efficaces pour résoudre les problèmes couramment rencontrés dans le développement de systèmes informatiques. Ces modèles ont des structures bien conçues, des propriétés bien définies et ont permis de résoudre des problèmes dans le passé.
Pour autant, cela ne veut pas dire que tous les modèles d’évolutivité informatique vous conviendront. La difficulté consiste à choisir les bons modèles et à les adapter pour résoudre les problèmes spécifiques à votre système. Avec les modèles d’évolutivité, vous gagnez du temps, car le gros du travail a déjà été fait à votre place.
Quels sont les modèles d’évolutivité informatique les plus courants ?
Il existe plusieurs modèles d’architecture évolutive. Nous allons nous intéresser ici aux modèles les plus couramment utilisés pour résoudre des problèmes d’évolutivité architecturale.
Le cube d’évolutivité AKF
Il s’agit d’un modèle tridimensionnel qui définit trois approches d’évolutivité le long des axes X, Y et Z.
Évolutivité sur l’axe X
L’axe X présente l’évolutivité à travers plusieurs instances du même composant. Pour bénéficier de ce type d’évolutivité, vous devez cloner ou répliquer un service, une application ou un ensemble de données derrière un équilibreur de charge. Ainsi, si vous avez N clones d’une application en cours d’exécution, chaque instance gère 1/N de la charge.
Les modèles d’évolutivité sur l’axe X sont faciles à mettre en œuvre et renforcent l’évolutivité des transactions. Malheureusement, leur maintenance peut s’avérer coûteuse, car des ensembles de données entiers sont répliqués sur plusieurs serveurs et les caches de données augmentent de façon exponentielle.
Évolutivité sur l’axe Y
L’évolutivité sur l’axe Y se définit par la séparation ou la segmentation de composants non similaires en macroservices ou microservices le long des frontières des verbes ou des noms. Par exemple, un segment basé sur un verbe peut définir un service par « payer une commande » et un segment basé sur un nom par « panier d’achat ».
Il est possible de faire évoluer chaque service indépendamment, ce qui vous permet d’ajouter des ressources aux seuls services qui en ont besoin à ce moment-là. Pour garantir une haute disponibilité, chaque service doit disposer de son propre ensemble de données non partagé.
Les ensembles de données non partagés vous aident à localiser les défaillances, ce qui vous permet de diagnostiquer et de résoudre rapidement et facilement les problèmes, sans avoir à analyser l’ensemble du système. Toutefois, l’axe Y prend beaucoup de temps à configurer et n’est pas très facile à mettre en œuvre.
Évolutivité sur l’axe Z
Alors que l’axe Y sépare les composants non similaires, l’axe Z est quant à lui utilisé pour traiter la segmentation des composants similaires de votre système. Chaque serveur exécute une copie identique du code, mais uniquement pour un sous-ensemble (également appelé « shard ») de ces données.
L’axe Z est fréquemment utilisé pour séparer les clients selon leur emplacement géographique ou selon leur type. Par exemple, les clients ayant souscrit un abonnement à un site d’informations peuvent disposer d’un accès illimité 24 h/24 et 7 j/7 à tout le contenu du site. Les utilisateurs de ce même site n’ayant pas souscrit d’abonnement ont accès aux mêmes données, mais ils ne peuvent ouvrir et lire que trois ou quatre articles par mois.
Cette configuration peut réduire les coûts opérationnels, car les segments de données sont plus petits et nécessitent moins de ressources de stockage. Pour autant, l’axe Z prend beaucoup de temps à concevoir et à mettre en œuvre, et il faut beaucoup d’automatisation pour réduire les frais généraux du système.
Modèles d’évolutivité horizontale et verticale
L’évolutivité informatique peut être pensée verticalement ou horizontalement.
Évolutivité verticale
L’évolutivité verticale consiste à augmenter la capacité d’un composant, tel qu’un serveur, pour améliorer ses performances. Plus le trafic augmente sur votre serveur, plus ses performances diminuent. L’ajout de RAM et de disques de stockage augmente les performances et permet au serveur de gérer plus facilement l’augmentation du trafic.
L’évolutivité verticale est facile à mettre en œuvre, elle vous permet de réaliser des économies, car vous n’avez pas à acheter de nouvelles ressources, et sa maintenance est facile. Cependant, elle offre un point de défaillance unique pouvant entraîner de longs temps d’arrêt.
Une jeune entreprise peut opter pour l’évolutivité verticale pour réduire ses coûts. Mais avec cette approche verticale, les limites de la RAM et du stockage finiront par être atteintes et vous devrez ajouter des ressources supplémentaires pour répondre à la demande.
Évolutivité horizontale
L’évolutivité horizontale consiste à augmenter la capacité de performance du système en lui ajoutant des ressources du même type que celles qu’il possède déjà. Par exemple, au lieu d’augmenter la capacité d’un serveur, vous ajoutez d’autres serveurs au système. Un équilibreur de charge permet de répartir la charge de travail entre les différents serveurs en fonction de leur disponibilité. Cette opération augmente les performances globales du système.
Plus de ressources informatiques, c’est une meilleure tolérance aux défaillances et moins de risques d’arrêt. Attention, l’ajout de serveurs et d’équilibreurs de charge peut être coûteux. Il est bon d’envisager l’utilisation d’une combinaison de ressources sur site et de ressources dans le cloud pour gérer une augmentation du trafic.
L'équilibrage de charge
Les équilibreurs de charge répartissent efficacement les demandes des utilisateurs et les charges de travail sur un groupe de serveurs de back-end. L’idée est de partager le travail de manière équilibrée entre les différentes ressources de manière à ce qu’aucune d’entre elles ne soit surchargée. L’équilibrage de charge aide ainsi votre service informatique à garantir la disponibilité et l’évolutivité de vos services.
Les tâches d’un équilibreur de charge sont les suivantes :
- Découvrir les ressources disponibles dans le système
- Vérifier l’état des ressources pour déterminer quelles sont les ressources disponibles, mais aussi si ces ressources fonctionnent correctement et peuvent absorber la charge de travail Si un serveur est disponible, mais corrompu, interrompre l’accès à ce serveur et rediriger le travail vers un autre serveur sans que l’utilisateur remarque de retard ou de temps d’arrêt
- Déterminer l’algorithme à utiliser pour répartir le travail entre plusieurs serveurs de back-end en bon état de marche
Les méthodes d’équilibrage de charge (algorithmes) les plus courantes sont les suivants :
- Méthode du plus petit nombre de connexions : le trafic est dirigé vers le serveur qui présente le moins de connexions actives.
- Méthode du temps de réponse le plus court : l’équilibreur de charge mesure le temps que met le serveur à répondre à une demande de surveillance du bon état de fonctionnement. Le trafic est ensuite envoyé au serveur présentant le meilleur état de fonctionnement et le temps de réponse le plus court. Avec cet algorithme, certains équilibreurs de charge prennent en compte les connexions actives.
- Méthode du tourniquet : le trafic est envoyé au premier serveur disponible, quelles que soient sa charge de travail et ses connexions actives à ce moment-là. Une fois que ce serveur a reçu la demande et travaille dessus, l’équilibreur de charge le place à la fin de la file. Le risque est qu’un serveur recevant des demandes sollicitant considérablement le processeur soit toujours en train de travailler sur des demandes précédentes lorsqu’il arrive à nouveau en tête de la file.
- Méthodes de hachage : le choix du serveur qui recevra la demande dépend d’un hachage des données du paquet entrant. Ces données peuvent inclure des informations telles que l’adresse IP, le numéro de port ou le nom de domaine.
Cache – Réseaux de diffusion de contenu (CDN)
Un CDN est un réseau mondial de serveurs utilisé pour optimiser et accélérer l’accès aux ressources Web statiques et leur distribution. Les ressources statiques sont des éléments tels que le JavaScript, le CSS, les images et d’autres fichiers multimédias qui ne changent pas très souvent.
Un site Web peut comporter jusqu’à 80 % de contenu statique. Par exemple, les vidéos disponibles sur une plateforme de streaming ne changent pas très souvent. Certaines vidéos deviennent très populaires et peuvent être vues des millions de fois par jour. Le transfert de ce contenu statique vers un CDN réduit la charge reposant sur le serveur d’origine, améliore la disponibilité du contenu à l’échelle mondiale et rapproche les données des clients, ce qui les rend facilement accessibles et hautement disponibles.
Microservices
Les microservices constituent un groupe de petites applications disparates qui peuvent travailler toutes ensemble. Chaque microservice a une fonction et une responsabilité spécifiques et ils peuvent être développés par différentes équipes indépendamment. Les microservices ne dépendent pas les uns des autres pour fonctionner, mais ils doivent pouvoir communiquer entre eux.
Leur évolution est simplifiée, car elle ne s'applique qu'à ceux qui en ont besoin à un instant T. Ils peuvent être déployés indépendamment, sans nécessiter de coordination avec les diverses équipes de développement. Les microservices fonctionnent bien pour les applications Web, les développements et les déploiements rapides et les équipes réparties dans le monde entier.
Ils permettent de faire évoluer rapidement les transactions et les grands ensembles de données et vous aident à localiser les pannes, ce qui garantit la haute disponibilité de vos systèmes. En outre, comme de grandes fonctionnalités disjointes peuvent être divisées en services plus petits, la complexité de votre codebase est réduite.
Le sharding
Pour faire simple, le sharding consiste à diviser une grande base de données en composants plus petits, plus faciles à gérer et plus évolutifs. Lorsqu’une base de données grandit, le nombre de demandes et de transactions qu’elle reçoit augmente. Ce phénomène ralentit le temps de réponse. Par ailleurs, il peut être très coûteux d’assurer la maintenance d’une base de données trop importante.
Un shard est une partition d’une base de données. Pour répartir la charge de travail, ces partitions peuvent être réparties sur plusieurs serveurs de base de données distribués.
Vous pouvez utiliser le sharding lorsque vos bases de données sont trop volumineuses, car :
- les petites bases de données sont plus faciles à gérer ;
- les petites bases de données sont plus rapides et des shards individuels sont plus performants qu’une seule grande base de données ;
- les petites bases de données sont plus évolutives du fait que de nouveaux shards de données peuvent être créés et distribués sur plusieurs serveurs ;
- le sharding permet de réduire les coûts, car vous n’avez pas besoin de serveurs volumineux et coûteux pour les héberger.
La mise en œuvre de modèles d’architecture évolutifs dans votre système devrait lui permettre de maintenir son niveau de performance tout en augmentant la charge qu’il doit traiter.
Personnalisez votre diagramme d’architecture d’application.
DémarrerÀ propos de Lucidchart
Lucidchart, une application de création de diagrammes intelligents basée sur le cloud, est un élément central de la suite de collaboration visuelle de Lucid. Cet outil intuitif, basé sur le cloud, permet aux équipes de collaborer en temps réel pour créer des logigrammes, des maquettes, des diagrammes UML, des cartes de parcours client, et bien plus encore. Lucidchart permet aux équipes d'aller de l'avant et de bâtir l'avenir plus rapidement. Lucid est fier de compter parmi ses clients des organisations de premier plan dans le monde entier, telles que Google, GE et NBC Universal, ainsi que 99 % des entreprises figurant au classement Fortune 500. Lucid travaille en partenariat avec les leaders du marché, notamment Google, Atlassian et Microsoft. Depuis sa création, la société a reçu de nombreuses récompenses pour ses produits, son fonctionnement et sa culture d'entreprise. Pour plus d'informations, rendez-vous sur lucidchart.com.