Le tome 2 des Confluent Chronicles: The Force of Kafka + Flink Awakens | Télécharger la BD

Qu’est-ce qu’un système distribué ?

Les systèmes distribués sont un ensemble de composants et de machines indépendants, répartis sur différents environnements, qui communiquent entre eux afin de fonctionner comme une seule et même unité.

Le but de cette présentation est de vous familiariser, à l'aide d'exemples concrets, avec les systèmes distribués : leur architecture de base, leurs avantages et inconvénients, et les solutions les plus utilisées en matière de streaming distribué en temps réel.

Fondée par les créateurs d’Apache Kafka, Confluent est une plateforme de streaming de données capable de prendre en charge l’intégration, le traitement et l’analyse des données en temps réel à partir de plus de 120 sources.

Fonctionnement des systèmes distribués

Définition d’un système distribué

Également appelés informatique distribuée ou bases de données distribuées, les systèmes distribués sont des ensembles de composants indépendants répartis sur différents environnements qui échangent des messages entre eux afin d’atteindre des objectifs communs.

Ils apparaissent comme une seule interface ou un seul ordinateur pour l’utilisateur final. Le but est que le système puisse exploiter au mieux les ressources et les informations tout en limitant les dysfonctionnements puisque, si l’un des composants tombe en panne, la disponibilité du service n’en sera pas affectée.

Aujourd’hui, les données sont plus distribuées que jamais et les applications modernes ne fonctionnent plus de manière isolée. La grande majorité des produits et des applications reposent sur des systèmes distribués.

Les composants d’un système distribué

Les principales fonctions de l’informatique distribuée sont les suivantes :

  • Partage des ressources - qu’il s’agisse d'équipements, de logiciels ou de données
  • Capacité de réutilisation - le logiciel a été conçu pour être développé et partagé avec d’autres personnes
  • Simultanéité - plusieurs machines peuvent traiter la même fonction en même temps
  • Évolutivité - les capacités de calcul et de traitement augmentent lorsqu’elles sont étendues à plusieurs machines
  • Tolérance aux erreurs - les défaillances de certaines parties du système peuvent être détectées et corrigées facilement et rapidement
  • Transparence - un nœud peut localiser facilement les autres nœuds du système et communiquer avec eux.

Les systèmes distribués modernes ont évolué pour inclure aujourd'hui des processus autonomes qui peuvent s’exécuter sur la même machine physique, mais qui interagissent en échangeant des messages entre eux.

Exemples de systèmes distribués

Réseaux

Le premier exemple de système distribué remonte aux années 1970, avec l’invention d’Ethernet et des réseaux locaux (LAN). Pour la première fois, les ordinateurs pouvaient envoyer des messages à d’autres systèmes avec une adresse IP locale. Les réseaux pair à pair ont depuis évolué et la messagerie électronique, et plus largement internet tel que nous le connaissons, sont devenus de parfaits exemples de systèmes distribués dont la croissance ne cesse de s’accélérer. Suite à l'abandon du protocole IPv4 au profit du protocole IPv6, les systèmes distribués sont passés d’une approche de type « LAN » à une approche de type « internet ».

Réseaux de télécommunications

Les réseaux téléphoniques et cellulaires sont également des systèmes distribués. Les réseaux téléphoniques, qui existent depuis plus d’un siècle, ont d'ailleurs été les premiers exemples de systèmes pair à pair. Les réseaux cellulaires sont des systèmes distribués dont les relais sont physiquement répartis dans des zones appelées « cellules ». Avec l’évolution des réseaux téléphoniques vers la VOIP (voix sur IP), la complexité de ces réseaux ne cesse de croître.

Systèmes distribués en temps réel

De nombreux secteurs d’activité utilisent des systèmes en temps réel avec une distribution locale ou mondiale : systèmes de contrôle des vols pour les compagnies aériennes, systèmes de dispatching pour Uber et Lyft, systèmes de commande d’automatisation pour les usines de fabrication, et systèmes de suivi en temps réel pour les entreprises de logistique et de commerce électronique.

Traitement parallèle

Il existait autrefois une distinction entre l’informatique parallèle et l'informatique distribuée. La première se chargeait d’exécuter un logiciel sur plusieurs threads ou processeurs, qui devaient alors accéder aux mêmes données et à la même mémoire. Les systèmes distribués impliquaient quant à eux des machines séparées, dotées de leurs propres processeurs et de leur propre mémoire. Aujourd’hui, avec l’essor des systèmes d’exploitation, des processeurs et des services cloud, l’informatique distribuée englobe également le traitement parallèle.

Intelligence artificielle distribuée

L’intelligence artificielle distribuée est un moyen d’utiliser la puissance de calcul et le traitement parallèle à grande échelle pour assimiler et traiter de très grands ensembles de données à l’aide d’agents multiples.

Systèmes de bases de données distribuées

Une base de données distribuée est une base de données située sur plusieurs serveurs et/ou emplacements physiques. Les données peuvent être répliquées ou dupliquées entre les systèmes.

La plupart des applications courantes utilisent une base de données distribuée, et doivent donc tenir compte de la nature homogène ou hétérogène du système.

Avec une base de données distribuée homogène, chaque machine exploite le même système de gestion de base de données et le même modèle de données. Cette configuration est plus facile à gérer et à dimensionner en ajoutant de nouveaux nœuds et de nouveaux emplacements.

Avec les bases de données distribuées hétérogènes, il est possible d'utiliser différents modèles de données et systèmes de gestion de base de données. Des passerelles, qui résultent généralement de la fusion d’applications et de systèmes, sont utilisées pour traduire les données entre les nœuds.

Architecture des systèmes distribués

Les systèmes distribués doivent disposer d’un réseau qui relie tous les composants (machines, équipements ou logiciels) afin qu’ils puissent transférer des messages pour communiquer les uns avec les autres.

  • Ce réseau peut être accessible au moyen d’une adresse IP, de câbles ou même d’un circuit imprimé.
  • Les messages transmis entre les machines contiennent des éléments que les systèmes souhaitent partager, tels que des bases de données, des objets et des fichiers.
  • La fiabilité de communication, qu’il s’agisse de l’envoi ou de la réception des messages et des accusés de réception, ou de la manière dont un nœud tente à de renvoyer un message en cas d’échec, est une caractéristique importante des systèmes distribués
  • Les systèmes distribués sont nés de la nécessité de développer certains services et applications et d’ajouter et de gérer de nouvelles machines. Ils permettent d'améliorer les performances de l'architecture, mais impliquent en contrepartie une plus grande complexité.

Pour mieux comprendre ce phénomène, examinons les différents types d’architectures distribuées, ainsi que leurs avantages et leurs inconvénients.

Types d’architectures de systèmes distribués :

Les applications et processus distribués utilisent généralement l’un des quatre types d’architecture ci-dessous :

Client-serveur :

À l’origine, l’architecture des systèmes distribués se composait d’un serveur qui était utilisé comme ressource partagée, comme une imprimante, une base de données ou un serveur web. Plusieurs clients (par exemple, des utilisateurs d'ordinateurs) décidaient à quel moment utiliser la ressource partagée, comment s’en servir et la consulter, et comment modifier les données et les renvoyer au serveur. Les référentiels de code comme git illustrent bien ce type de système, qui dépendant des développeurs qui mettent à jour le code.

Aujourd’hui, l’architecture des systèmes distribués a évolué avec les applications web ; elle peut désormais être :

  • À trois niveaux : avec cette architecture, les clients peuvent s’en remettre à un intermédiaire pour le traitement des données et la prise de décision. La plupart des applications centrées sur le web relèvent de cette catégorie. L'intermédiaire est une sorte d'agent qui reçoit les demandes (parfois stateless) des clients, traite les données et les transmet ensuite aux serveurs.
  • En couches : les services web professionnels ont créé des architectures de systèmes à n tiers ou multi-tiers. Cela a popularisé les serveurs d’application, qui contiennent la logique métier et interagissent à la fois avec les couches données et avec les couches de présentation.
  • Pair à pair : avec cette architecture, aucune machine centralisée ou spécialisée ne se charge des tâches complexes et intelligentes. Toutes les décisions (et les responsabilités associées) sont réparties entre les machines impliquées, chacune pouvant jouer le rôle de client ou de serveur. Le système blockchain en est un bon exemple.

Avantages et inconvénients des systèmes distribués

Avantages des systèmes distribués :

L’objectif d’un système distribué est de renforcer l'évolutivité, les performances et la disponibilité des applications.

Ses principaux avantages sont les suivants :

  • Possibilités de mise à l'échelle horizontale illimitées - il est possible d'ajouter des machines à tout moment.
  • Faible latence - le fait d'utiliser des machines géographiquement proches des utilisateurs permet de réduire le temps nécessaire pour répondre à leurs demandes.
  • Haute tolérance aux erreurs - si un serveur ou un centre de données tombe en panne, d’autres peuvent continuer à répondre aux besoins des utilisateurs.
  • Avantages des systèmes distribués :

Inconvénients des systèmes distribués :

En matière d’ingénierie, toute décision implique des compromis. La complexité est le principal inconvénient des systèmes distribués. Ils impliquent en effet plus de machines, plus de messages, et une plus grande quantité de données transmises entre différents acteurs, ce qui entraîne des problèmes :

D’intégration et de cohérence des données -  pouvoir synchroniser l’ordre des modifications de données et des états de l’application dans un système distribué est un véritable défi, en particulier lorsque des nœuds démarrent, s’arrêtent ou tombent en panne. – De défaillance du réseau et des communications -  les messages peuvent ne pas être transmis aux bons nœuds ou être transmis mais dans un ordre incorrect, ce qui entraîne une rupture de la communication et du fonctionnement du système. – De frais de gestion -  il est souvent nécessaire d’ajouter des fonctions de veille, de surveillance, d’enregistrement et d’équilibrage de charge pour avoir une meilleure visibilité sur le fonctionnement et les défaillances des systèmes distribués.

Les avantages des plateformes de streaming distribué

Confluent est la seule plateforme de streaming de données compatible avec tous les environnements cloud, qu'ils soient on prem ou hybrides. Connectez plus de 120 sources de données avec une évolutivité, une sécurité et une simplicité d'intégration de niveau professionnel, afin de disposer d'une visibilité en temps réel sur tous vos systèmes distribués.

Lancez-vous en quelques minutes avec un essai gratuit de 30 jours.