Comment rediriger les utilisateurs vers différents serveurs en fonction de leur emplacement?

8

J'ai un site Web qui est développé en utilisant ASP.NET et MY DB est MySQL. Actuellement, il héberge aux USA Servers. Mais lorsque j'essaie d'y accéder près de l'Inde, le contenu dynamique se charge trop lentement. C'est acceptable car la demande doit aller à un autre bout du monde. Aux États-Unis, c'est vraiment rapide. J'ai déjà connecté ce site avec cloudflare CDN. Mais CDN est utile pour les contenus statiques. Mes pages ont presque un contenu dynamique.

Je veux donc faire évoluer ce site Web. Donc, si une demande est venue d'Amérique, je veux gérer cette demande du serveur américain et si une demande est venue d'Asie, je veux que cela soit géré par un serveur ASIAN. Mais gardez à l'esprit que peu importe où ils ont été redirigés, le contenu doit être le même sur deux serveurs. (Deux serveurs doivent être synchronisés)

Alors, comment réaliser cette architecture?

Comment Google, Facebook, Yahoo font-ils cela? Comment servent-ils dans le monde entier? Je pense qu'ils ont des centres de données sur tous les continents. Comment se synchronisent-ils entre eux?

Prageeth Liyanage
la source

Réponses:

10

En plus de ce qu'a répondu @ Gabriel-Talavera, j'ajouterais quelques notes:

  • Le routage réseau, ainsi que l'équilibrage de charge géographique, sont totalement indépendants de la "synchronisation des données" entre différents serveurs. Ce sont deux problèmes traités avec de nombreuses technologies très différentes.

Comme le titre de votre question semble être axé sur le côté réseau, je vais me concentrer sur la première partie (les problèmes de routage réseau).

Comme vous pouvez le constater par vous-même, les petites entreprises TIC ont du mal à répondre aux exigences. Mais les entreprises "globales" (comme celles que vous avez mentionnées dans votre PO) n'auront aucun problème à l'adopter.

En guise de note complémentaire , la première fois que j'ai entendu parler de "anycast", c'est grâce à un article de CloudFlare BLOG , où ils ont discuté (... parmi beaucoup d'autres choses), comment anycast peut également être adopté comme contre-mesure à D- Attaques DOS.

Damiano Verzulli
la source
3

Vous pouvez donner des réponses DNS sélectives en fonction de l'emplacement avec les vues BIND si vous utilisez BIND comme serveur DNS externe. L'aperçu technique de la nouvelle version de Windows Server possède également une fonctionnalité appelée Stratégies DNS qui semble très prometteuse.

Pour servir le contenu en fonction de l'emplacement du client et d'autres critères tels que l'agent utilisateur ou les horaires, F5 dispose d'une appliance appelée Global Traffic Manager qui, utilisée conjointement avec leurs équilibreurs de charge, atteint ce que vous recherchez. Dans les environnements Cloud, Amazon Route 53 peut accomplir la même chose.

Afin de garder les données synchronisées, vous devez avoir un backend de stockage capable de faire une réplication synchrone, ou utiliser la réplication fournie par MySQL, qui gardera les données répliquées cohérentes.

Gabriel Talavera
la source
mais cela ne fonctionnera pas de manière fiable si les clients utilisent différents serveurs DNS comme Google DNS ou OpenDNS.
Josef dit Réintégrer Monica
La réplication avec mysql peut montrer un décalage important entre les écritures et la disponibilité des données pour les lectures. Quelque chose qui met à l'échelle la réplication comme riak ou d'autres bases de données nosql doit être envisagé.
poussins
0

Il y a des situations où vous aimeriez avoir:

  • L'intégrité des données garantit des transactions sérialisables.
  • Les données peuvent être mises à jour par les utilisateurs dans le monde entier.
  • Les données peuvent être mises à jour avec une faible latence.

Malheureusement, la combinaison de tout ce qui précède n'est pas physiquement possible. Vous serez contraint par la vitesse de la lumière.

Au lieu de cela, vous devez considérer vos besoins exacts. Pour certaines données, une précision limitée est suffisante. Considérez le compteur de vues sur une vidéo YouTube. La plupart des gens ne se soucient pas si le compteur de vues est temporairement un peu éteint. Si les vues qui se sont produites il y a 10 secondes de l'autre côté du monde ne sont pas encore incluses, mais les vues qui se sont produites il y a 5 secondes de plus près sont incluses, cela reste suffisamment précis. Si vous êtes si détendu avec l'intégrité du compteur de vues, vous courez le risque que deux personnes différentes pensent toutes les deux qu'elles étaient le spectateur numéro 100 de cette vidéo en particulier. Mais la plupart des gens considéreraient le préjudice causé par cela comme négligeable.

Dans d'autres cas, l'intégrité des données est plus importante. Considérez deux personnes essayant simultanément de s'inscrire avec le même nom d'utilisateur. Dire aux deux personnes qu'elles ont obtenu le nom d'utilisateur n'est pas acceptable, donc dans une telle situation, vous choisiriez une approche plus lente avec une meilleure intégrité. Il est acceptable de dire aux deux personnes que le nom d'utilisateur a été pris, donc une approche possible serait d'essayer de réserver le nom d'utilisateur sur chaque réplique et de ne signaler le succès que si vous avez réussi sur plus de 50% des répliques. Il n'est pas improbable que cette approche oblige l'utilisateur à attendre une demi-seconde pour obtenir une réponse. Mais les utilisateurs ne suivent pas ce processus assez souvent pour être gênés par ce délai.

Dans d'autres cas encore, vous pouvez avoir besoin d'une bonne intégrité et de mises à jour rapides, mais une seule personne peut mettre à jour cette donnée particulière. Dans ce cas, vous pouvez placer la copie faisant autorité des données sur un serveur que vous pensez être proche de cet utilisateur et laisser aux autres serveurs une version mise en cache, qui est principalement à jour.

kasperd
la source