Équilibreur de charge avec Node.js et Nginx

-

Voici mes quelques expériences sur l’équilibrage de charge dans le cadre de mon travail. Mon but est d’offrir des solutions performantes à mes clients. J’ai été consulté pour plusieurs soucis, et j’ai dû travailler à l’implémentation de différentes solutions. Voici donc, un petit résumé de mes expériences. Après avoir lu cet article, vous aurez une bonne compréhension de l’équilibrage de charge et une expérience pratique dans la création d’un équilibreur de charge simple avec NodeJs et Nginx.

Équilibrage des charges

Le mot équilibrage suggère qu’il s’agit d’un acte de distribution uniforme des choses. L’équilibrage de charge consiste à « distribuer efficacement le trafic réseau entrant sur un groupe de serveurs dorsaux ». L’équilibreur de charge se place devant un certain nombre de serveurs web et distribue le trafic entrant à ces serveurs selon des règles prédéfinies.

D’après le GIF ci-dessus, nous pouvons voir que cet équilibreur de charge distribue le trafic sur la base d’une règle selon laquelle chaque demande sera transmise au serveur backend de manière circulaire (algorithme Round robin). Il existe de nombreuses règles (algorithmes) pour répartir efficacement la charge entre les serveurs.

Algorithmes d’équilibrage de charge les plus utilisés

Round Robin

L’équilibrage de charge Round Robin est l’un des algorithmes d’équilibrage de charge les plus simples et les plus utilisés. Les demandes des clients sont distribuées aux serveurs d’application de manière cyclique. Si vous avez 3 serveurs, l’équilibreur de charge transmettra la demande de la manière suivante : première demande au premier serveur, deuxième demande au deuxième serveur, troisième demande au troisième serveur et quatrième demande au premier serveur.

La moindre connexion (Least Connection)

L’équilibrage de charge par la moindre connexion est un algorithme d’équilibrage de charge dynamique dans lequel les demandes des clients sont distribuées aux serveurs ayant le moins de connexions actives au moment de la réception de la demande.

Hachage d’URL

L’algorithme d’équilibrage de charge par hachage d’URL distribue les écritures de manière égale sur plusieurs sites et envoie toutes les lectures aux sites possédant l’objet.

Hachage IP source

L’algorithme d’équilibrage de charge Source IP hash combine les adresses IP source et destination du client et du serveur pour générer une clé de hachage unique. Cette clé permet d’attribuer le client à un serveur particulier chaque fois que la demande arrive. Ceci est utile lorsque l’utilisateur utilise la même session et visite fréquemment les mêmes pages.

Il existe de nombreux algorithmes conçus pour cibler différents cas d’utilisation.

NodeJs + Nginx load balancer

Nous allons créer une application et exécuter plusieurs instances de cette application sur différents ports de notre système local.

Nous utiliserons ensuite Nginx comme équilibreur de charge et surveillerons le trafic.

Créer une application NodeJs

server.js

const http = require('http');
const server = http.createServer(function (request, response) {
    response.writeHead(200);
    response.end(`Response returned from server: ${request.socket.localPort}`);
});
let port = process.env.port;
server.listen(port);
console.log(`server started on port: ${port}`);

Configurer le fichier de configuration de Nginx

/usr/local/etc/nginx/nginx.conf

events {}
http{
    upstream demo {
        server localhost:5001;
        server localhost:5002;
        server localhost:5003;
    }

    server {
        listen 5000;
        location / {
            proxy_pass http://demo;
        }
    }
}

Note : Vous pouvez vérifier le fichier de configuration de Nginx en utilisant la commande nginx -t.

Faites une sauvegarde de votre fichier nginx actuel et remplacez le contenu par le fichier ci-dessus.

Rechargez la configuration de Nginx

nginx -s reload

Si vous avez une ou des erreurs de permission, essayez avec sudo

Exécuter l’application

Dans le terminal vous pouvez exécuter les commandes suivantes :

  • port=5001 node server.js
  • port=5002 node server.js
  • port=5003 node server.js

Ceci va exécuter notre application sur 3 ports différents.

Exécuter le site

Aller dans votre navigateur et accéder à l’URL http://localhost:5000

Comme nous pouvons le voir, Nginx utilise l’algorithme Round Robin.

Configurations pour Nginx

Si vous voulez jouer avec différents algorithmes d’équilibrage de charge, vous pouvez spécifier différentes configurations dans le fichier de configuration de Nginx comme ceci :

Url Hash Algorithm

upstream backend {
    hash $scheme$request_uri;

    server web1;
    server web2;
    server web3;
}

server {
    server_name www.example.com;

    location / {
       proxy_pass http://backend;
    }
}

Hachage IP source

upstream backend {
    ip_hash;

    server web1;
    server web2;
    server web3;
}

server {
    server_name www.example.com;

    location / {
       proxy_pass http://backend;
    }
}

La moindre connexion (Least Connection)

upstream backend {
    least_conn;

    server web1;
    server web2;
    server web3;
}

server {
    server_name www.example.com;

    location / {
       proxy_pass http://backend;
    }
}

Conclusion

Voilà, j’ai fait le tour rapide pour expliquer l’équilibreur de charge avec Node.js et Nginx. N’hésitez pas si vous avez des suggestions à me le faire savoir. Je ferai dans de prochains articles un tour plus complet des différentes configurations possibles.

Alfredhttps://www.alfreddagenais.com
Je suis un développeur Web Full Stack sénior. Chaque jour est pour moi une journée de plus pour découvrir de nouvelles idées. Le développement web et l'informatique sont omniprésents dans mon quotidien. Pour que la créativité soit à son maximum, il ne faut pas avoir peur d’expérimenter et nous avons tous que le Web est infiniment grand pour expérimenter nos idées.

Buy me a coffee Paypal Patreon Ko-Fi

Share this article

Recent posts

Popular categories

LAISSER UN COMMENTAIRE

S'il vous plaît entrez votre commentaire!
S'il vous plaît entrez votre nom ici

Recent comments