Load-Balanced Cluster (Cluster avec répartition de charge)

Vous avez choisi d'utiliser la mise en cluster pour concevoir ou modifier un niveau d'infrastructure, de manière à répondre aux impératifs de performances, tout en gardant une possibilité d'adaptation en fonction de l'évolution des demandes.

Problème

Comment concevoir un niveau d'infrastructure évolutif, qui tienne compte des variations de charge tout en offrant des performances acceptables ?

Facteurs à prendre en compte

Lorsque vous concevez un niveau d'infrastructure évolutif, vous devez prendre en compte les facteurs suivants :

  • Chaque serveur pris individuellement possède, pour une application donnée, une capacité de charge maximale. Ainsi, si un seul serveur est chargé de fournir des pages Web dans le cadre d'une application Web et si le nombre d'utilisateurs ou la charge transactionnelle augmente au-delà de la capacité limite du serveur, l'application offrira des performances inférieures aux attentes ou, dans le pire des cas, deviendra indisponible.
  • Chaque serveur est soumis à des limites physiques en termes de performances, qu'il s'agisse de la vitesse du bus, de la quantité de mémoire, du nombre de processeurs ou du nombre de périphériques qu'il peut exploiter. Par exemple, si le serveur ne peut accueillir que quatre processeurs, vous ne pouvez pas en ajouter un cinquième pour améliorer les performances.
  • Certaines applications ne peuvent exploiter qu'un nombre limité de processeurs.
  • Les serveurs, en tant qu'entités individuelles, constituent des points de défaillance uniques au sein d'une solution. Si un seul serveur est chargé de fournir les fonctionnalités d'un composant particulier d'une application, sa défaillance entraîne l'échec de l'application.
  • L'ajout de serveurs, en revanche, rend plus complexe la gestion et la surveillance du matériel correspondant et du logiciel associé.

Solution

Installez votre application ou service sur plusieurs serveurs configurés pour se partager la charge de travail. Ce type de configuration est appelé Load-Balanced Cluster (cluster avec répartition de charge). La répartition de charge permet de faire évoluer les performances des programmes sur serveur (serveurs Web, par exemple), en répartissant les requêtes des clients sur plusieurs serveurs. Les répartiteurs de charge, terme couramment utilisé pour désigner les technologies de répartition de la charge, reçoivent les requêtes entrantes et les redirigent si nécessaire vers un hôte particulier. Les serveurs à répartition de charge répondent simultanément aux requêtes des différents clients, voire à plusieurs requêtes du même client. Ainsi, un navigateur Web peut obtenir les différentes images d'une même page Web à partir de différents hôtes du cluster. Une telle structure permet de répartir la charge, d'accélérer le traitement et de réduire les temps de réponse pour les clients.

Les répartiteurs de charge utilisent différents algorithmes pour gérer le trafic. Leur but est de répartir intelligemment la charge et/ou d'optimiser l'utilisation de l'ensemble des serveurs du cluster. Voici quelques exemples de ces algorithmes :

  • Round-robin (répartition de charge équitable). Un algorithme Round-robin répartit équitablement la charge entre chaque serveur, quels que soient le nombre actuel de connexions ou les temps de réponse. Cet algorithme est adapté si les serveurs du cluster disposent des mêmes capacités de traitement ; sinon, certains serveurs risquent de recevoir plus de requêtes qu'ils ne peuvent en traiter tandis que d'autres n'utiliseront qu'une partie de leurs ressources.
  • Weighted Round-robin (répartition de charge pondérée). Un algorithme Weighted Round-robin prend en compte la capacité de traitement de chaque serveur. Les administrateurs affectent manuellement un coefficient de performance à chaque serveur et une séquence d'ordonnancement est générée automatiquement en fonction de cette valeur. Les demandes sont ensuite affectées aux différents serveurs selon une séquence de répétition alternée.
  • Least-connection (répartition de charge selon la moindre connexion). L'algorithme Least-connection envoie les demandes aux serveurs d'un cluster en fonction de celui qui sert actuellement le moins de connexions.
  • Load-based (répartition basée sur la charge). Un algorithme Load-based envoie les demandes aux serveurs d'un cluster en fonction de celui dont la charge est actuellement la plus faible.

De plus, certains répartiteurs de charge intègrent une détection des défaillances. Le répartiteur de charge assure un suivi du serveur ou de l'application qui s'y exécute, et cesse de lui envoyer des requêtes en cas de défaillance. La figure 1 présente les éléments de base de la répartition de charge.

20031126-Des_LoadBalancedCluster-1.gif

Figure 1 : Composants de la répartition de charge

Lorsque le répartiteur de charge reçoit une requête du client, l'un des serveurs du groupe la traite. Chaque serveur est capable de traiter cette requête de façon indépendante. Si un serveur est indisponible par suite d'une erreur ou d'une intervention de maintenance, les autres peuvent continuer à traiter les requêtes sans en être affectés. De ce fait, la disponibilité générale du service est bien meilleure que lorsqu'un seul serveur traite l'ensemble des demandes. Cependant, l'utilisation d'un seul répartiteur de charge physique ou d'un seul commutateur réseau devant un ensemble de serveurs employant un système logiciel de répartition de charge introduit un autre point de défaillance unique. Pour pallier ce risque, vous pouvez faire appel à des dispositifs de répartition de charge et/ou des commutateurs redondants.

Gestion d'état des sessions

Les applications ont souvent besoin, dans le cadre des différentes étapes d'un cas d'utilisation complexe, d'une interaction de l'utilisateur.Chaque réponse apportée par l'utilisateur pendant l'interaction affecte les choix qui lui sont proposés et l'état de l'application, au fur et à mesure qu'elle progresse vers les objectifs souhaités.Le terme état de session sert généralement à décrire cet état centré sur le cas d'utilisation.Une partie de l'état de session sert uniquement à suivre la progression dans la tâche ; ces informations sont supprimées une fois le cas d'utilisation terminé ; d'autres éléments de l'état de session sont enregistrés dans le stockage à long terme, dans la base de données, si le cas d'utilisation est mené à bien.Ainsi, il est rare que l'on demande à un client qui effectue des achats en ligne de fournir des informations de règlement ou de livraison avant qu'il ait sélectionné le bouton de validation, lequel n'est activé que si son panier contient au moins un article.

En règle générale, les applications distribuées appellent des composants logiciels situés sur des serveurs distants via une connexion réseau.L'application doit suivre les changements de l'état de session qui se produisent entre chaque étape, pour assurer une continuité entre ces étapes.Les concepteurs d'applications tiennent généralement à jour l'état de session dans l'un de ces trois emplacements :

  • Client.L'état de session de chaque utilisateur est conservé sur l'ordinateur de ce dernier.
  • Serveur Intermédiaire.L'état de session est stocké sur un ordinateur qui sert d'intermédiaire entre les ordinateurs clients et les serveurs de bases de données, où les informations de l'utilisateur sont conservées de façon permanente.
  • Serveur de bases de données.L'état de session est stocké sur le serveur de bases de données, en même temps que d'autres données à long terme de l'application et de l'utilisateur.

Seule la solution avec serveur intermédiaire affecte ce modèle.Chacune de ces solutions, ses avantages et ses inconvénients sont décrits en détail dans le chapitre 2, « Designing for Scalability » de l'ouvrage « Designing for Scalability with Microsoft Windows DNA » (Conception axée sur l'évolutivité avec Microsoft Windows DNA) [Sundblad00].

Une solution simple, telle que celle de la figure 1, convient lorsque tous les serveurs sont sans état : une fois qu'un serveur a répondu à une requête, son état par défaut est rétabli.Un serveur peut être sans état dans deux cas de figure.Dans le premier, le client n'a pas besoin de session ; chaque demande étant une unité de travail isolée, aucune valeur temporaire ne persiste entre les sessions.Dans le second scénario, appelé gestion de session par le client, c'est le client lui-même qui conserve l'état d'une session et envoie les informations relatives à cet état dans la requête, de sorte que tout serveur peut la prendre en charge et poursuivre son traitement.

Dans les scénarios avec gestion de session par le serveur, c'est le serveur qui tient à jour l'état des sessions utilisateur.Avec la gestion de session par le serveur, le répartiteur de charge dirige toutes les requêtes envoyées par un client à partir de la même session utilisateur à la même instance de serveur.Ce mécanisme est généralement désigné sous le nom d'affinité de serveur.

L'une des difficultés propres à la gestion de session est que, si le serveur passe hors ligne par suite d'une erreur ou d'une intervention de maintenance, le client risque de perdre le travail effectué ; il est alors obligé de renvoyer toutes les requêtes transmises auparavant à partir de la session perdue.Dans certaines situations, la perte occasionnelle de sessions ne constitue pas un problème majeur pour l'utilisateur.Par exemple, dans une application de consultation de plans en ligne, si le serveur perd l'adresse que l'utilisateur vient de saisir, l'obligation pour ce dernier de ressaisir l'information ne prête pas réellement à conséquences.Dans d'autres situations, cependant, la perte de session peut s'avérer extrêmement gênante.Ainsi, dans une application de gestion de crédit bail utilisant un client sans état, l'utilisateur peut passer jusqu'à 10 minutes pour saisir les informations requises pour l'établissement du contrat.Il n'est certes pas souhaitable que l'utilisateur consacre à nouveau le même temps à ressaisir toutes les informations si l'un des serveurs du groupe de répartition de charge est déconnecté.Pour éviter toute perte de session due à une défaillance de serveur dans un groupe répartition de charge, deux solutions peuvent être envisagées :la gestion d'état centralisée et la gestion asynchrone d'état des sessions.La figure 2 illustre la gestion d'état centralisée.

20031126-Des_LoadBalancedCluster-2.gif

Figure 2 : Répartition de charge et gestion d'état centralisée

Dans la méthode de gestion d'état centralisée, les informations d'état de la session sont stockées sur un serveur centralisé situé à un niveau différent des serveurs d'application.Chaque fois que le serveur d'application reçoit une requête faisant partie d'une session, il extrait l'état de cette dernière du serveur de gestion des sessions avant de la traiter.Le service de gestion des sessions peut être une base de données ou un autre type d'application qui s'exécute sur un serveur stockant des ressources partagées, configuré pour une haute fiabilité.Pour plus d'informations sur les méthodes permettant d'améliorer la tolérance de pannes, consultez le modèle Failover Cluster.

La figure 3 illustre la gestion asynchrone d'état des sessions.

20031126-Des_LoadBalancedCluster-3.gif

Figure 3 : Répartition de charge et gestion asynchrone d'état des sessions

Dans le cas de la gestion asynchrone d'état des sessions, chaque serveur diffuse à tous les autres serveurs son état de session, dès que celui-ci change ; ainsi, chacun d’eux dispose des informations d’état de toutes les sessions et peut traiter une requête faisant partie d’une session.L’état des sessions persiste, même en cas de défaillance de serveurs individuels.Cette solution, plus économique du fait qu'elle n'impose pas l'acquisition de matériel supplémentaire, est plus complexe en termes de configuration et de maintenance car elle implique des appels asynchrones.De plus, le stockage de l’état de toutes les sessions sur chaque serveur peut s’avérer moins efficace.

Implémentation

L’implémentation de la répartition de charge prend principalement deux formes :

  • Répartition de charge par logiciel.La répartition de charge par logiciel s’effectue au moyen d’un logiciel spécial installé sur les serveurs d’un cluster avec répartition de charge.Ce logiciel reçoit les requêtes des clients et les distribue aux serveurs en fonction de différents algorithmes.Il peut s’agir de simples algorithmes Round-robin (répartition de charge équitable) ou d’algorithmes bien plus complexes, qui tiennent compte de l’affinité des serveurs.Par exemple, Microsoft® NLB (Network Load Balancing, Équilibrage de la charge réseau) est un logiciel de répartition de charge destiné aux batteries de serveurs Web, tandis que Microsoft CLB (Component Load Balancing, Équilibrage de la charge des composants) est un logiciel de répartition de charge destiné aux batteries d’applications.
  • Répartition de charge par matériel.La répartition de charge par matériel repose sur un commutateur ou un routeur spécialisé muni du logiciel qui lui procure les fonctionnalités de répartition de charge.Dans ce type de solution, les fonctions de commutation et de répartition de charge sont intégrées au sein d’un seul dispositif, ce qui limite le matériel nécessaire pour mettre en œuvre la répartition de charge.Toutefois, du fait que les deux fonctions sont associées, le dépannage du dispositif est plus complexe.
Exemple

Pour vous aider à comprendre comment optimiser l’évolutivité à l'aide de la répartition de charge, nous allons comparer une solution déjà en place, composée d'un système unique (point de défaillance unique) au niveau application et n’offrant pas de capacité de répartition de charge, et une solution très évolutive qui préserve les performances tout en renforçant la disponibilité.

Niveau sans répartition de charge

Au départ, une entreprise peut commencer avec une architecture telle que celle que présente la figure 4, susceptible de répondre à ses attentes initiales en matière de performances.Avec l’augmentation de la charge, cependant, le niveau applicatif doit s’adapter pour continuer à offrir des performances acceptables.

20031126-Des_LoadBalancedCluster-4.gif

Figure 4 : Solution de base avec un seul serveur d’application

Dans la figure 4, le niveau application contient un seul serveur d’application (AppServer20), qui traite les demandes des clients.Si le serveur est surchargé, la solution passera en deçà du seuil de performances acceptable, ou deviendra indisponible.

Niveau avec répartition de charge

Pour rendre son infrastructure plus évolutive et préserver les performances, l’entreprise peut faire appel à un répartiteur de charge afin de renforcer le niveau application.Dans l’exemple suivant, illustré Figure 5, deux serveurs sont ajoutés au niveau application pour créer un cluster avec répartition de charge, qui accède aux informations stockées au niveau données et fournit, dans le niveau client, l’accès des postes clients aux applications.

20031126-Des_LoadBalancedCluster-5.gif

Figure 5 : Solution avec un niveau application évolutif

Ce type de solution produit une architecture de répartition de charge standard.Un dispositif matériel ou un logiciel qui s’exécute sur les machines hôtes affecte un nom d’hôte virtuel (AppServer20) et une adresse IP à AppServer1, AppServer2, et AppServer3.Le cluster avec répartition de charge présente cette adresse IP virtuelle et ce nom d’hôte au réseau, et répartit équitablement la charge des requêtes entrantes entre les serveurs opérationnels du groupe.En cas de défaillance d’AppServer1, la requête est simplement redirigée vers AppServer2 ou AppServer3.Selon la technologie employée pour fournir ces fonctionnalités, il est possible d’ajouter des serveurs supplémentaires au cluster avec répartition de charge, de manière offrir une disponibilité maximale et anticiper l’augmentation de la demande.

Contexte final

Le modèle avec Load-Balanced Cluster présente les avantages et les inconvénients suivants :

Avantages
  • Évolutivité renforcée.Un niveau de répartition de charge évolutif permet de conserver des performances acceptables et de renforcer la disponibilité.
  • Disponibilité accrue.Dans un système avec répartition de charge, vous pouvez mettre hors ligne un serveur pour assurer sa maintenance, sans rendre des applications indisponibles.
  • Économies potentielles.L’utilisation de plusieurs serveurs peu onéreux s’avère plus économique que le recours à des systèmes multiprocesseurs au coût élevé.
Inconvénients
  • Complexité du développement.Dans les situations où il est nécessaire de conserver l’état pour chaque transaction ou chaque utilisateur, le développement d’une solution avec répartition de charge peut être complexe.
  • Défaillances du réseau non prises en compte.En cas de défaillance d’un serveur ou du réseau pendant une session client, il peut être nécessaire de procéder à une nouvelle ouverture de session, afin d’authentifier à nouveau le client et de rétablir l’état de la session.

Modèles connexes

Pour obtenir davantage d'informations, reportez-vous aux modèles connexes suivants :

  • Server Clustering .La mise en cluster de serveurs aborde l'utilisation de ressources informatiques virtuelles pour augmenter l'évolutivité et éliminer les points de défaillance uniques qui affectent la disponibilité.
  • Failover Cluster .Les clusters de basculement permettent de doter l’infrastructure d’éléments redondants, et donc d’en accroître la disponibilité.


Dernière mise à jour le jeudi 27 novembre 2003



Page view tracker