sudo: Jack of all trades, master of some

Controlar el ancho de banda con Squid y delay pools

8 comentarios

Una de las características de Squid cache proxy más útiles en nuestros entornos es el soporte para delay pools, esta permite administrar, racionalizar y controlar el ancho de banda disponible en nuestros enlaces. Sin embargo, muchas veces es malinterpretado y se hace un mal uso provocando cuellos de botella e insatisfacción en los clientes. A continuación un intento de explicar y describir el uso de esta importante característica.

Términos

Parámetros del delay pool

Cada delay pool contiene parámetros que se definen por el tag ‘delay_parameters’ de la siguiente forma:

delay_parameters pool bucket-colectivo (para delay pools de clase 1)
delay_parameters pool bucket-colectivo bucket-individual (para delay pools de clase 2)
delay_parameters pool bucket-colectivo bucket-red bucket-individual (para delay pools de clase 3)

Los valores del parámetro del delay se escriben velocidad/velocidad máxima y se especifican en kilobytes por segundo. El primer valor se usa para la velocidad de la descarga normal y el segundo la velocidad en la que comenzará a ralentizarse la petición. Si se desea dejar la máxima velocidad disponible se especifica el valor -1.
Se recomienda que el valor de la velocidad máxima sea al menos el doble del valor de la velocidad de descarga.

Definición de delay pools

Los delay pools se define de la siguiente forma:

delay_pools [cantidad de delay pools]
delay_class [número del delay pool] [clase del delay pool]
delay_access [número del delay pool] [ACL]
delay_parameters [número del delay pool] [velocidad/velocidad máxima]

Ejemplo:

delay_pools 1
delay_class 1 1
delay_access 1 allow all
delay_parameters 1 32000/64000

Este delay pool consiste en un solo delay pool de clase 1 que será aplicado a todos los clientes y que tendrá como velocidad de descarga asignada 32 Kbytes por segundo y una velocidad máxima de 64 Kbytes por segundo.

Situaciones hipotéticas

Situación:

Contamos con un enlace de 512 Kbps y queremos usar solo la mitad para la navegación a través del proxy y reservar la otra para otros servicios.

Solución:

delay_pools 1
delay_class 1 1
delay_access 1 allow all
delay_parameters 1 32000/32000

Explicación:

Se utilizará un solo delay pool de clase 1 y todos los clientes son afectados por este. Los parámetros 32000/32000 significan que el límite es 32 kbytes por segundo (512000/2/8). En esta situación se utilizó una clase 1 porque todos los clientes entran en un mismo bucket utilizando el ancho de banda disponible, una vez que el bucket se vacíe (no quede ancho de banda disponible) el cliente que haga solicitudes en este estado se verá afectado.

Situación:

La misma que la anterior pero queremos aplicar el delay pool en el horario de 8:00 a.m. y 5:00 p.m. de lunes a viernes.

Solución:

acl horario-laboral time MTWHF 08:00-17:00

delay_pools 1
delay_class 1 1
delay_access 1 allow horario-laboral all
delay_parameters 1 32000/32000

Donde: M (lunes), T (martes), W (miércoles), H (jueves) y F (viernes)

Una vez terminado el horario laboral, el ancho de banda se podrá usar indiscriminadamente por cualquier cliente.

Situación:

Contamos con un enlace de 2 Mbps y queremos asignarle 512 Kbps a un grupo y 256 Kbps a otro sin importar cómo usen el ancho de banda los clientes individuales de cada una de ellos y reservar el ancho de banda restante para otros servicios.

Solución:

acl grupo1 src 192.168.0.11-192.168.0.30
acl grupo2 src 192.168.0.31-192.168.0.60

delay_pools 2
delay_class 1 1
delay_class 2 1
delay_access 1 allow grupo1
delay_access 1 deny all
delay_access 2 allow grupo2
delay_access 2 deny all
delay_parameters 1 64000/64000
delay_parameters 2 32000/32000

Explicación:

Se definen las ACLs de tipo source para definir cuáles serán los grupos afectados por cada delay pool, cada delay será de clase 1 ya que no importan los clientes individuales.

Situación:

Contamos un enlace de 512 kbps y queremos usar la mitad para la navegación y que cada usuario pueda descargar a 8 kilobytes por segundo con rafagas de 16 kilobytes.

Solución:

delay_pools 1
delay_class 1 2
delay_access 1 allow all
delay_parameters 1 32000/32000 8000/16000

Explicación:

Se utilizará un bucket colectivo de 32 Kbytes por segundo y cada cliente podrá descargar a una velocidad de 8 Kbytes por segundo con ráfagas de hasta 16 Kbytes. En este caso particular es interesante el uso de ráfagas porque este valor casi siempre afecta a las descargas de archivos grandes y no pequeños como archivos html, css, jpg, etc, por lo tanto aquellos usuarios que estén navegando sin descargar un fichero relativamente grande, la velocidad de respuesta será un poco más rápida sin afectar el ancho de banda, ya que son ráfagas en intervalos bien cortos.

Un buen uso de delay pools de Squid cache proxy asegura una mejor administración, control y racionalización del ancho de banda de nuestras redes, tratando de satisfacer las necesidades de los usuarios que hacen uso de este servicio. Les propongo una investigación más exahustiva y una experimentación personal para lograr dominar esta importante característica.

Notas

Existen hasta cuatro clases de delay pools, en esta entrada solo se trataron las dos primeras clases por ser las más comunes en mi entorno de red.

Referencias

Comentarios desactivados
  1. hola, muy bueno el post pero tengo una duda.
    Como hacer para que un grupo descargue ciertas extenciones (ej iso, avi, etc) a una velocidad pero si el archivo se pasa de ‘X’ tamaño lo limite a otra velocidad pero si los archivos estan en mi red que no le aplique la delay_pools y que otro grupo no tenga esa restricción ??
    Salu2s

    1. oneohthree 6 años atrás
      @JP

      La primera interrogante no creo que se pueda resolver, la segunda puedes especificar una ACL de tipo dst_domain a las que no apliques los delay_pools, por ejemplo:

      acl misdominios dst_domain .dominio.cu y en el delay pool agregar delay_access 1 allow all !misdominios

  2. ok thanks, al menos de 2 uno pa 500 de averaje jejejeje
    Salu2s

    1. oneohthree 6 años atrás
      @JP

      Realmente la primera situación no creo que se resuelva directamente con Squid. ¿Resolviste la segunda con la sugerencia?

  3. cuando uso las delay pools el sevidor se me pone lento de tal manera que no puedo usarlas
    tengo la version squid3
    otra cosa que veo que cuando las aplico consume demasiado y cuento con un 1 GB de ram
    que puedo hacer.
    y kiero usarlas
    y mi conexion es de 128

    1. @yaniel

      Tengo entendido que algunas revisiones de la versión 3 de Squid tienen problemas con los delay pools, uso la versión 2 por cuestiones personales.

  4. Muchas gracias por el articulo!
    Limitar por horario es un golazo!

  5. alfredo 6 años atrás

    Saludos Jp en respuesta a lo que habias preguntado que te dijeron no era posible ps es posible solo en parte, ya que puedes limitar la velocidad de descargas de ciertos archivos (iso,avi,etc)que requieras y tambien puedes identificar el tamaño de los archivos a descargar y establacer bloqueo en archivos mayores a la cantidad que desees aca te dejo un enlace para que le estudies y veas que puedes usar lo unico es que esta en ingles pero creo que ese problema lo solventa nuestro amigo “google” http://www.squid-cache.org/Doc/config/reply_body_max_size/