Necesito más velocidad en mi red!!!!

Primero léete el post para hacer esto… men. También lo explica para software libre. ¿ Mac estará dentro de esto ultimo?.

Fuente: Pensamientos Ágiles

 El algoritmo de Nagle.

Este algoritmo es una optimización de TCP/IP para evitar su la gestión de las redes. La idea es que si un sistema envía muchos paquetes pequeños (e.g. 1 byte) continuamente se está desperdiciando mucho espacio en el paquete TCP/IP y por lo tanto se puede congestionar mucho una red.

Para ello, Nagle, ideó un algoritmo mediante el cual sólo un paquete pequeño puede viajar por la red sin que se haya recibido un ACK. Esto significa que hasta que no se reciba un ACK se estarán acumulando paquetes dentro de un buffer. Cuando el ACK se recibe se envía de nuevo un paquete TCP/IP pero esta vez con muchos más datos ya que contendrá esos pequeños mensajes que se habían estado acumulando.

La idea es muy buena, pero a parte de los problemas que tiene este algoritmo con otra optimización llamada delayed ACKs y que se desarrolló en la misma época (es lo que tienen los diferentes grupos de trabajo sin comunicación entre ellos) resulta que este algoritmo te obliga irremediablemente a esperar por los ACKs.

Ahora supongamos que estamos haciendo streaming de datos en tiempo real. Imaginémonos que no es vital el tener la seguridad de que estos datos lleguen a su destino (es decir, no necesitamos ACK), pero sí que es vital el enviar estos datos lo más rápido que sea posible. Ejemplos de este tipo de escenarios pueden ser streaming de datos médicos o trading en mercados financieros en el que diferencias en milisegundos pueden suponer el ganar o perder mucho dinero.

Volviendo al ejemplo, imaginémonos que por cosas de la vida nuestro data center está en Madrid y nuestro cliente en Chicago. Esto, si le hacemos caso al visualizador de latencia de Akamai son unos 330 milisegundos (asumo que en round-trip). Eso son 165 milisegundos ir y otros tantos volver. Una cuenta fácil es que con el algoritmo de Nagle seremos capaces de enviar tres mensajes mientras que si en el nos vamos a los 6 mensajes por segundo. Si dentro de cada mensaje TCP/IP puedo enviar cotizaciones digamos 8 cotizaciones pues pasaría de poder mostrar unas 24 cotizaciones por segundo a unas 48. Una aumento considerable.

¿Cómo puedo deshabilitar el algoritmo de Nagle? Fácil, utilizando el atributo TCP_NODELAY presente en la mayoría de lenguajes. Los que utilizamos Java tenemos buenas y malas noticias. La mala es que por defecto no hay manera de deshabilitarlo a no ser que vayamos a gestionar nosotros mismos la comunicación de sockets (es decir, que utilizando URL.openConnection() nada de nada). La buena es que excelentes librerías Open Source como Apache Commons HTTPClient o Apache Mina nos permiten hacer esto y muchísimas más cosas y son siempre una mucho mejor elección que utilizar las librerías de Sun.

Acerca de turyesdios

the only truth is I´M GOD. Ver todas las entradas de turyesdios

2 responses to “Necesito más velocidad en mi red!!!!

  • turyesdios

    El algoritmo nagle lo que hace es retener paquetes pequeños hasta acumular unos pocos y enviarlos, o hasta un retraso de 200ms, en juegos podria ser interesante desactivarlo , por eso creo que, por muy buen ping que tengas, si el algoritmo retiene paquetes vas a tener ping alto de todas formas.

  • turyesdios

    El ping depende de equipos físicos que no están en tu casa.

    A nivel físico, no puedes modificar tu central telefónica y los enrutadores, puntos neutros y otras figuras de red por las que pasas cuando juegas online, y que es lo que determina el ping que tienes. (Excepto ke tengas un destornillador sónico)
    A nivel del TCP/IP segun lo que hace este algoritmo, algo puedes ganar pero será un % marginal respecto a las condiciones físicas de tu línea.

    Son dos visones de si mejora o no mejora este algoritmo validas y fundadas en la lógica pero como todo EN ESTA VIDA habrá que PROBARLO.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: