Equilibrer la charge d'un server UDP

J'ai un server udp, c'est une partie centrale de mon process métier. Afin de gérer les charges que j'attends dans l'environnement de production, j'aurai probablement besoin de 2 ou 3 instances du server. Le server est presque entièrement apasortingde, il recueille principalement des données, et la couche ci-dessus sait comment gérer la quantité minimale de données périmées pouvant découler de plusieurs instances de server.

Ma question est: comment puis-je implémenter l'équilibrage de charge entre les servers? Je préférerais dissortingbuer les requests le plus possible possible entre les servers. J'aimerais également avoir une certaine fidélité, je veux dire, si le client X a été apathé vers le server y, je souhaite que toutes les requests ultérieures de X soient envoyées au server Y, pourvu qu'elles soient sensibles et ne pas surcharger Y.

En passant, c'est un système .NET … que reorderiez-vous?


l'état est interne dans les servers, pas une transaction de quelque sorte. l'état est une donnée que les servers agrègent à partir des données qu'ils reçoivent, et peut être vérifiée avec un simple service Web WCF. La request est basée sur UDP, et même si je ne suis pas d'accord avec la décision, c'est "Au-dessus de ma note de paye"

Je suis en train d'essayer le NLB de MS, cela fonctionne bien, il fait la fidélité hors de la boîte, mais il génère du bruit sur l'set du réseau

Aussi, pas de DNS … Oh, c'est un protocole complètement costume.

5 Solutions collect form web for “Equilibrer la charge d'un server UDP”

J'ai un server udp, […] le server est presque entièrement sans état [..] ont une certaine fidélité, je veux dire si le client X a été apathé vers le server y, alors je veux que toutes les requests ultérieures de X soient envoyées au server Y, tant qu'il est judicieux et ne surcharge pas Y.

Donc, vous utilisez un protocole d'application non divulgué qui conserve un état d'application et fonctionne avec UDP? Vous êtes dans une direction difficile. UDP n'est pas un transport de données fiable, c'est l'essentiel de celui-ci – pour un transport de données fiable, voir son ami populaire TCP. La seule façon d'get votre "fidélité" est d'avoir un proxy d'équilibrage de charge qui comprend votre protocole de couche d'application et qui sait quel est votre état d'application actuel et peut agir en conséquence.

Je vois 3 approches qui se rapprochent de fournir ce que vous searchz:

  • Étendre statiquement les connections entrantes sur 3 adresses IP, en fonction de l'adresse IP source (user final). De cette façon, un user donné sera toujours dirigé vers le même server. La plupart des pare-feu professionnels peuvent faire cela pour vous. Vous devrez peut-être rendre les 3 servers très disponibles, car la plupart des pare-feu ne vous feront pas de vérification de santé.

  • Utilisez DNS et utilisez DNS Round Robin, comme l'a déjà suggéré Matt Simmons.

  • Utilisez l' équilibrage de charge réseau (NLB) embeddede de Windows. Honnêtement, je ne sais pas comment le scénario de basculement fonctionnerait avec NLB et votre service UDP semi-détaché – vous devriez l'enquêter, en fonction de la façon dont votre application gère l'état. Sur le côté positif, NLB est très facile à installer, gratuitement avec la licence Windows, mature et performante.

Linux Virtual Server est un server très évolutif et hautement disponible, construit sur un cluster de servers réels. Le protocole UDP pris en charge par LVS et l'algorithm de hachage source (ceci est utilisé lorsque vous souhaitez qu'un client apparaisse toujours sur le même server).

J'utilise LVM pour équilibrer DNS (rr), SIP (sh).

Intéressant. La plupart des logiciels proxy que j'ai vu sont certes basés sur TCP.

La majeure partie de l'équilibrage de charge spécifique à UDP que j'ai vu dans ma maigre expérience a été basée sur le DNS (c'est-à-dire: servers temporels, servers DNS, etc.). Existe-t-il un moyen de fournir plusieurs loggings A? Si cela fonctionnait, le DNS Round Robin normal assurerait une répartition équitable des requests (probablement assez juste, de toute façon) et la caching du client permettrait de garantir la fidélité (en supposant que vous utilisez une plate-forme cache en fin de client).

Vous pouvez utiliser n'importe quel type d'équilibreur de charge pour effectuer ceci, qu'il s'agisse de matériel ou de logiciel, vous pouvez choisir parmi différents équilibreurs de charge en fonction de ce dont vous avez besoin.

Équilibreur de charge de niveau 3: l'équilibrage de charge uniquement en regardant l'IP entrante et les IP de backend disponibles, ce type d'équilibreur de charge assurera l'adhérence en envoyant toujours la même adresse IP entrante sur le même backend, bien que ce type de stratégie puisse surcharger un des backends si beaucoup de clients sont issus de la même IP (qu'il s'agisse d'un proxy ou d'une passerelle d'entreprise)

Équilibreur de charge de niveau 7: un équilibreur de charge de niveau 7 ne sera pas seulement équilibré en équilibreur de niveau 3 mais il examinera également le contenu du package, ce qui vous donnera beaucoup plus de flexibilité pour vos stratégies d'équilibrage.

Étant donné que vous utilisez UDP, les deux équilibreurs devraient donner une bonne performance, mais l'inspection des packages en profondeur dans UDP est un peu plus limitée que sur TCP (juste pour des raisons de protocole).

En fonction de votre budget, vous pouvez commencer par utiliser un équilibreur de charge logiciel (linux + IPVS par exemple), puis commencer à monter les équilibreurs de charge matérielle comme ceux offerts par Cisco ou Netapp

Le NGINX open source et la plate-forme de livraison d'applications, NGINX Plus supportent maintenant l'équilibrage de charge UDP. La nouvelle fonctionnalité s'appuie sur nos capacités TCP et HTTP existantes, ce qui fait de NGINX un puissant, facile à utiliser et cohérent pour une gamme encore plus large d'applications et de périphériques Internet.

Disponible dans la version nginx-1.9.13

  • Avantages pour les réseaux privés entre les machines virtuelles sur un hôte ESXi?
  • Comment automatiser le networking dans un environnement de marionnettes?
  • Infrastructure réseau générale
  • Est-il possible de capturer du trafic sur le server Web distant
  • Comment empêcher la nomination persistante des interfaces réseau, comme eth1
  • SonicWALL HA w / Dual WAN HSRP à partir de deux commutateurs redondants
  • Comment puis-je get le DHCP de Windows Server 2003 pour dissortingbuer mon masque de sous-réseau nouvellement développé?
  • Quels sont les sets de compétence / savoir-faire les plus importants pour qu'un administrateur de réseau puisse supporter VOIP?
  • transférer le trafic entrant vers l'auditeur local
  • Supprimez les informations d'identification de l'URL UNC mises en cache Win 10 / Server 2012
  • Comment puis-je forcer Squid Proxy à utiliser une passerelle spécifique pour l'access à Internet?
  • Les astuces du serveur de linux et windows, tels que ubuntu, centos, apache, nginx, debian et des sujets de rĂ©seau.