2008-11-28 25 views
6

Estoy trabajando en un proyecto donde tenemos un número (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 el 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 de acuerdo con la norma.Equilibrio de carga basado en la proximidad

Es importante que el intermediario escoja 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 tuvo en cuenta es hacer ping al cliente desde cada servidor, pero no tenemos una IP, solo el país.

Otra idea que tuvimos es 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 la proximidad entre "países"? ¿Tiene alguna idea o idea sobre cómo resolver este problema de otra manera?

+1

Deberías leer esto: http://www.tenereillo.com/GSLBPageOfShame.htm – CMCDragonkai

Respuesta

5

Creo que el término que necesita es "equilibrio geográfico de carga". La mayoría de los principales proveedores de equilibrio de carga tienen una solución aquí; su intermediario podría usarla.

Google 0ogía geographic load balancing obtiene algunos resultados que buscan útiles.

+23

Irónicamente, este es el enlace superior. – Prisoner

+0

Este artículo contiene una lista de algunas de las compañías que ofrecen servicios Geo DNS: [https://www.maxcdn.com/blog/dns-load-balancing-comparison-4-services/](https://www.maxcdn.com/blog/dns-load-balancing-comparison-4-services /) –

+4

//, "Google it" es apto para los comentarios, no para las respuestas. –

6

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

Por supuesto la solución ingenua (pero frío) es el control de IP del cliente, este es un buen comienzo, pero en el "mundo real" Geolocalización no lo es todo ...

Usted acaba de pedir "baja latencia", lo que significa que debe hacer ping entre servidores y clientes y asignar en consecuencia. Un 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 hay muchos clientes que se acercan más a un servidor en los EE. UU. Para mí. PERO, la latencia entre Japón y EE. UU. Es mucho menor (mejor respuesta) que con Taiwán, porque los cables y enrutadores y lo que tiene que conectar Japón-Taiwán no son tan buenos como los que existen entre Japón -USA. Si me conectaste a Taiwán porque crees que mi IP está más cerca, me estarías haciendo una gran desfavor allí. Además de un ping y una pequeña prueba real en el inicio, es más fácil hacer que mantener una base de datos de geolocalización constantemente actualizada

+1

Buena idea pero a través de muchos niveles de abstracción (el negocio de las telecomunicaciones está lleno de eso) no tenemos idea de la IP de origen, lo único que tenemos es el país. Entonces, creo que un "equilibrio de carga geográfica" es nuestra única esperanza. –

+0

Debería hacer ping. Esa es la mejor y más fácil solución –

+1

Quiero decir que tiene el cliente haciendo ping al servidor, no al servidor haciendo ping al cliente –

1

Paul lo tiene, quiere equilibrio de carga geográfica, pero añadiré que es la mejor opción, si es que lo es una opción, es encontrar a alguien que se especialice en ella y arrojarles dinero. Está en la clase de problemas que son mucho más difícil de resolver de manera confiable de lo que parece.

1

Hacer ping con ellos y elegir el que tiene la latencia más baja suena bien, pero tengo la sensación de que no se escalará (¿qué sucede cuando tienes 100, o 1000?) - ¿entonces quizás sea mejor otra solución? Hay muchos proveedores con sistemas que hacen justamente esto; Anycast DNS es bastante utilizado también.

Si solo hiciste ping, tendrías que hacer varios ping a cada uno (idealmente en paralelo) para asegurarte de que eliges uno con latencia realmente baja en lugar de suerte.

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

Por último, querría marcar algunas de ellas como administrativamente inactivas (para mantenimiento), pero quizás pueda hacer esto simplemente rompiendo las publicidades que no están actualmente disponibles.

1

Hacer ping no funciona. La mayoría de los clientes estarían detrás de una puerta de enlace y/o firewall, y sus paquetes de ping no se podrán pasar. 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.

1

Muy bien, algunas ideas rápidas. Fui fundador de Digital Envoy - hacen inteligencia de IP geográfica. Dejé la empresa hace unos años, pero hace unos 6 años obtuvimos el built a joint product con Coyote Point Systems que cumplía exactamente esta función: equilibrio de carga basado en la distribución geográfica. 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 hacia dónde iría el tráfico de un país. Entonces, si decidieron que Taiwán recibía el mejor servicio fuera de los EE. UU., Lo impulsarían de esa manera.

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

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

BTW, full disclosure - No soy solo el fundador de Digital Envoy, sino que actualmente soy miembro de la junta directiva de Coyote Point.

0

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

Con BGP anycast, varios servidores diferentes están repartidos por todo el mundo y anunció a Internet a través de BGP utilizando la misma IP . Entonces Internet hace la magia: como de costumbre, las rutas de red trafican a ese mismo mismo 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, no puede anunciar nada a través de BGP usted mismo; solo las grandes redes (normalmente los centros de datos) pueden hacerlo. Pero las soluciones asequibles están disponibles, la mayoría de las cuales están basadas en DNS   anycast (es decir, resolviendo diferentes IP del servidor web 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 baratos - cloudflare, maxcdn, cloudfront, etc.). También hay soluciones que hacen verdadero anycast BGP, es decir, que realmente sirven tráfico HTTP a través de anycast (por ejemplo, cachefly) o te permiten hacerlo (por ejemplo, hostvirtual - no es barato). This también podría ser una lectura interesante.

Cuestiones relacionadas