Delay pools es la respuesta de Squid frente al control de ancho de banda y el traffic shaping (catalogación de tráfico). Esto se realiza limitando el rate que el Squid retorna los datos desde su cache.
Los delay pools son en esencia “cubos de ancho de banda” (bandwidth buckets). La solicitud a una respuesta es demorada hasta que cierta cantidad de ancho de banda esté disponible desde un cubo. Squid llena con cierta cantidad de tráfico los cubos por cada segundo y los clientes del Cache consumen los datos llenados desde esos cubos.
El tamaño de un cubo determina cuánto límite de ancho de banda está disponible en un cliente. Si un cubo se encuentra lleno, un cliente puede descargar a máxima velocidad de la conexión disponible(sin limitación de rate) hasta que éste se vacíe. Después que se vacíe recibirá el límite de tráfico asignado.
Se requiere varios conceptos que Squid usa para el control de Delay Pools:
Listas de control de acceso (Access rules) Clases de Delay Pools (Delay pool classes) Tipo de cubos (buckets)
Squid verifica en qué delay_access te encuentras Si concuerda con una, esta apunta hacia un delay pool específico Cada delay pool tiene una clase: 1 , 2 , 3. La clase determina que tipo de cubo estás usando. Squid tiene 3 tipos: Global (agregate), individual , red (network) La clase 1 tiene un único cubo Global (agregate) La clase 2 tiene un cubo Global (agregate) y 256 cubos Individual La clase 3 tiene un cubo Global (agregate) y 256 cubos de Red y 65536 cubos Individual.
Puede uno desactivar cubos que no van a ser utilizados, por ejemplo en la clase 2 puede uno desactivar el cubo global y solo utilizar los cubos Individual.
Por razones obvias se toma siempre el ancho de banda menor. Por ejemplo, considere la posibilidad de una clase 3 cubos agregate, network e Individual. Si tiene en Individual 20 KB, En network 30 KB, pero el agregate tiene 2 KB, el cliente recibirá sólo 2-KB.
delay_pools: Define cuantos delay pools se van a utilizar Ejemplo: delay_pool 5: Define 5 Delay pools que serán configurados posteriormente.
delay_class: Define la clase del delay pool. Para evitar complicaciones es recomendable tener siempre un delay_class para cada delay pool definido.
Ejemplo: delay_class 1 3 ( Define el delay pool 1 que sea de tipo 3). delay_class 5 2 (Define el delay pool 5 que sea de tipo 2).
delay_parameters: Este es el parámetro crítico en el cual se limita el ancho de banda. Para cada Delay Pool se debe definir: el fill rate (tráfico de llenado) y el tamaño máximo de cada cubo.
delay_parameters N rate/size [rate/size [rate/size]]
El valor del rate está definido en bytes por segundo, y size en total de bytes.
Si se divide el size entre el rate, Dispondrás el tiempo en segundos que el cubo se llenará si el cliente no está consumiendo.
Una Pool de clase 1 que dispone de un solo cubo sería definido como sigue:
delay_class 2 1 delay_parameters 2 2000/8000
Para un Pools de clase 2, El primer cubo es aggregate, y el segundo es un grupo de cubos individuales:
delay_class 4 2 delay_parameters 4 7000/15000 3000/4000
De esta forma la red “toda la red” dispondrá en los primeros 15 Kb (tamaño del cubo) descarga a velocidad máxima sin restricción, despues de haber descargado los primeros 15Kb (se vació el cubo), descargará a 7KB. Igualmente cada cliente solo podrá descargar rápidamente los primeros 4Kb , después descargará establemente siempre a 3 Kb.
delay_initial_bucket_level: Dice que tan lleno estará el cada cubo al iniciar el Squid. Se indica en porcentajes
delay_initial_bucket_level 75%
delay_access: permite relacionarlo a una ACL específica. Es similar a las reglas de acceso de Squid , pero es necesario definir el número de Pool antes del allow o deny.
delay_access 1 deny gerentes delay_access 1 allow mi_red delay_access 5 allow mime_extensiones
Squid define una lista de acceso separada para cada Delay Pool. Puede disponer de un allow o un deny. Si es allow utiliza esa regla y no sigue buscando en las siguientes de ese Pool. Si es deny, automáticamente cancela la búsqueda en ese Pool, pero seguirá buscando en las listas de acceso de los otros pools.
Ejemplos:
Limita a todo el mundo a 64 KBytes y mantiene 1 MB en reserva si Squid está inactivo:
delay_pools 1 delay_class 1 1 delay_parameters 1 65536/1048576
acl All src 0/0 delay_access 1 allow All
No se va a utilizar los cubos de Red. Nuestro ancho de banda Global es de 64 KB/s, pero se limitará a cada uno de los 65536 posibles clientes en 16 Kbit/s.
delay_pools 1 delay_class 1 3 delay_parameters 1 65536/1048576 -1/-1 16384/262144
acl All src 0/0 delay_access 1 allow All
# -1 significa ilimitado
Por clase de servicio. Usamos las acl gerentes, con 65 KB y los demás con 10 KB. Adicionalmente se limita la descarga por mime a 5Kb pero no a los gerentes.
delay_pools 3 delay_class 1 1 delay_class 2 1 delay_class 3 1
delay_parameters 1 65536/1048576 delay_parameters 2 10000/50000 delay_parameters 3 5000/30000
acl Gerentes src 192.168.8.0/22 acl Todos src 0/0 acl extensiones rep_mime_type ”/etc/squid/mis_tipos_mime“
delay_access 1 allow Gerentes delay_access 2 allow Todos delay_access 3 deny gerentes delay_access 3 allow extensiones
Caso Real: /etc/squid/squid.conf
# 3 acl .. red local, conjunto de extensiones y una IP especifica
acl mi_red src 192.168.1.0/24 acl extdown url_regex -i ”/etc/squid/extdown“ aclunaPC src 192.168.1.46
delay_pools 2 # Se define un delay pool N1 de tipo clase 2 # se le asigna a : unaPC # se limita 13Kb rate / 13Kb Max para la red # se limita 6 Kb rate / 6 Kb Max por IP
delay_class 1 2 delay_access 1 allow unaPC delay_access 1 deny all delay_parameters 1 13000/13000 6095/6095
# Se define un delay pool N2 de tipo clase 2 # se le asigna a las extensiones : extdown # se limita 4Mb rate / 1Mb Max para la red # se limita 15 Kb rate / 500 Kb Max por IP
delay_class 2 2 delay_access 2 allow extdown delay_access 2 deny all delay_parameters 2 4000000/1000000 15000/500000
Preguntas rápidas para ociosos:
No entendí nada eso de los cubos, solo quiere saber como se limita la red 1: 100 KB y la red 2 : 10 KB
En un caso rápido de no aplicar el concepto de cubos, es posible asignar el tamaño del cubo el mismo que el del rate. Usando la gráfica como ejemplo, podría decirse que si el cubo es el mismo tamaño que el del rate, es como si el cubo no existiera :
http://es.geocities.com/jtnozawa/delay_pools_3.jpg
acl red1 src 192.168.1.0/24 # red 1 acl red2 src 192.168.2.0/24 # red 2 delay_pools 2 # voy a tener 2 delay pools
delay_class 1 1 # el delay pool 1 es de clase 1 delay_class 2 1 # el delay pool 2 es de clase 1
delay_access 1 allow red1 # el delay pool 1 para la red 1 delay_access 2 allow red2 # el delay pool 2 para la red 2
delay_parameters 1 100000/100000 # el delay pool 1 con 100 Kb delay_parameters 2 10000/10000 # el delay pool 2 con 10 Kb