Les équilibreurs de charge sont des composants d’infrastructure qui distribuent le trafic réseau entrant entre plusieurs serveurs dorsaux. Ils améliorent la capacité et ajoutent de la redondance en maintenant les services accessibles si l’un de vos serveurs tombe en panne.

Les équilibreurs de charge font office de passerelle publique vers votre application. Ils sont spécialisés dans leur rôle et peuvent donc être hautement optimisés pour maximiser le débit du trafic. Les équilibreurs de charge sont généralement configurables avec plusieurs types d’algorithmes de routage pour répondre aux besoins de votre application.

Dans cet article, nous allons explorer ce que sont les équilibreurs de charge, comment ils fonctionnent et certaines des complications qu’ils peuvent causer. Nous expliquerons également les différences entre les algorithmes d’équilibrage de charge les plus courants.

Ce que font les équilibreurs de charge

Les équilibreurs de charge sont chargés de fournir un proxy inverse devant les serveurs de votre application. Tous les clients se connectent à ce proxy unique plutôt qu’aux instances individuelles du backend. L’équilibreur de charge est chargé de sélectionner un serveur pour traiter chaque demande. Cette opération est invisible pour le client externe.

Il existe deux types d’équilibreurs de charge, l’un matériel et l’autre logiciel. Du côté logiciel, la plupart des serveurs web tels qu’Apache et NGINX sont capables de remplir ce rôle. Les équilibreurs de charge de type matériel sont déployés en tant que composants d’infrastructure autonomes par votre fournisseur d’hébergement.

Les équilibreurs de charge surveillent généralement la santé des instances de leur pool de serveurs dorsaux. Les backends qui ne sont plus en bonne santé cessent de recevoir du nouveau trafic, ce qui réduit la volatilité du service et les temps d’arrêt. De même, les équilibreurs de charge vous permettent généralement d’ajouter de nouvelles instances de backend à tout moment, ce qui vous permet de faire évoluer votre service avec une capacité supplémentaire pendant les heures de pointe.

L’objectif principal d’un équilibreur de charge est de maximiser le débit et d’utiliser le plus efficacement possible les ressources disponibles. Il est généralement plus efficace de pouvoir faire évoluer horizontalement les serveurs physiques que de faire évoluer verticalement un seul nœud en ajoutant des unités centrales ou de la mémoire. La mise à l’échelle horizontale vous donne plus de redondance et de capacité, tandis que les frais généraux encourus par la couche de l’équilibreur de charge sont généralement minimes.

Algorithmes d’équilibrage de charge

Bien que l’objectif de l’équilibrage de charge soit toujours de répartir le trafic entre plusieurs serveurs, il existe plusieurs façons d’y parvenir. Avant d’examiner des stratégies spécifiques, il est important d’identifier les deux types fondamentaux d’algorithmes que vous pouvez choisir :

  • Équilibrage statique – Ces méthodes fonctionnent à partir de valeurs de configuration codées en dur, ce qui les rend complètement prévisibles dans leur fonctionnement. Ce type d’algorithme ne tient pas compte de l’état des serveurs dorsaux vers lesquels il peut être redirigé, il peut donc continuer à envoyer de nouvelles demandes à une instance déjà encombrée.
  • Équilibrage dynamique – Les algorithmes dynamiques s’ajustent en temps réel en fonction du flux de trafic et de la disponibilité des serveurs de votre pool. Ces stratégies sont capables d’éviter automatiquement les instances qui traitent déjà plusieurs demandes. L’équilibrage dynamique de la charge peut augmenter marginalement les frais généraux, car l’équilibreur de charge doit suivre l’état d’achèvement de chaque demande.

Les systèmes d’équilibrage statique sont généralement plus faciles à configurer, à tester et à inspecter. L’équilibrage dynamique est beaucoup plus puissant et constitue généralement le choix privilégié pour les applications de production. Dans chacune de ces classes, il existe plusieurs stratégies de routage spécifiques que vous pouvez choisir :

  • Round robin – Le round robin est une méthode d’équilibrage statique qui dirige les demandes vers chaque serveur à tour de rôle. Si vous avez trois serveurs A, B et C, la première demande entrante ira à A, la deuxième à B et la troisième à C. L’équilibreur de charge recommencera à A pour la quatrième demande.
  • Round robin pondéré – Variante de l’algorithme round robin dans laquelle les administrateurs définissent les priorités relatives de chaque serveur du pool. Un serveur fortement pondéré sera utilisé plus fréquemment et recevra une part plus importante du trafic. Cette méthode vous permet d’utiliser la stratégie round robin lorsque votre pool de serveurs comprend des serveurs aux spécifications inégales.
  • Aléatoire – De nombreux équilibreurs de charge incluent une véritable option aléatoire comme choix statique alternatif.
  • Haché – Cette stratégie d’équilibrage statique hache l’adresse IP du client pour déterminer lequel des serveurs dorsaux traitera la demande. Cela garantit que la même instance sert chaque connexion provenant de ce client.
  • Moins de connexions – Il s’agit d’un algorithme dynamique populaire qui dirige toujours les demandes entrantes vers le serveur ayant le moins de connexions ouvertes. Dans de nombreuses applications, c’est le moyen le plus efficace de maximiser les performances globales.
  • Plus grande disponibilité de la bande passante – Cette méthode envoie le nouveau trafic au serveur ayant la bande passante la plus disponible. Cette méthode est idéale dans les situations où les demandes individuelles sont susceptibles d’utiliser une grande quantité de bande passante même si le nombre total de demandes reste faible.
  • Point de terminaison personnalisé pour la santé/la charge – De nombreux équilibreurs de charge incluent un moyen de prendre des décisions de distribution du trafic sur la base de mesures personnalisées exposées par vos serveurs dorsaux. Les requêtes peuvent porter sur l’utilisation du processeur, la consommation de mémoire et d’autres mesures critiques à l’aide d’un mécanisme tel que SNMP.

Autres caractéristiques des équilibreurs de charge

Les équilibreurs de charge peuvent créer quelques complications pour votre application. L’une des plus courantes est le défi que représente l’obtention de sessions dorsales stables. Il est courant pour les systèmes de maintenir un état sur le serveur et de devoir le faire persister entre les connexions client.

Vous pouvez atténuer ce problème en utilisant l’algorithme d’équilibrage haché ou une option similaire basée sur le client. Cela garantit que les connexions provenant de la même adresse IP aboutissent à un serveur particulier. La plupart des équilibreurs de charge offrent également une option de sessions collantes explicites qui recherche un en-tête ou un cookie nominatif dans une requête HTTP. Cette valeur peut être utilisée pour diriger systématiquement les demandes vers le même serveur après la connexion initiale du client.

Les équilibreurs de charge peuvent également créer de la complexité autour de SSL. De nombreuses entreprises configurent le SSL pour qu’il se termine au niveau de l’équilibreur de charge. Les connexions entre l’équilibreur de charge et vos serveurs dorsaux se font via le protocole HTTP normal. Cela permet généralement de simplifier la configuration et de réduire les besoins de maintenance.

L’utilisation de connexions HTTP uniquement dans le sens direct n’est pas toujours acceptable pour les charges de travail critiques en matière de sécurité. Les équilibreurs de charge capables d’effectuer un passage SSL peuvent acheminer le trafic directement vers vos serveurs dorsaux, sans décrypter les données au préalable. Toutefois, cela limite la fonctionnalité de routage que vous pouvez utiliser : comme l’équilibreur de charge ne peut pas décrypter les demandes entrantes, vous ne pourrez pas effectuer de correspondance basée sur des attributs tels que les en-têtes et les cookies.

Équilibreurs de charge de couche 4 et de couche 7

L’équilibrage de charge est souvent abordé dans le contexte des réseaux de couche 4 (L4) et de couche 7 (L7). Ces termes décrivent le point auquel l’équilibreur de charge achemine le trafic dans le cycle de vie d’une requête réseau.

Une ressource de la couche 4 opère au niveau du transport du réseau. Ces équilibreurs de charge prennent des décisions de routage basées sur les caractéristiques du transport de la demande, comme le port TCP ou UDP utilisé. Les données spécifiques à la demande ne sont pas prises en compte.

Un équilibreur de charge de couche 7 est situé à côté de la couche application. Ces équilibreurs de charge peuvent accéder aux données complexes de la demande et les utiliser pour définir des règles de routage spécifiques à la charge de travail. C’est là que l’équilibrage de charge qui tient compte d’un ID de session dans un en-tête HTTP ou un cookie peut avoir lieu.

L’équilibrage de charge de la couche 7 est puissant mais relativement gourmand en ressources. Il doit analyser et inspecter le contenu de chaque requête avant de la transmettre à un backend. La nature par paquets des équilibreurs de charge de la couche 4 offre moins de contrôle mais a un impact réduit sur le débit. La couche 4 ne décrypte pas non plus le trafic, de sorte qu’un équilibreur de charge compromis à ce stade n’exposera pas les données de la demande.

Conclusion

Les équilibreurs de charge vous permettent d’acheminer le trafic entrant entre vos serveurs. Ils sont un élément essentiel des architectures réseau hautement disponibles qui vous permettent d’exécuter de manière transparente plusieurs instances de backend. Cela permet d’augmenter la capacité du service et d’éviter une panne totale si un serveur est hors ligne.

La plupart des implémentations d’équilibreurs de charge vous offrent le choix entre plusieurs algorithmes différents, y compris des options statiques et dynamiques. De nombreuses applications sont bien servies par des choix simples tels que « le moins de connexions » ou « round robin », mais des options plus complexes sont utiles dans des situations spécifiques.

Une bonne pratique consiste à exécuter chaque application de production derrière un équilibreur de charge. Cela vous donne la flexibilité nécessaire pour évoluer à la demande et réagir aux serveurs en mauvaise santé. L’équilibrage de charge est généralement facile à mettre en place dans l’infrastructure réseau de votre pile d’hébergement ou de votre fournisseur de cloud computing.