web-dev-qa-db-fra.com

Comment l'équilibrage de charge se fait-il en mode Docker-Swarm

Je travaille sur un projet de mise en place d'une architecture cloud à l'aide de docker-swarm. Je sais qu'avec swarm je pourrais déployer des répliques d'un service, ce qui signifie que plusieurs conteneurs de cette image seront exécutés pour répondre aux demandes.

J'ai également lu que docker a un équilibreur de charge interne qui gère cette distribution de demande.

Cependant, j'ai besoin d'aide pour comprendre ce qui suit:

Supposons que j'ai un conteneur qui expose un service comme une REST ou disons que c'est une application Web. Et si j'ai plusieurs conteneurs (répliques) déployés dans l'essaim et j'ai d'autres conteneurs (exécutant certains applications) qui communiquent avec ce service HTTP/REST.

Ensuite, lorsque j'écris ces applications que IP: PORT combinaison dois-je utiliser? Est-ce l'un des IP du nœud de travail qui exécute ces services? Cela permettra-t-il de répartir la charge de manière appropriée, même entre les autres travailleurs/gestionnaires exécutant le même service?

Ou dois-je appeler le gestionnaire qui, à son tour, s'occupe du routage de manière appropriée (même si le nœud du gestionnaire n'a pas de conteneur exécutant ce service spécifique)?

Merci.

23
Shabirmean

quand j'écris ces applications quelle combinaison IP: PORT dois-je utiliser? Est-ce l'un des IP du nœud de travail qui exécute ces services?

Vous pouvez utiliser n'importe quel nœud participant à l'essaim, même s'il n'existe aucune réplique du service en question sur ce nœud. Vous utiliserez donc Node:HostPort combinaison. Le maillage de routage d'entrée acheminera la demande vers un conteneur actif.

Une image vaut dix mille mots

enter image description here

Cela permettra-t-il de répartir la charge de manière appropriée, même entre les autres travailleurs/gestionnaires exécutant le même service?

Le contrôleur d'entrée effectuera le round robin par défaut.

Maintenant, les clients doivent utiliser le round robin dns pour accéder au service sur les nœuds swarm de docker. Le problème classique de cache DNS se produira. Pour éviter cela, nous pouvons utiliser un équilibreur de charge externe comme HAproxy.

enter image description here

26
Farhad Farahi