Qu'est-ce qu'un système distribué ?
Présentation des systèmes distribués et des architectures de microservices
Kev Zettler
Full Stack Web Developer
Un système distribué est un ensemble de programmes informatiques qui utilisent des ressources informatiques sur plusieurs nœuds de calcul distincts pour atteindre un objectif commun et partagé. Les systèmes distribués visent à éliminer les goulots d'étranglement ou les points centraux de défaillance d'un système.
Que se passe-t-il lorsque vous créez une app en tant qu'unité déployable unique qui fonctionne très bien, mais qui grossit et se complexifie au fil du temps ? Elle devient souvent plus difficile à gérer, la vélocité de développement ralentit et le risque de défaillance augmente. Dans ce cas, la trajectoire d'évolution consiste à transformer le monolithe en un système distribué, généralement une architecture de microservices.
Essayez Compass gratuitement
Améliorez votre expérience de développement, cataloguez tous les services et améliorez l'intégrité des logiciels.
Qu'est-ce qu'un système distribué ?
Un système distribué est un ensemble de programmes informatiques qui utilisent des ressources informatiques sur plusieurs nœuds de calcul distincts pour atteindre un objectif commun et partagé. Également connu sous le nom d'informatique distribuée ou de bases de données distribuées, il repose sur des nœuds distincts pour réaliser les communications et la synchronisation sur un réseau commun. Ces nœuds représentent généralement des périphériques matériels physiques distincts, mais ils peuvent également représenter des processus logiciels distincts ou d'autres systèmes encapsulés récursifs. Les systèmes distribués visent à éliminer les goulots d'étranglement ou les points centraux de défaillance d'un système.
Les systèmes informatiques distribués présentent les caractéristiques suivantes :
Partage des ressources : un système distribué peut partager du matériel, des logiciels ou des données.
Traitement simultané : plusieurs machines peuvent traiter la même fonction simultanément.
Évolutivité : la capacité de calcul et de traitement peut être mise à l'échelle selon les besoins lorsqu'elle est étendue à des machines supplémentaires.
Détection des erreurs : les défaillances peuvent être détectées plus facilement.
Transparence : un nœud peut accéder aux autres nœuds du système et communiquer avec eux.
Ressource connexe
Microservices et architecture monolithique
DÉCOUVRIR LA SOLUTION
Améliorez votre expérience de développement grâce à Compass
Quelle est la différence entre un système centralisé et un système distribué ?
Un système informatique centralisé est un système dans lequel tous les calculs sont effectués par un seul ordinateur, au même endroit. La principale différence entre les systèmes centralisés et distribués réside dans le modèle de communication entre les nœuds du système. L'état d'un système centralisé est contenu dans un nœud central auquel les clients accèdent de manière personnalisée. Les nœuds d'un système centralisé accèdent tous au nœud central, ce qui peut entraîner une congestion du réseau et des lenteurs. Un système centralisé possède un point de défaillance unique alors qu'un système distribué n'en a pas.
Les systèmes distribués et les microservices sont-ils identiques ?
Une architecture de microservices est un type de système distribué, car elle décompose une app en composants ou « services » distincts. Par exemple, une architecture de microservices peut comporter des services qui correspondent à des caractéristiques commerciales (paiements, utilisateurs, produits…) où chaque composant correspondant gère la logique métier pour cette responsabilité. Le système disposera alors de plusieurs copies redondantes des services afin qu'il n'y ait aucun point de défaillance central pour un service.
Qu'est-ce que le traçage distribué ?
Le traçage distribué est une méthode utilisée pour esquisser ou surveiller le résultat d'une demande exécutée sur un système distribué. La surveillance d'un système distribué peut s'avérer difficile, car chaque nœud possède son propre flux de journaux et de métriques distinct. Pour obtenir une vue précise d'un système distribué, ces métriques de nœuds distincts doivent être agrégées dans une vue holistique.
Les demandes adressées aux systèmes distribués n'accèdent généralement pas à l'ensemble des nœuds du système, mais à un ensemble partiel ou à un chemin à travers les nœuds. Le traçage distribué met en lumière les chemins d'accès courants via un système distribué, et permet aux équipes d'analyser et de surveiller ces chemins. Il est installé dans chaque nœud du système, puis permet aux équipes d'interroger le système pour obtenir des informations sur l'intégrité des nœuds et les performances des demandes.
Avantages, inconvénients et risques des systèmes distribués
Les systèmes distribués contribuent souvent à améliorer la fiabilité et les performances d'un système. La fiabilité est améliorée en supprimant les points centraux de défaillance et les goulots d'étranglement. Les nœuds d'un système distribué offrent une redondance de sorte qu'en cas de défaillance d'un nœud, d'autres nœuds sont prêts à prendre le relais et à pallier la défaillance. Les performances sont améliorées, car les nœuds peuvent facilement être mis à l'échelle à l'horizontale et à la verticale. Si un système est soumis à une charge importante, des nœuds supplémentaires peuvent être ajoutés pour l'aider à absorber la charge. La capacité d'un nœud individuel peut également être augmentée afin de gérer une charge importante.
Cependant, il y a un revers à la médaille : le « développement tentaculaire », c'est-à-dire lorsqu'un système devient trop complexe et difficile à gérer. À mesure qu'un système se complexifie, les équipes peuvent avoir du mal à l'organiser, le gérer et l'améliorer efficacement. Il peut notamment être difficile de comprendre comment les différents composants sont liés les uns aux autres ou de savoir qui est propriétaire d'un composant logiciel particulier. Il n'est donc pas évident de déterminer comment apporter des modifications aux composants de manière à maximiser l'intégrité opérationnelle et à éviter les impacts négatifs, non seulement sur les composants dépendants, mais aussi sur les clients. Lorsqu'un système possède plusieurs dépôts, des outils spécialisés comme Atlassian Compass peuvent être nécessaires pour gérer et organiser le code d'un système distribué.
Architectures des systèmes distribués
Il existe de nombreux types de système distribué. Les plus courants sont les suivants :
Client-serveur
Une architecture client-serveur se divise en deux responsabilités principales. Le client est responsable de la présentation de l'interface utilisateur, qui se connecte ensuite au serveur via le réseau. Le serveur est responsable de la gestion de la logique métier et des états. Une architecture client-serveur peut facilement se transformer en architecture centralisée si le serveur n'est pas redondant. Une configuration client-serveur réellement distribuée comportera plusieurs nœuds de serveur pour distribuer les connexions client. La plupart des architectures client-serveur modernes sont des clients qui se connectent à un système distribué encapsulé sur le serveur.
À plusieurs niveaux
Une architecture à plusieurs niveaux s'étend sur l'architecture client-serveur. Dans une architecture à plusieurs niveaux, le serveur se décompose en d'autres nœuds granulaires, qui découplent les responsabilités supplémentaires du serveur principal, notamment le traitement et la gestion des données. Ces nœuds supplémentaires sont utilisés pour traiter de manière asynchrone des tâches de longue durée et libérer les nœuds principaux restants pour qu'ils puissent se concentrer sur la réponse aux demandes des clients et l'interface avec le magasin de données.
Pair à pair
Dans un système distribué pair à pair, chaque nœud contient l'instance complète d'une app. Il n'y a aucune séparation des nœuds entre la présentation et le traitement des données. Un nœud contient la couche de présentation et les couches de gestion des données. Les nœuds homologues peuvent contenir les données d'état complètes de l'ensemble du système.
Les systèmes pair à pair présentent l'avantage d'une redondance énorme. Lorsqu'un nœud pair à pair est initialisé et mis en ligne, il découvre d'autres pairs et s'y connecte, puis synchronise son état local avec celui du système dans son ensemble. Grâce à cette fonctionnalité, la défaillance d'un nœud sur un système pair à pair ne perturbera aucun des autres nœuds. Cela signifie également qu'un système pair à pair perdurera.
Architecture orientée service
L'architecture orientée services (SOA) est un prédécesseur des microservices. La principale différence entre l'architecture SOA et les microservices réside dans le périmètre des nœuds : le périmètre des nœuds de microservices se trouve au niveau des fonctionnalités. Dans les microservices, un nœud intègre la logique métier pour gérer un ensemble de fonctionnalités spécifique, comme le traitement des paiements. Les microservices contiennent plusieurs nœuds de logique métier disparates qui interagissent avec des nœuds de base de données indépendants. En comparaison, les nœuds SOA intègrent une app ou une division d'entreprise complète. La limite de service pour les nœuds SOA inclut généralement un système de base de données complet au sein du nœud.
Les microservices sont devenus une alternative plus populaire à l'architecture SOA en raison de leurs avantages. Ils sont plus modulables, ce qui permet aux équipes de réutiliser les fonctionnalités fournies par les petits nœuds de service. Ils sont plus robustes et permettent une mise à l'échelle verticale et horizontale plus dynamique.
Cas d'usage des systèmes distribués
De nombreuses apps modernes utilisent des systèmes distribués. Les apps web et mobiles à fort trafic sont des systèmes distribués. Les utilisateurs se connectent selon la méthode client-serveur (le client est un navigateur web ou une app mobile). Le serveur est alors son propre système distribué. Les serveurs web modernes suivent un modèle de système à plusieurs niveaux. Un équilibreur de charge permet de déléguer des demandes à de nombreux nœuds logiques de serveur qui communiquent via des systèmes de file d'attente de messages.
Kubernetes est un outil populaire pour les systèmes distribués, car il permet de créer un système distribué à partir d'un ensemble de conteneurs. Les conteneurs créent des nœuds du système distribué, puis Kubernetes orchestre la communication réseau entre les nœuds et gère également la mise à l'échelle horizontale et verticale dynamique des nœuds dans le système.
Les cryptomonnaies, comme le Bitcoin et l'Ethereum, constituent un autre bon exemple de systèmes distribués. Plus précisément, ce sont des systèmes distribués pair à pair. Chaque nœud d'un réseau de cryptomonnaie est une réplication autonome de l'historique complet du registre des devises. Lorsqu'un nœud de devise est mis en ligne, il s'amorce en se connectant à d'autres nœuds et en téléchargeant sa copie complète du registre. En outre, les cryptomonnaies ont des clients ou des « portefeuilles » qui se connectent aux nœuds du registre via le protocole JSON RPC.
Conclusion…
Les systèmes distribués sont largement adoptés et utilisés dans la plupart des expériences logicielles modernes. Les apps de réseaux sociaux, les services de streaming vidéo, les sites de commerce électronique, entre autres, sont tous optimisés par des systèmes distribués. Les systèmes centralisés se transforment naturellement en systèmes distribués pour des raisons d'évolutivité. Les microservices sont populaires et largement adoptés pour développer un système distribué.
Alors que les systèmes distribués sont plus complexes à créer et à gérer, Atlassian Compass répond à cette complexité. Il s'agit d'une plateforme de partage d'expériences pour les développeurs qui vous permet de naviguer dans votre architecture distribuée. Il fournit des informations déconnectées sur les résultats d'ingénierie et sur les équipes qui collaborent pour les atteindre dans un emplacement central et interrogeable.
Partager cet article
Thème suivant
Lectures recommandées
Ajoutez ces ressources à vos favoris pour en savoir plus sur les types d'équipes DevOps, ou pour les mises à jour continues de DevOps chez Atlassian.