Squid – Delay pools

Los Delay Pool son una manera de controlar el trafico que fluye a través de nuestro Squid limitando el ancho de banda que tiene el usuario final para obtener objetos que no estén dentro del cache.
pool

(Imagen original)

La realización de este sistema no es un concepto fácil de entender por lo que tratare de ser lo mas gráfico posible.

Imaginemos que tenemos un hotel en la costa del mar en el que hay una piscina para los huéspedes. En el caso de un incendio vamos a apagarlo con el agua de la piscina (porque nos queda mas cerca que ir a buscarla al mar). Lo haremos dependiendo del tipo de piscina que hay en nuestro hotel:

Clase 1 – Una piscina para todos los huéspedes del hotel.
Clase 2 – Una piscina grande para todos y también piscinas individuales mas chicas para cada uno.

En el caso de tener un solo pool de clase 1, todas las personas presentes en el hotel irán a sacar el agua de la piscina general. Cuando la piscina general se vacíe tendremos que reponer el agua de la misma nuevamente, la velocidad con la que reponemos el agua de la piscina usando la del mar se establece con el valor “x” cuando al total del agua en la piscina le ponemos el valor de “y”. Vale aclarar que no podemos ir sacando agua de la piscina mientras esta este vacía.
En el caso de tener la piscina clase 2 cada huésped sacara el agua de la piscina personal y luego de que se vacíe recién ira a buscar el agua a la piscina general para reponer la suya. La velocidad con la que puede sacar el agua de la piscina general la establecemos con el valor “a” y el total del agua de su piscina personal con “b”.

En la Practica

Para una piscina Clase 1 la definimos con:
delay_pools 1 – Una sola piscina
delay_class 1 1 – Nuestra piscina numero 1 es de clase 1
delay_parameters 1 x/y – Los parámetros de la piscina numero 1 son x e y, por ejemplo 80000/140000 significan que el total de información de nuestra piscina es de 140000bytes (140000/1000=140kbytes) y cuando la vaciamos, este limite se rellena con la velocidad de 80000bytes/s ((80000*8)/1024=625kbit/s)

PoolClass1

Para una piscina Clase 2 la definimos con:
delay_pools 1 – Una sola piscina
delay_class 1 2 – Nuestra piscina numero 1 es de clase 2
delay_parameters 1 x/y a/b – los valores pueden ser: 110000/160000 80000/140000 siendo que un usuario tiene 140000 bytes hasta llegar al limite de su piscina y luego con la velocidad de 80000bytes/s ir descargando el contenido de la piscina grande, vaciando el valor de 160000 bytes de la misma. Si entre todos agotamos los 160000 bytes que tiene la piscina grande, ahí la velocidad se vera reducida a 110000 bytes/s para reponer la información de la piscina grande.

PoolClass2

En el caso de tener el valor de x u a menor que los respectivos y o b, se pueden producir efectos no deseados en la navegación. Una manera de verlo es observando la velocidad de descarga de archivos grandes, al comienzo de la descarga el archivo baja lentamente y luego aumenta la velocidad hasta llegar al valor asignado (antiguamente se uso en algunos servicios de internet públicos). Para monitorear los pool de cerca recomiendo usar un comando como el siguiente:

squidclient mgr:delay o bien: squidclient -h host mgr:delay

La salida sera similar a la siguiente:
Delay pools configured: 1

Pool: 1
Class: 2

Aggregate:
Max: 160000
Restore: 110000
Current: 130000

Individual:
Max: 140000
Restore: 80000
Current: 107:140000 110:140000 109:140000 123:80000

Como nuestro pool es de clase 2 veremos que el Aggregate (piscina general) se comenzó a vaciar de a poco, porque mas abajo en Individual (piscina individual) la maquina con la IP x.x.x.123 esta consumiendo trafico. Si lo dejamos unos segundos obtenemos:

Pool: 1
Class: 2

Aggregate:
Max: 160000
Restore: 110000
Current: 20000

Individual:
Max: 140000
Restore: 80000
Current: 107:140000 110:140000 109:140000 123:0

Lo que significaría que el usuario con la IP x.x.x.123 consumió todo el trafico disponible en su piscina y esta usando la piscina general para reponerlo, lo hará con la velocidad de 80000 bytes/s (unos 80kb/s aproximadamente). Lo interesante de este método es que mientras se carguen imágenes o paginas web convencionales se le da toda la velocidad al usuario y si la descarga dura el tiempo suficiente como para agotar el limite de los 140000b recién ahí es limitada.
Al mismo tiempo como muchas veces ocurre que un servidor da acceso al internet para una oficina y necesitamos tener acceso al SSH para configurar algo, el valor de 110000 correspondiente al Aggregate:Max hace que por mas que tengamos a todos los equipos viendo videos online, tengamos posibilidad de trabajar sin demoras en la consola.

2 comentarios en “Squid – Delay pools

  1. Hola que tal, gracias muy buen aporte, si me podrías ayudar en una configuración de red en donde existen alumnos, profesores y administrativos, quisiera la mejor manera de repartir el ancho de banda sin perjudicar a administrativos y evitando que los alumnos consuman en recursos innecesarios.

  2. Es un poco mas complejo, diría que primero necesitas segmentar la red. Por ejemplo tener 192.168.1.0/24 para alumnos, 192.168.2.0/24 para profesores y 192.168.3.0/24 para administrativos. Claro que depende de si tenes varias placas de red o una sola, etc. Luego dentro del squid yo tendría 2 delay pools diferentes (profesores y administrativos pueden estar juntos) o 3 si necesitas un limite diferente para cada uno. Ahí lo ideal es ponerse a jugar un poco con los limites siempre teniendo en cuenta el máximo de la red, si tenes balanceo de carga es aun mas complejo, etc. Cualquier consulta avisame, nunca lo arme así, pero vi que hay configuraciones funcionando bien de esta manera. Saludos.

Deja un comentario

Para proteger el blog de SPAM, le pedimos que complete la tarea:WordPress CAPTCHA