Squid – Con que se come el cache

En dos palabras el cache se usa para frenar parte de los request del usuario y no derivarlos hacia el servidor que tiene el contenido. Los motivos para hacerlo pueden ser varios: En servidores web se usa para bajar la cantidad de operaciones de lectura en discos (y bajar la carga como consecuencia), en cambio un proxy funcionando en una oficina u hogar para dar salida a Internet lo mas probable es que lo usemos para ahorrar en ancho de banda o aumentar la velocidad de acceso a los sitios.

Porque usar Proxy con cache

En todos los navegadores actuales se usa el cache de contenido web para agilizar la carga, en el Opera dentro de las opciones incluso podemos ver que hay dos referencias a este tema: “cache en RAM” y “cache en disco”. Podemos modificar estos valores a gusto pero si nos cambiamos de navegador el cache de este navegador no lo tenemos mas ya que se genera uno distinto para cada uno. Tampoco si disponemos de varios equipos podemos compartir el cache por lo que necesitamos una solución mas completa, esto es Squid proxy con cache que veremos como hacer funcionar en esta nota.

Get hit vs Byte hit

“Nada es infinito” – este termino se aplica a cache de una manera muy rígida, para hacer que la respuesta sea optima tenemos que definir que necesitamos almacenar en nuestro cache, para esto usaremos dos términos:

Byte Hit – Porcentaje de Bytes que encontraremos en cada Hit (objeto en cache).

Get Hit – Porcentaje de archivos que hay en el cache.

Lo ejemplificamos con un objeto (una imagen) de 1mb, si lo tenemos en cache tenemos un get si lo solicitamos y 1mb de Byte Hit en el caso de acceder-lo, sin embargo solo representa un Get (porque es un objeto). En el caso de tener 10 objetos de 100kb cada uno bajamos el Byte hit (ya que se reduce a 100kb) pero ganamos en Get Hit ya que tenemos 10 imágenes ahora en lugar de una.
Podemos jugar con varios valores para lograr un rendimiento mas optimo de la red pero a nivel general se pueden aconsejar dos cosas:

Si tenemos una buena conexión (respuesta rápida, ping bajo, sin problemas en horas pico por el proveedor de servicio), pero necesitamos ahorrar el ancho de banda porque es pago o porque no alcanza para todos los usuarios entonces aumentamos el Byte Hit.

Si tenemos una conexión satelital/3G o solo mala respuesta probablemente no nos importe tanto la demora que haya al descargar un archivo flash grande sino mas bien que las paginas web no demoren en su carga. Como por lo general las web representan una gran cantidad de objetos de tamaño reducido optimizaremos el Get Hit.

Cache pollution

Como no disponemos de memoria RAM , espacio en disco u I/O (cantidad de operaciones de entrada/salida) infinito veremos la manera de evitar que el cache contenga información irrelevante (Cache pollution) que se trata de técnicas que deciden que objetos mantener cuando nos quedamos sin espacio en memoria RAM o en disco. Dicho de manera mas sencilla determina que objetos son mantenidos en cache y cuales no. Para esto disponemos de 3 métodos:

lru” – Política predeterminada de Squid, los objetos recientemente accedidos son mantenidos en el cache con la esperanza de que se vuelvan a solicitar, valido para servidores web (proxy reverso) pero no tan efectivo para compartir Internet.
heap GDSF” – Optimiza el Get Hit del que ya hablamos por lo que trata de mantener objetos chicos y evitar llenar la memoria con objetos grandes por mas que sean frecuentemente accedidos.
heap LFUDA” – Lo contrario a la opción anterior, mantiene los objetos mas grandes en memoria por lo que si le damos el suficiente espacio en disco podemos cachear archivos Flash pesados o videos de Youtube o similares.

Hay otras opciones que van apareciendo en las versiones mas nuevas del Squid pero entendiendo el concepto solo se trata de leer un poco de lo que nos proponen.

Aplicación practica

Para uso domestico les propongo un ejemplo:

cache_mem 256 MB – Tamaño en RAM que puede usar el Squid para cache, también usa la memoria para otras cosas por lo que no se aconseja dejar este valor mas alto que la mitad de la memoria libre que nos queda. Puede suceder que si tenemos este valor muy alto se comience a usar el Swap, señal para reducirlo un poco.

maximum_object_size_in_memory 256 Kb – Tamaño máximo de un objeto dentro de memoria RAM, como tenemos solo 256Mb de la misma no seria bueno almacenar algo grande ahí porque no estaríamos aprovechando la ventaja en velocidad de lectura de una memoria comparando con un disco rígido.

memory_replacement_policy heap GDSF – Mientras mas chico es el objeto mas probable es que quede en la memoria, como la velocidad de lectura es muy alta podremos “levantar” casi todo el contenido de un sitio en un tiempo muy corto haciendo que la pagina web cargue casi instantáneamente.

cache_dir aufs /directorio/del_cache 4096 16 256 – tenemos 4gb de espacio para el cache en disco dentro del directorio:  /directorio/del_cache, el sistema aufs permite evitar los bloqueos del proceso principal en lecturas secuenciales del disco (lanzando varios demonios a hacer esta tarea). Claro que podemos asignar mas espacio para el cache pero tenemos que tener en cuenta que serán objetos chicos por lo que los tiempos de búsqueda pueden volverse elevados a medida que vayamos llegando a los 4gb.
También podemos distribuir el cache entre varias particiones o discos siendo la ultima opción mas útil ya que reduce el tiempo que debemos aguardar a que el objeto sea encontrado y leído desde el disco. Si usamos dos o mas discos para aumentar la velocidad podemos usar la opción: store_dir_select_algorithm round-robin que selecciona el destino de un objeto nuevo de manera aleatoria en lugar de hacerlo “last-load” que seria guardarlo en el ultimo disco que tuvo lectura.

maximum_object_size 16 MB – El tamaño máximo de un objeto para que consideremos almacenarlo en el cache de disco.

cache_replacement_policy heap GDSF – Política de cache de disco, igual que en el caso anterior necesitamos que los objetos chicos sean los que con mas frecuencia se guarden dentro del cache.

Deja un comentario

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