Linux para saber como calcular el uso de memoria requerido para nuestro entorno y además recomendaciones para la selección del mejor hardware para el cache en disco y los sistemas de archivos.
CPU
Squid es un proceso que se ejecuta en un solo hilo y no hace uso intensivo de CPU, en las únicas ocasiones en las que hace uso intensivo de CPU es cuando el proceso es inicializado, es en este momento cuando realiza diferentes cálculos para verificar el contenido del cache. Por lo anterior es posible instalar squid en sistemas con un solo CPU de velocidades modestas.
Squid no obtiene mucho beneficio de sistemas SMP ya que no se ejecuta en múltiples hilos Además del CPU que usa el proceso principal de squid, tome en consideración aquellos programas auxiliares que usa squid para operaciones de autenticación de usuarios y grupos (external helpers) y/o programas externos para filtrado de URLs (url redirectors). Estos programas requieren de recursos de CPU de forma independiente.
Es recomendable que invierta más en la optimización de en recursos como memoria RAM y disco duro ya que estos recursos suelen ser los cuellos de botella que evitan que squid ofrezca un servicio de proxy eficiente y óptimo.
Memoria
Cuando dimensione las capacidades de memoria RAM que usara el sistema que hará de proxy con squid, no solo considere la memoria que usa el proceso principal de squid, también considere el uso de memoria de otros programas que se ejecuten aparte del sistema operativo, como pueden ser servicios DNS, Web, bases de datos, etc. A continuación mencionaremos las partes en las que squid hace uso de memoria RAM.
Una de las principales funcionalidades del proxy squid es el uso de cache en memoria RAM, squid utiliza la memoria RAM para almacenar una tabla o indice con los objetos más usados, estos objetos son conocidos como objetos calientes o en transito, esto permite acelerar el tiempo de respuesta a las peticiones de los clientes ya que siempre es más rápido acceder a la memoria RAM que a disco duro como en el caso de cache a disco (más para objetos recurrentes), el uso predeterminado de cache en memoria RAM es de 8MB, para entornos con grandes volúmenes de peticiones se recomienda incrementar el valor y agregar más memoria RAM para acelerar el servicio.
Además, por cada GB de espacio en disco que asigne para el cache en disco, squid usará aproximadamente 6MB de memoria RAM para mantener una tabla o índice con la referencia a los objetos almacenados en el cache de disco. Esto significa que, entre más grande sea el cache de disco, más memoria RAM usará squid.
Veamos como calcular el espacio de cache en disco y ver como afectaría el uso de memoria RAM.
Por cada objeto almacenado en disco, squid usa aproximadamente 56 bytes (32-bit) y 88 bytes (64-bit) de RAM para el índice y otros 16 bytes para la suma md5 del objeto, por lo que se requieren 72 o 104 bytes por cada objeto almacenado en el índice. El tamaño promedio de un objeto en el Internet es de aproximadamente 13KB.
Veamos un ejemplo de como calcular el uso de memoria de squid para almacenar el índice de objetos en el cache de disco: si dedica 1GB de espacio en disco duro para el cache en disco y suponiendo un tamaño promedio de 13KB por objeto podríamos almacenar aproximadamente 80,000 objetos en el cache de disco. Para un cache de 1GB con 80,000 objetos de 72 bytes y suponiendo un tamaño de objeto promedio de 13KB, squid va a requerir aproximadamente 6MB de memoria RAM para la tabla índice. En la practica se recomienda que dedique 1MB de RAM por cada 1GB asignado a cache_dir.
Además de la memoria usada para el cache de objetos en memoria RAM, squid también almacena en memoria los resultados de consultas DNS, las ACLs y reglas de acceso. Squid además usará memoria RAM para los programas auxiliares o redirectores de URL, por ejemplo si usa programas externos para autenticar usuarios y grupos en bases de datos externas entonces también deberá de sumar el uso de memoria de estos procesos a la cuenta, y si usa filtros de URL como squidGuard también hará uso de memoria independientemente.
Disco duro y sistemas de archivos Cuando evalué los requerimientos de disco duro para el proxy deberá de tomar en cuenta que entre más rápido sea el acceso a los objetos en el cache de disco, más rápidas serán las respuestas y mejor el servicio. El acceso al cache de disco debe ser rápido, y por lo tanto debemos almacenarlos en discos duros rápidos, veamos la información que requerimos saber en cuanto a las especificaciones técnicas que los discos duros deben cumplir para ofrecer un rendimiento eficiente en un servidor proxy cache. La velocidad de rotación de los discos duros SATA actuales son de 7200 RPM y en discos SAS de 15000 RPM, siempre se recomiendan los discos duros más rápidos, sin embargo los discos SATA son más accesibles en precio. Más importante que la velocidad de rotación es el tiempo promedio que toman las cabezas del disco en moverse de un track aleatorio a otro, esta medida es conocida como random seek time o random read time, y se mide en segundos. Entre más bajo sea el valor, mejor será el rendimiento del acceso al cache de disco.
Por ejemplo un disco duro SATA de un servidor pequeño tiene un disco duro donde en las especificaciones se ve:
Average Seek Time: < 9.0 ms
El cache en disco se almacena en un directorio del sistema de archivos, se recomienda que este en una partición independiente de la del sistema operativo, de preferencia en un disco duro independiente, se recomienda usar el sistema de archivos ext2 ya que es un sistema de archivos sin journaling y montarlo con la opción noatime para no gastar recursos en la actualización de las fechas de acceso de los archivos en el cache.
Importante Ya que el sistema de archivos no tiene journaling es propenso a que se corrompa en caso de que se apague de forma repentina el sistema, por ejemplo con un apagón, por lo que se recomienda que por lo menos el servidor este conectado a un UPS y use el programa NUTS para monitorizar el estado del UPS y en caso de que se vaya la luz NUTS apague el servidor de forma limpia antes de que se quede sin batería.
Squid esta especialmente diseñado para ofrecer un mejor rendimiento cuando tiene múltiples caches esparcidos en diferentes sistemas de archivos, en diferentes discos duros ya que puede balancear el acceso al cache entre los diferentes discos. No se recomienda que use squid en sistemas con RAID con mirroring como RAID1 o RAID5. squid balanceará las lecturas y escrituras en los diferentes discos por lo que mejorará el rendimiento del cache.
El espacio en disco que asigne al cache debe ser lo suficientemente grande para poder almacenar los objetos estáticos de los sitios visitados por lo menos por un día para que el uso del proxy sea eficiente, si las peticiones son a sitios con objetos estáticos que no cambian tan seguido entonces se recomienda que calcule el espacio en base al número de días que quiere conservar los objetos en el cache y la velocidad de descargas asignada al servidor proxy. También tienen que ver factores como el tamaño promedio de los objetos en el cache y los hábitos de descargas de los usuarios.
Para definir el espacio de disco que se asignara al cache es importante determinar la cantidad aproximada de datos que pasaran por el cache cada día. Si no es capaz de determinarlo, puede usar la tasa teórica de transferencia máxima de su enlace o el ancho de banda dedicado para la navegación en especifico para HTTP, HTTPS y FTP. Un enlace de 1Mb/s puede transferir aprox 111,000 bytes por segundo (111 KB/s).
Suponiendo que manteniendo una tasa de transferencia fija de 111 KB/s y que todos los objetos van al cache, podremos descargar aproximadamente 400MB por hora, y si el cache solo es usado en horarios de trabajo (8 horas al día) entonces podemos determinar que el espacio requerido para un día sería de 3.2 GB, y si desea mantener los objetos por una semana (5 días laborales) entonces podría necesitar aproximadamente 16GB de espacio de disco para el cache de una conexión de 111KB/s. Recuerde que también debe considerar el espacio requerido para almacenar los logs del proceso squid y logs de accesos, por lo que en sistemas con bastantes peticiones puede llegar a tener archivos de logs diarios de 1GB o más, en este documento se recomiendan 5GB para logs de squid que se rotan una vez por semana y se almacenan de forma comprimida los logs de las últimas 5 semanas para cuestiones de reportes.
En sistemas con volúmenes de peticiones grandes se recomienda dedicar una partición de 20 GB para la partición /var/log. Si va a almacenar reportes web de los accesos al proxy se recomienda que dedique por lo menos 10 GB adicionales para el sistema de archivos /var/www para almacenar los reportes por 6 meses.
Es importante tener en cuenta ademas:
1. Cambia la opción "cache_mem" de 8MB, el predeterminado, a 32 MB. Si tu máquina tiene memoria disponible, aumentar esta opción de memoria caché puede mejorar mucho el rendimiento. Algunas personas ponen esto a 100 MB o más.
2. Añade la opción "half_closed_clients" para ponerla en "off" en el archivo de configuración. Además, cambia la opción "maximum_object_size" por "1024KB" para mejoras menores.
3. Indica tus servidores de nombres DNS usando la opción "dns_nameserves". Esto es importante puesto que Squid se queda atascado cuando hace búsquedas de DNS.
4. Añade las opciones "cache_swap_low" y "cache_swap_high" que ayudan a determinar cuando Squid empezará a vaciar la caché. Esto es importante para mantener la caché dentro de unos límites razonables y accesibles rápidamente.
5. Ajusta la opción "memory_pools" en "off" para que Squid libere la RAM que no está usando el servidor y la coloque en la fuente de memoria.
en GNU/Linux
2. Añade la opción "half_closed_clients" para ponerla en "off" en el archivo de configuración. Además, cambia la opción "maximum_object_size" por "1024KB" para mejoras menores.
3. Indica tus servidores de nombres DNS usando la opción "dns_nameserves". Esto es importante puesto que Squid se queda atascado cuando hace búsquedas de DNS.
4. Añade las opciones "cache_swap_low" y "cache_swap_high" que ayudan a determinar cuando Squid empezará a vaciar la caché. Esto es importante para mantener la caché dentro de unos límites razonables y accesibles rápidamente.
5. Ajusta la opción "memory_pools" en "off" para que Squid libere la RAM que no está usando el servidor y la coloque en la fuente de memoria.
en GNU/Linux
No hay comentarios:
Publicar un comentario