Question

Je travaille sur un projet où nous avons un nombre (5 pour le moment) de serveurs répartis dans le monde entier. Les clients se connectent à l'un de ces serveurs via un courtier centralisé. Nous connaissons le pays d'origine du client, mais rien d'autre. Nous avons un contrôle total sur les serveurs afin que nous puissions avoir toutes les informations dont nous avons besoin sur ceux-ci. Nous ne contrôlons pas les clients, ils doivent se connecter via ce courtier conformément aux normes.

Il est important que le courtier choisisse un serveur à faible temps de latence. Nous pensons donc que la proximité est notre seul critère disponible.

La première idée qui nous est venue à l'esprit est d'envoyer une requête ping au client à partir de chaque serveur, mais nous n'avons pas d'adresse IP, seulement le pays.

Nous avons également eu l’idée de faire un ping vers un noeud racine dans chaque pays à partir de chaque serveur. Le problème est de trouver un nœud racine dans chaque pays.

Avez-vous une idée de la manière de calculer / rechercher la proximité entre les "pays"? Avez-vous des idées ou des idées sur la façon de résoudre ce problème d’une autre manière?

Était-ce utile?

La solution

Je pense que le terme dont vous avez besoin est "équilibrage géographique". La plupart des principaux fournisseurs d’équilibrage de charge ont une solution à ce niveau - votre courtier pourrait en utiliser.

googler l'équilibrage géographique de la charge devient utile résultats attendus.

Autres conseils

C'est délicat, plus que beaucoup ne l'imaginent, mais j'estime qu'il existe une réponse CORRECT .

Bien sûr, la solution naïve (mais cool) vérifie l’adresse IP du client, c’est un bon début, mais dans le "monde réel". La géolocalisation ne fait pas tout ...

Vous venez de demander " une faible latence ", ce qui signifie que vous devez effectuer un ping entre les serveurs et les clients et attribuer les éléments en conséquence. Un très bon exemple de ce problème qui m’affecte personnellement à de nombreuses reprises est que je travaille au Japon et qu’un serveur dit à Taiwan est beaucoup plus proche d’un serveur aux États-Unis. MAIS , la latence entre le Japon et les États-Unis est bien moindre (meilleure réponse) qu'avec Taiwan, car les câbles, les routeurs et ce que vous avez qui vous connectent Japon-Taïwan ne sont pas aussi bons que ceux entre le Japon et les États-Unis . Donc, si vous me connectiez à Taiwan parce que vous estimez que mon adresse IP est plus proche, vous me feriez une très grande desavocation . Outre un ping et un petit test au démarrage, il est plus facile à faire que de garder une base de données de géolocalisation constamment mise à jour

La meilleure solution à cet effet s'appelle BGP anycast ( lien vers une présentation ). C'est la pierre angulaire de tous les CDN modernes.

Avec BGP anycast , plusieurs serveurs différents sont répartis dans le monde entier et annoncés sur Internet via BGP à l'aide de la même adresse IP . Ensuite, Internet fait la magie - comme d’habitude, le réseau achemine le trafic vers cette même adresse IP via le chemin le plus court, en sélectionnant essentiellement le serveur le plus proche (du point de vue de la topologie du réseau) pour chaque utilisateur.

Malheureusement, vous ne pouvez rien annoncer vous-même via BGP - seuls les grands réseaux (normalement les centres de données) peuvent le faire. Toutefois, des solutions abordables sont disponibles. La plupart d'entre elles sont basées sur DNS & any (une diffusion) (résolution sur plusieurs adresses IP de serveurs Web en fonction de l'emplacement du client). Cette solution n'est pas parfaite, mais suffisante dans de nombreux cas (exemples: dnsmadeeasy, Route 53, edgedirector, et pratiquement tous les CDN bon marché (cloudflare, maxcdn, cloudfront, etc.). Il existe également des solutions qui font du véritable anycast BGP, c’est-à-dire qui servent le trafic HTTP via anycast (par exemple, cachefly) ou vous permettent de le faire (par exemple, hostvirtual - pas cher). Ceci pourrait également être une lecture intéressante.

Paul l'a, vous voulez un équilibrage géographique de la charge, mais j'ajouterai que votre meilleur pari, s'il est possible de le faire, est de trouver quelqu'un qui se spécialise dans ce domaine et de lui verser de l'argent. C’est dans la catégorie des problèmes qui sont beaucoup plus difficiles à résoudre de manière fiable qu’ils ne le semblent au départ.

Ping leur et choisir celui qui a la latence la plus basse sonne bien, mais j’ai le sentiment qu’il ne sera pas redimensionné (que se passe-t-il lorsque vous avez 100 ou 1 000?) - alors peut-être une autre solution serait-elle meilleure? Il existe de nombreux fournisseurs avec des systèmes qui font exactement cela. Anycast DNS est également très utilisé.

Si vous venez de leur envoyer une requête ping, vous devez effectuer plusieurs requêtes ping avec chacune (idéalement en parallèle) pour vous assurer que vous en choisissez une avec une latence réelle plutôt que de la chance.

Vous voudrez probablement également un moyen d’y ajouter des poids lorsque les volumes de trafic sont très élevés.

Enfin, vous voudriez pouvoir marquer certains d’entre eux comme étant administrativement inactifs (pour la maintenance) - mais vous pouvez peut-être le faire en affichant simplement ceux qui ne sont pas annoncés et qui ne sont pas disponibles.

Le ping ne fonctionnera pas. La plupart des clients seraient derrière une passerelle et / ou un pare-feu, et vos paquets ping ne passeront pas. Genehack l'a dit mieux. Vous avez besoin d'équilibrer la charge du serveur, et n'utiliser que l'approche géographique peut ne pas être le meilleur moyen de s'y attaquer. Mieux vaut donner de l'argent à quelqu'un qui se spécialise dans les solutions SLB.

Okay donc quelques réflexions rapides. J'étais l'un des fondateurs de Digital Envoy - ils s'occupent du renseignement géographique en matière de propriété intellectuelle. J'ai quitté l'entreprise il y a quelques années, mais il y a environ 6 ans, nous avons créé un produit commun . avec les systèmes Coyote Point qui effectuaient exactement cette fonctionnalité: équilibrage de la charge basé sur une zone géographique. Bien sûr, il existe des cas extrêmes (l'exemple Taiwan / Chine mentionné dans ce fil) qui peuvent ne pas fonctionner automatiquement, mais le produit a permis à l'utilisateur de déterminer où le trafic d'un pays irait. Donc, si vous décidiez que Taiwan était le mieux servi aux États-Unis, il serait poussé de cette façon.

Malheureusement, la demande pour la solution n’a pas été aussi importante que nous l’espérions et le produit a été arrêté, je crois. Je suggérerais de contacter Coyote Point pour voir s'ils peuvent vous apporter une solution équivalente. Sinon, je pense qu'ils auront quelques idées sur la façon de faire ce que vous voulez faire.

Une autre option, en fonction de ce que vous devez servir, consiste à utiliser quelque chose comme le service CloudFront d'Amazon. Bien sûr, si vous avez besoin que les clients se connectent à une application et non à des fichiers statiques, cela ne fonctionnera pas pour vous.

BTW, divulgation complète - Je ne suis pas seulement le fondateur de Digital Envoy, mais aussi siège actuellement au conseil d’administration de Coyote Point.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top