Pregunta

Estoy trabajando en un proyecto en el que tenemos varios (5 en este momento) de servidores repartidos por todo el mundo. Los clientes se conectan a uno de esos servidores a través de un intermediario centralizado. Conocemos el país de origen del cliente pero nada más. Tenemos control total de los servidores para que podamos tener toda la información que necesitamos sobre ellos. No controlamos a los clientes, tienen que conectarse a través de este intermediario según el estándar.

Es importante que el corredor elija un servidor que tenga baja latencia, por lo que con los datos que tenemos creo que la proximidad es nuestro único criterio disponible.

La primera idea que se me ocurrió fue hacer ping al cliente desde cada servidor, pero no tenemos una IP, solo el país.

Otra idea que teníamos era hacer ping a un nodo raíz en cada país desde cada servidor. El problema es encontrar un nodo raíz en cada país.

¿Tiene alguna idea de cómo calcular / buscar proximidad entre " países " ;? ¿Tiene alguna idea o idea sobre cómo resolver este problema de otra manera?

¿Fue útil?

Solución

Creo que el término que necesita es "equilibrio de carga geográfica". La mayoría de los principales proveedores de equilibrio de carga tienen una solución aquí: su agente podría utilizarlos.

Google el equilibrio de carga geográfica es útil buscando resultados.

Otros consejos

Esto es complicado, más de lo que muchos imaginan, pero siento que hay una respuesta CORRECTA .

Por supuesto, la solución ingenua (pero genial) es verificar la IP del cliente, este es un buen comienzo, pero en "el mundo real" La geolocalización no lo es todo ...

Acaba de solicitar " baja latencia " ;, lo que significa que debe hacer ping entre servidores y clientes y asignarlos en consecuencia. Un muy buen ejemplo de este problema que me ha afectado personalmente muchas veces es que trabajo en Japón, y un servidor dice que en Taiwán está mucho más cerca de un servidor en los Estados Unidos para mí. PERO , la latencia entre Japón y EE. UU. es muchas veces menor (mejor respuesta) que con Taiwán, porque los cables y enrutadores y lo que tienes que conectan Japón-Taiwán no son tan buenos como los que hay entre Japón-EE. UU. Entonces, si me conectó a Taiwán porque cree que mi IP está más cerca, me estaría haciendo una gran desgracia allí. Además de un ping y una pequeña prueba real al inicio, es más fácil de hacer que mantener alguna base de datos de geolocalización constantemente actualizada

La mejor solución para esto se llama BGP anycast ( enlace a una presentación ). Es la piedra angular de todos los CDN modernos.

Con BGP anycast , varios servidores diferentes se extienden por todo el mundo y se anuncian en Internet a través de BGP utilizando la misma IP . Luego, Internet hace la magia: como de costumbre, la red enruta el tráfico a esa misma IP a través de la ruta más corta, esencialmente seleccionando el servidor más cercano (desde una perspectiva de topología de red) para cada usuario.

Desafortunadamente, usted no puede anunciar nada a través de BGP, solo las redes grandes (normalmente los centros de datos) pueden hacerlo. Sin embargo, existen soluciones asequibles, la mayoría de las cuales se basan en DNS & nbsp; anycast (es decir, la resolución a una IP de servidor web diferente según la ubicación del cliente): esto no es perfecto, pero es suficiente en muchos casos (ejemplos: dnsmadeeasy, Route 53, edgedirector y prácticamente todos los CDN económicos: cloudflare, maxcdn, cloudfront, etc. También hay soluciones que hacen un verdadero BGP anycast, es decir, en realidad sirven el tráfico HTTP a través de anycast (por ejemplo, cachefly) o le permiten hacerlo (por ejemplo, host virtual - no es barato). Esto también podría ser una lectura interesante.

Paul lo tiene, quieres balancear la carga geográfica, pero agregaré que tu mejor opción, si es que es una opción, es encontrar a alguien que se especialice en eso y arrojarles dinero. Está en la clase de problemas que son mucho más difíciles de resolver de lo que parece.

Hacer ping y elegir el que tenga la latencia más baja suena bien, pero tengo la sensación de que no escalará (¿qué sucede cuando tienes 100 o 1000?), ¿entonces tal vez otra solución sea mejor? Hay muchos vendedores con sistemas que hacen exactamente esto; DNS anycast también se usa ampliamente.

Si acaba de hacer ping a ellos, necesitaría hacer varios pings a cada uno (idealmente en paralelo) para asegurarse de que está eligiendo uno con latencia realmente baja en lugar de suerte.

También es probable que desee alguna forma de agregarles peso en última instancia cuando los volúmenes de tráfico son muy altos.

Finalmente, querrá alguna forma de marcar algunos de ellos como administrativamente inactivos (por mantenimiento), pero tal vez pueda hacerlo haciendo que se rompan, pero no anuncie los que no están disponibles actualmente.

Hacer ping no funcionará. La mayoría de los clientes estarían detrás de una puerta de enlace y / o firewall, y sus paquetes de ping no pasarán. Genehack lo dijo mejor. Necesita el equilibrio de carga del servidor, y usar solo el enfoque geográfico podría no ser la mejor manera de hacerlo. Es mejor arrojar dinero a alguien que se especializa en proporcionar soluciones SLB.

Bien, entonces algunas reflexiones rápidas. Fui uno de los fundadores de Digital Envoy : hacen inteligencia geográfica IP. Dejé la empresa hace unos años, pero hace unos 6 años construimos un producto conjunto con Coyote Point Systems que hizo exactamente esta funcionalidad: equilibrio de carga basado en la geografía. Claro, hay casos extremos (el ejemplo de Taiwán / China mencionado en este hilo) que pueden no funcionar automáticamente, pero el producto permitió al usuario determinar a dónde iría el tráfico de un país. Entonces, si decidiste que Taiwán se sirve mejor fuera de los EE. UU., Se impulsaría de esa manera.

Desafortunadamente, la demanda de la solución no fue tan grande como esperábamos y creo que el producto ha sido descontinuado. Sugeriría contactar a Coyote Point y ver si pueden proporcionarle una solución equivalente. Si no, creo que tendrán algunas ideas sobre cómo hacer lo que quieres hacer.

Otra opción, dependiendo de lo que necesite servir, es usar algo como el servicio CloudFront de Amazon. Por supuesto, si necesita que los clientes se conecten a una aplicación y no a archivos estáticos, eso no funcionará para usted.

Por cierto, divulgación completa : no solo soy fundador de Digital Envoy, sino que actualmente sirve en la junta de Coyote Point.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top