web-dev-qa-db-fra.com

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

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

33
Paul Sheldrake

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 exécutent une adresse IP cliente donnée, elle ira toujours au même serveur Web.

  • [~ # ~] url [~ # ~] hachage. 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 caches/tous, et augmente la capacité effective des caches backend.

  • Le moins de connexions , le 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é.

  • Le moins de trafic , le 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.

  • Latence minimale . Perlbal envoie une requête HTTP OPTIONS rapide aux serveurs principaux et envoie la requête au premier serveur pour y répondre.

On peut dire que les algorithmes ci-dessus ne sont pas 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 certains des algorithmes qu'ils utilisent plus en détail . Les implémentations d'autres fournisseurs seront légèrement différentes.

Il existe des cas Edge 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ée/distribuée , de sorte que n'importe quel noeud 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 à l'aide de la distribution Round Robin (éventuellement pondérée Round Robin) ou 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.

37
Jesper M

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

4
Richard T

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 Pulse, 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 à 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 moyenne de charge n'est pas nécessairement indicative des connexions HTTP ou de la charge CPU causé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.

0
Zayne S Halsall