Quels types d'algorithmes d'équilibrage de charge existe-t-il

32

Je recherchais différents algorithmes d'équilibrage de charge pour HTTP et je viens d'en trouver 3. Random, Round Robin et Weighted Round Robin. Il y a-t-il des alternatives?

Merci Paul

Paul Sheldrake
la source

Réponses:

33

Les algorithmes d'équilibrage de charge les plus courants pour les équilibreurs de charge HTTP sont à mon humble avis:

  • Round Robin (parfois appelé "Next in Loop").

  • Round Robin pondéré - comme Round Robin, mais certains serveurs obtiennent une plus grande part du trafic global.

  • Aléatoire .

  • Hachage IP source . Les connexions sont distribuées aux serveurs principaux en fonction de l'adresse IP source. Si un noeud Web échoue et est mis hors service, la distribution change. Tant que tous les serveurs fonctionnent, une adresse IP cliente donnée ira toujours au même serveur Web.

  • Hachage d' URL . Tout comme le hachage IP source, sauf que le hachage est effectué sur l'URL de la demande. Utile lors de l'équilibrage de charge devant des caches de proxy, car les demandes pour un objet donné iront toujours à un seul cache backend. Cela évite la duplication du cache, ayant le même objet stocké dans plusieurs / tous les caches, et augmente la capacité effective des caches backend.

  • Moins de connexions , moins de connexions pondérées. L'équilibreur de charge surveille le nombre de connexions ouvertes pour chaque serveur et envoie au serveur le moins occupé.

  • Moins de trafic , moins de trafic pondéré. L'équilibreur de charge surveille le débit binaire de chaque serveur et envoie au serveur qui a le moins de trafic sortant.

  • Moins de latence . Perlbal fait une demande HTTP OPTIONS rapide aux serveurs principaux et envoie la demande au premier serveur pour répondre.

On peut dire que ce qui précède ne sont pas des algorithmes au sens strict de l'informatique, ce sont des descriptions plus générales d'approches courantes. Voici un petit article de Cisco qui décrit plus en détail certains des algorithmes qu'ils utilisent . Les implémentations d'autres fournisseurs seront légèrement différentes.

Il existe des cas marginaux où les algorithmes les plus exotiques sont utiles - par exemple, le streaming vidéo peut se prêter bien au "moindre trafic". Mais de manière générale, pour la plupart des applications Web et des sites Web, la solution optimale est:

  • Un système de session partagé / distribué , de sorte que n'importe quel nœud Web puisse répondre à toute demande de l'utilisateur (c'est-à-dire que les données de session de l'utilisateur telles que les cookies de session sont également disponibles pour tous les serveurs)

  • Équilibrage de charge utilisant Round Robin (éventuellement pondéré Round Robin) ou distribution aléatoire . Round Robin et Random sont des algorithmes simples et résistants sans aucun problème de «point chaud», c'est-à-dire que la répartition de la charge vers les backends reste équitable dans toutes les situations.

Jesper M
la source
5

La question est incomplète:

Équilibre de charge QUOI?

Les processeurs peuvent prendre la saturation; la perspective habituelle est à l'envers - pousser à une ressource au lieu de l'atteindre.

Les disques ont différents types de charges à équilibrer, tels que l'espace, les vitesses de lecture, les vitesses d'écriture, le débit, etc.

Les réseaux peuvent être équilibrés en fonction de la latence ou du débit total ...

Les personnes peuvent être équilibrées en fonction de la capacité individuelle; certains multi-tâches bien, d'autres pas et puis il y a la qualité contre la quantité. Vous pouvez optimiser vos ressources humaines en fonction de nombreux facteurs et avec des pondérations différentes attribuées à différents attributs.

Ce qui précède est loin d'être exhaustif; le fait est que différentes ressources prennent des types d'équilibrage de charge complètement différents. De leurs attributs et capacités disponibles, vous devez indiquer QUI présentent un intérêt pour l'équilibrage.

Ce que vous essayez d'équilibrer est le premier critère pour faire un bon algorithme d'équilibrage. Et la suggestion qu'il n'y en a que trois n'est pas éclairée. Il serait digne d'un doctorat de faire un bon travail en essayant de délimiter toutes les façons dont «les charges sont équilibrées».

RT

Richard T
la source
2
il vous manque la question Richard, les algorithmes sont à la base de toute méthode ou implémentation.
monomyth
2
Désolé monomyth, je n'ai rien raté. Ouvre ton esprit.
Richard T
@monomyth, @Richard a raison - Le choix de l'algorithme dépend de l'équilibrage de charge. Vous pouvez développer un algorithme pour équilibrer la charge d'utilisation de l'espace disque et qui peut ne pas s'appliquer du tout à autre chose, comme les requêtes HTTP.
Josh
@Josh, @ Richard, les concepts d'équilibrage de charge sont cependant les mêmes. Vous pouvez toujours utiliser Round Robin pour équilibrer l'utilisation du disque, iSCSI, HTTP, CPU, quoi que ce soit.
Mark Henderson
@Farseeker Je suis d'accord, Round Robin est assez universel. Mais n'y a-t-il pas des algorithmes d'équilibrage de charge spécifiques à la tâche?
Josh
0

Pas une réponse directe à votre question, mais une véritable solution que nous avons trouvée utile. En utilisant LVS et le démon d'impulsion, notre équilibrage de charge HTTP est configuré pour appeler un script bash personnalisé qui détermine la charge sur les «vrais serveurs» via une simple connexion SSH et un appel à la disponibilité .

Ensuite, en fonction de la moyenne de charge des serveurs, une pondération est définie par serveur. Ce n'est pas l'approche la plus scientifique, car la charge moyenne n'est pas nécessairement indicative des connexions HTTP ou de la charge CPU provoquée par ces connexions. Néanmoins, nous avons obtenu des résultats étonnamment efficaces.

Mon 2c. YMMV.

PS: jetez un oeil au projet LVS - vous trouverez certainement des informations sur les implémentations de planification de l'équilibre de charge.

Zayne S Halsall
la source