Published Date: February 1, 2021
Un système distribué est un environnement informatique dans lequel divers composants sont répartis sur plusieurs ordinateurs (ou autres dispositifs informatiques) appartenant à un même réseau. Ces appareils divisent le travail et coordonnent leurs efforts pour effectuer des tâches plus efficacement qu’un seul appareil.
Les systèmes distribués constituent un développement important pour l’IT et l’informatique, car l’augmentation considérable et la complexité croissante des tâches connexes seraient impossibles à gérer pour une machine seule. Mais l’informatique distribuée offre également des avantages supplémentaires par rapport aux environnements informatiques traditionnels. Les systèmes distribués réduisent en effet les risques liés à l’existence d’un point de défaillance unique, renforçant la fiabilité et la tolérance aux interruptions de service. Les systèmes distribués modernes sont généralement conçus pour être évolutifs en quasi-temps réel : vous pouvez ainsi créer des ressources informatiques supplémentaires à la volée, afin d’augmenter les performances et réduire encore le temps d’exécution.
Historiquement, l’informatique distribuée était chère, complexe à configurer et difficile à gérer. Mais grâce aux plateformes de logiciel en tant que service (SaaS) qui offrent des fonctionnalités étendues, elle s’est normalisée et est devenue plus abordable pour les entreprises, grandes ou petites. C’est pourquoi, aujourd’hui, tous les types de tâches informatiques, de la gestion de bases de données aux jeux vidéo, utilisent l’informatique distribuée. D’ailleurs, de nombreux types de logiciels tels que les systèmes de cryptomonnaie, les simulations scientifiques, les technologies basées sur la blockchain et les plateformes d’IA, ne seraient tout simplement pas viables sans ces plateformes.
Dans cet article, nous allons étudier le fonctionnement de ces systèmes, les défis et les risques de ces plateformes et les nombreux avantages de l’informatique distribuée.
Comment fonctionne un système distribué ?
Les systèmes distribués ont évolué au fil du temps, mais les implémentations les plus courantes d’aujourd’hui sont largement conçues pour fonctionner via Internet et, plus précisément, le cloud. Un système distribué commence par une tâche, le rendu d’une vidéo par exemple, pour aboutir à un produit fini prêt à être publié. L’application web (ou les applications distribuées) qui gère cette tâche, comme un éditeur vidéo sur un ordinateur client, divise le travail en plusieurs parties. Dans cet exemple simple, il s’agit d’un algorithme qui donne à chaque ordinateur d’un groupe d’une douzaine de machines (ou nœuds) une image à traiter. Une fois le rendu effectué, l’application de gestion donne au nœud une nouvelle image à traiter. Ce processus se poursuit jusqu’à ce que la vidéo soit terminée et que toutes les pièces aient été assemblées. Un système comme celui-ci n’a pas à se limiter à 12 nœuds : le travail peut être réparti sur des centaines voire des milliers de nœuds, transformant un effort de plusieurs jours pour un ordinateur seul en une tâche de quelques minutes.
Il existe aujourd’hui de nombreux modèles et architectures de systèmes distribués. Les systèmes client-serveur, le type de système distribué le plus traditionnel et le plus simple, consistent en une multitude d’ordinateurs en réseau qui interagissent avec un serveur central à des fins de stockage, de traitement ou de tout autre objectif commun des données. Les réseaux de téléphonie cellulaire, quant à eux, représentent un type sophistiqué de système distribué qui partage les applicatifs entre les téléphones, les systèmes de commutation et les appareils connectés. Les réseaux peer-to-peer, dans lesquels les applicatifs sont répartis entre des centaines ou des milliers d’ordinateurs exécutant tous le même logiciel, sont eux aussi un exemple d’architecture de système distribué. À l’heure actuelle, les formes les plus courantes de systèmes distribués dans l’entreprise sont celles qui fonctionnent sur le Web, transférant les applicatifs à des dizaines d’instances de serveur virtuelles basées dans le cloud et créées au fil des besoins, puis arrêtées une fois la tâche terminée.
Quelles sont les principales caractéristiques d’un système distribué ?
Les systèmes distribués sont généralement définis par les caractéristiques et fonctionnalités clés suivantes :
- l’évolutivité. La capacité à croître à mesure que la taille de l’applicatif augmente est une caractéristique essentielle des systèmes distribués, qui s’obtient en ajoutant des unités de traitement ou des nœuds supplémentaires au réseau en fonction des besoins ;
- la concurrence. Les composants du système distribué s’exécutent simultanément. Ils se caractérisent également par l’absence d’« horloge globale », les tâches se produisant dans le désordre et à des rythmes différents ;
- la disponibilité/tolérance aux interruptions de service. Si un nœud arrête de fonctionner, les nœuds restants peuvent continuer à fonctionner sans perturber le calcul global ;
- la transparence. Un programmeur externe ou un utilisateur final voit le système distribué comme une unité de calcul unique et non comme ses parties sous-jacentes, ce qui lui permet d’interagir avec un seul périphérique logique sans avoir à se préoccuper de l’architecture du système ;
- l’hétérogénéité. Dans la plupart des systèmes distribués, les nœuds et les composants sont souvent asynchrones et répartis sur des machines, du middleware, des logiciels et des systèmes d’exploitation différents. Cela permet d’élargir les systèmes distribués en ajoutant de nouveaux composants ;
- la réplication. Les systèmes distribués permettent le partage des informations et des messages dans un objectif de cohérence des ressources redondantes telles que les composants logiciels ou matériels, ce qui améliore la tolérance aux interruptions de service, la fiabilité et l’accessibilité.
Qu’est-ce que le traçage distribué ?
Le traçage distribué, parfois appelé traçage des requêtes distribuées, est une méthode de supervision des applications, en particulier celles qui reposent sur une architecture de microservices, et qui sont couramment déployées sur des systèmes distribués. Le traçage distribué est essentiellement une forme d’informatique distribuée dans la mesure où il est couramment employé pour superviser les opérations des applications s’exécutant sur des systèmes distribués.
Dans le développement et l’exploitation de logiciels, le traçage permet de suivre le parcours d’une transaction dans une application, par exemple une transaction par carte de crédit en ligne, qui va de l’achat initial du client, passe par le processus de vérification et d’approbation, jusqu’à l’aboutissement de la transaction. Un système de traçage supervise ce processus étape par étape, aidant un développeur à découvrir les bugs, les goulots d’étranglement, la latence et autres problèmes touchant l’application.
Le traçage distribué est rendu indispensable par la complexité considérable des architectures logicielles modernes. Un système de traçage distribué est conçu pour fonctionner sur une infrastructure de services distribués, dans laquelle il peut suivre plusieurs applications et processus simultanément sur de nombreux nœuds et environnements informatiques concurrents. Sans traçage distribué, une application reposant sur une architecture de microservices et s’exécutant sur un système aussi vaste et complexe qu’un environnement système distribué d’envergure internationale serait impossible à superviser efficacement.
Quels sont les modèles propres aux systèmes distribués ?
Un modèle de conception logicielle est un langage de programmation défini comme une solution idéale à un problème de programmation contextualisé. Les modèles sont des solutions réutilisables à des problèmes courants, qui représentent les meilleures pratiques du moment et qui, sans fournir le code fini, offrent des capacités de réplication et des orientations pour la résolution d’un problème donné ou l’implémentation d’une fonctionnalité indispensable.
Lorsque l’on réfléchit aux défis d’une plateforme informatique distribuée, l’astuce consiste à la décomposer en une série de modèles interconnectés. En effet, réduire le système en composants plus petits, plus gérables et plus faciles à comprendre permet d’abstraire une architecture complexe. On utilise couramment des modèles pour décrire les systèmes distribués, parmi lesquels la ségrégation des responsabilités de commande et de requête (CQRS) et la validation en deux phases (2PC). On emploie différentes combinaisons de modèles pour concevoir des systèmes distribués, et chaque approche présente son propre lot d’avantages et d’inconvénients.
Quels sont les avantages des systèmes distribués ?
Les systèmes distribués offrent un certain nombre d’avantages par rapport aux systèmes monolithiques ou uniques :
- une flexibilité accrue. Il est plus facile d’ajouter de la puissance de calcul au fil de l’évolution des besoins en services. Dans la plupart des cas aujourd’hui, vous pouvez ajouter à la volée des serveurs à un système distribué ;
- la fiabilité. Un système distribué bien conçu peut résister aux interruptions de service d’un ou de plusieurs de ses nœuds sans que cela ne dégrade gravement les performances. Dans un système monolithique, toute l’application s’arrête si le serveur subit une interruption de service ;
- l’augmentation de la vitesse. Un trafic important peut paralyser des serveurs uniques, ce qui a un impact sur les performances pour tous les utilisateurs. L’évolutivité des bases de données distribuées et autres systèmes distribués facilite leur maintenance et préserve également des niveaux de performances élevés ;
- la géo-distribution. La livraison de contenu distribué est à la fois intuitive pour l’internaute et vitale pour les organisations mondiales.
Quels sont les défis des systèmes distribués ?
Les systèmes distribués sont considérablement plus complexes que les environnements informatiques monolithiques et présentent un certain nombre de défis en matière de conception, d’exploitation et de maintenance, parmi lesquels :
- des possibilités d’interruption de service accrues. La probabilité de défaillances augmente avec l’ajout de nouveaux systèmes à un environnement informatique. Sans une conception soigneuse, la défaillance d’un seul nœud peut entraîner l’arrêt du système complet. Si les systèmes distribués sont conçus pour être tolérants aux interruptions de service, cette caractéristique n’est ni automatique ni infaillible ;
- des défis liés au processus de synchronisation. Les systèmes distribués fonctionnent sans horloge globale, imposant une programmation minutieuse pour assurer la synchronisation correcte des processus et ainsi éviter les retards de transmission qui entraîneraient des erreurs et la corruption des données. Dans un système complexe, un jeu vidéo multijoueur par exemple, la synchronisation peut être difficile, en particulier sur un réseau public ;
- une évolutivité imparfaite. Doubler le nombre de nœuds d’un système distribué ne double pas nécessairement les performances. Mettre au point un système distribué efficace qui maximise l’évolutivité est une entreprise complexe qui doit prendre en compte l’équilibrage de charge, la gestion de la bande passante et d’autres problématiques ;
- une sécurité plus complexe. La gestion d’un grand nombre de nœuds dans un environnement hétérogène ou distribué à l’échelle mondiale crée de nombreux défis de sécurité. Un seul maillon faible dans un système de fichiers ou un réseau plus vaste de systèmes distribués peut exposer l’ensemble du système à des attaques ;
- une complexité accrue. Les systèmes distribués sont plus complexes à concevoir, à gérer et à comprendre que les environnements informatiques traditionnels.
Quels sont les risques des systèmes distribués ?
Les défis des systèmes distribués que nous venons de voir engendrent un certain nombre de risques. Voici les plus importants :
- la sécurité. Les systèmes distribués sont aussi vulnérables aux attaques que tout autre système, mais leur nature distribuée élargit considérablement la surface d’attaque et expose les organisations aux menaces ;
- le risque de défaillance du réseau. Les systèmes distribués sont très dépendants des réseaux publics pour la transmission et la réception des données. Si un segment d’Internet devient indisponible ou surchargé, les performances du système distribué peuvent diminuer ;
- des problèmes de gouvernance et de contrôle. Les systèmes distribués n’offrent pas les possibilités de gouvernance des systèmes monolithiques à serveur unique, ce qui crée des problèmes d’audit et de respect des lois internationales sur la protection de la vie privée, et du RGPD en particulier. Les environnements distribués à l’échelle mondiale peuvent limiter la capacité à offrir certains niveaux de garantie et nuire à la visibilité sur l’emplacement des données ;
- le contrôle des coûts. Contrairement aux systèmes centralisés, l’évolutivité des systèmes distribués permet aux administrateurs d’ajouter facilement de la capacité supplémentaire selon les besoins, ce qui peut également augmenter les coûts. La tarification des systèmes informatiques distribués basés sur le cloud repose sur l’utilisation (nombre de ressources mémoire et puissance CPU consommée au fil du temps). Une augmentation soudaine de la demande peut entraîner des factures très lourdes pour les entreprises.
Comment appliquer le contrôle d’accès dans les systèmes distribués ?
Les administrateurs emploient diverses approches pour gérer le contrôle d’accès dans les environnements informatiques distribués, des traditionnelles listes de contrôle d’accès (ACL) au contrôle d’accès basé sur les rôles (RBAC). L’un des mécanismes les plus prometteurs pour les systèmes distribués est le contrôle d’accès basé sur les attributs (ABAC), qui contrôle l’accès aux objets et aux processus à l’aide de règles incluant des informations sur l’utilisateur, l’action demandée et l’environnement de la requête. Les administrateurs peuvent également affiner ces types de rôles pour restreindre l’accès à certaines heures de la journée ou à certains emplacements.
Comment sont utilisés les systèmes distribués ?
Les systèmes distribués sont utilisés lorsqu’une charge de travail est trop importante pour être gérée par un seul ordinateur ou une seule machine. Ils sont également utiles dans les situations où l’applicatif peut connaître une évolution rapide, comme le trafic de commerce électronique pendant le Cyber Monday. Aujourd’hui, pratiquement toutes les applications web connectées à Internet reposent sur une forme de système distribué.
En voici quelques exemples courants :
- les réseaux de télécommunications (dont les réseaux cellulaires et la structure Internet) ;
- les systèmes de rendu graphique et vidéo ;
- le calcul scientifique, notamment le repliement des protéines et la recherche génétique ;
- les systèmes de réservation de compagnies aériennes et d’hôtels ;
- les systèmes de visioconférence multi-utilisateurs ;
- les systèmes de traitement de cryptomonnaie (Bitcoin, par exemple) ;
- les systèmes de partage de fichiers peer-to-peer (BitTorrent, par exemple) ;
- les systèmes informatiques communautaires distribués (Folding@Home, par exemple) ;
- les jeux vidéo multijoueurs ;
- les détaillants mondiaux et distribués ainsi que la gestion de la chaîne logistique (comme Amazon).
Quels sont différents types de déploiements distribués ?
Les déploiements distribués peuvent prendre la forme de petits déploiements à service unique sur des réseaux locaux, ou de déploiements mondiaux à grande échelle. En plus de leur taille et de leur complexité globale, les entreprises peuvent évaluer les options de déploiement en fonction de la taille et de la capacité de leur réseau informatique, de la quantité de données qu’elles consommeront, de la fréquence à laquelle elles exécutent des processus, qu’ils soient planifiés ou ad hoc, du nombre d’utilisateurs accédant au système, de la capacité de leur datacenter et des exigences nécessaires en matière de fidélité et de disponibilité des données.
Sur la base de ces considérations, les déploiements distribués sont classés en fonction de leur envergure : département, petite entreprise, moyenne entreprise ou grande entreprise. Bien qu’il n’y ait pas de taxonomie officielle pour distinguer une petite entreprise d’une moyenne, ces catégories offrent un point de départ pour planifier les ressources nécessaires à la mise en œuvre d’un système informatique distribué. Les systèmes distribués peuvent également évoluer au fil du temps et gagner progressivement en envergure, passant de l’échelle du département à celui de la petite entreprise.
Pourquoi les systèmes distribués sont-ils indispensables aujourd’hui ?
L’informatique moderne ne serait pas possible sans les systèmes distribués. Ils sont essentiels au fonctionnement des réseaux sans fil, des services de cloud computing et d’Internet. Sans les systèmes distribués, aucune de ces technologies ne serait possible.
Mais avons-nous besoin de systèmes distribués pour les tâches d’entreprise qui n’ont pas la complexité d’un réseau de télécommunications complet ? Dans la majorité des cas, la réponse est oui. Les systèmes distribués offrent une évolutivité et des performances hors d’accès pour les systèmes monolithiques. Et comme ils tirent parti des capacités d’autres dispositifs et processus informatiques, ils peuvent offrir des fonctionnalités qui seraient difficiles ou impossibles à développer sur un système unique.
Cela inclut des choses comme l’exécution d’une sauvegarde de serveurs et d’applications hors site : si le catalogue principal ne voit pas les octets de segment dont il a besoin pour une restauration, il peut demander aux autres nœuds distants d’envoyer les segments. Actuellement, tout ce que vous faites ou presque avec un appareil informatique exploite la puissance des systèmes distribués, qu’il s’agisse d’envoyer un e-mail, de jouer à un jeu ou de lire cet article sur le Web.
Les systèmes distribués sont bien placés pour dominer l’informatique telle que nous la connaissons dans un avenir proche, et quasiment tous les types d’applications ou de services sont destinés à incorporer une forme de calcul distribué. L’impératif de disponibilité permanente et d’omniprésence de l’informatique explique la force de cette tendance, d’autant plus que les utilisateurs se tournent de plus en plus vers les appareils mobiles pour accomplir des tâches quotidiennes. À l’avenir, les systèmes distribués vont certainement renforcer leur importance dans l’informatique globale, les développeurs d’entreprise s’appuyant de plus en plus sur des outils distribués pour rationaliser le développement, déployer les systèmes et l’infrastructure, faciliter les opérations et gérer les applications.
Les 5 pratiques fondamentales du DevOps
Qu’est-ce qui distingue les équipes DevOps performantes de celles qui échouent ? Ces 5 pratiques fondamentales.