Archivo mensual de Octubre del 2008

El poder de Squid para aliviar la carga de tu blog Wordpress

Aún tengo pendiente probar a fondo Nginx y Varnish, pero estos dias he estado aprovechando el cambio de servidor para montar todo el sistema sobre un Squid como proxy transparente ante Apache. Los cambios que he tenido que hacer al código han sido nimios en la mayoria de los proyectos alojados, aunque para uno de ellos, con múltiples controles por IP, Anti-spam, etc, he tenido que hacer alguna floritura.

El software que utiliza Propiedad Provada como CMS es el archivonocido Wordpress, que como es igualmente archiconido, es una auténtica patata a la hora del rendimiento. Muchas, muchísimas consultas MySQL, muchas de ellas redundantes, índices no del todo bien definidos en la base de datos, código poco optimizado… agravado sobre todo por la instalación de addons y plugins de todos los tamaños y colores en muchas ocasiones bastante peores para el rendimiento que el propio CMS en si.

Pero no todo es malo, su sencillez es tremenda y obviamente es todo un standard a la hora del “blogging”, asi que de lo perdido saca lo que puedas: si consigo que la nueva máquina sirva páginas de este blog como es debido, las que sirva de mis proyectos de trabajo, optimizadas para rendimiento, deberían salir como auténticas flechas.

Asi que he metido el blog en la misma máquinas de producción que las páginas de la empresa, y me he puesto manos a la obra. Tras un par de horas de investigar Headers, estudiar el código de Wordpress, etc… anoche logré mis objetivos con sólo dos cambios:

1.- En mi php.ini

session.cache_limiter = public

2.- En el código de Wordpress 2.6.3 (puede diferir según versiones), fichero wp-includes/classes.php linea 197, he comentado esta linea:

nocache_headers();

Dicha linea envia Headers de no-cache a usuarios no conectados, con lo cual obtengo un no-cache para mí cuando estoy logueado (viendo todo fresquito y a tiempo real), y un cacheado perfecto para usuarios no logueados (cacheado que en Apache tengo definido a 5 minutos, asi que tampoco es traumático).

Un reinicio rápido de Apache y Squid, y a probar con Apache Benchmark, 1000 peticiones de páginas con 50 usuarios concurrentes. Para ello tengo un pequeño script “made in feito por min” en bash, que contiene lo siguiente:

Archivo stress.sh:

/usr/local/apache/bin/ab -n1000 -c50 -q -k -H ‘Accept-Encoding: gzip,deflate’ $1 | grep ‘per second’ | awk ‘{print “Peticiones por segundo: ” $4 }’

al que llamo en la forma:

./strees.sh http://urlacomprobar

Resultados antes de Squid:

./strees.sh http://www.propiedadprivada.com/
Peticiones por segundo: 8.12

Resultados con Squid:

./strees.sh http://www.propiedadprivada.com/
Peticiones por segundo: 5432.89

Lo que representa una mejora del…

Peticiones por segundo antes: 8.12
Peticiones por segundo con Squid: 5432.89
Formulita para calcular la mejora: ((5432,89-8,12)/8,12)*100

Resultado: Una mejoría total del…

¡¡¡ 66807,51 % !!! < - OMFG

Ale, esta semana me he ganado el sueldo; Asi que ya sabeis queridos compañeros y camarilla friqui, si queremos utilizar CMS pesados y sobrecargados, si nos apetece programar como cerdos sin pensar en las consecuencias de rendimiento, en definitiva, si queremos seguir como hasta ahora… siempre tendremos ahí al amigo Squid para sacarnos las castañas del fuego. Bon apetit ! :D

UPDATE: Tras poner un comentario en Wordpress, el Header Location te manda de nuevo al artículo, que como si es cacheable, se pierde la visualización del comentario. Lo he solucionado agregando una regla a squid que evita que se cacheen las urls que contengan “nocache” y modificando la linea 82 de wp-comments-post.php de

wp_redirect($location);

a

$limpiar= (empty($_POST['redirect_to']) ? get_permalink($comment_post_ID) : $_POST['redirect_to']);
exec(’squidclient -p80 -m PURGE ‘.$limpiar);
exec(’squidclient -p80 -m PURGE http://www.propiedadprivada.com/’);
session_start();
session_register(”nocache”);
wp_redirect(str_replace(”#”,”?nocache=”.$comment_id.”#”,$location));

Obligar a Apache a guardar la IP real de los visitantes

Un problema que me he encontrado al utilizar Squid como proxy transparente delante de Apache, para mejorar los problemas de carga, ha sido que ahora todas las peticiones Web provienen de Squid, es decir, cuando llegan a Apache, la IP que se ve en todo momento es la del proxy, no la del visitante real. Esto provoca problemas inesperados y preocupantes, por citar un par de ejemplos:

  • Viendo el access_log de Apache es imposible detectar un ataque, todo proviene siempre de la IP local de Squid.
  • En Wordpress Akismet detecta todos los trackbacks y comentarios de Spam como provenientes de nuestra IP, con lo cual no sólo funciona de mala manera, sino que encima corremos el riesgo de ser considerados como una IP fuente de Spam

Para solucionar esto, lo primero es lograr que Squid pase a Apache las cabeceras correctas, entre ellas la IP real del visitantes. En squid.conf:

follow_x_forwarded_for allow all
acl_uses_indirect_client on
delay_pool_uses_indirect_client on
log_uses_indirect_client on
header_access X_Forwarded_For allow all

Luego modificaremos “a machete” el formato de Log de Apache para el vhost que nos interese en httpd.conf:

# Si encontramos un REMOTE_ADDR lo seteamos
SetEnvIf Remote_Addr “(.*)” TRUE_REMOTE_ADDR=$1
# Si es posible, cazamos la última IP de la lista de proxies
SetEnvIf X-Forwarded-For “([0-9\.]+)$” TRUE_REMOTE_ADDR=$1
# Ponga aqui su magia
CustomLog ruta/logs/dominio-access_log “%{TRUE_REMOTE_ADDR}e %l %u %t \”%r\” %>s %b \”%{Referer}i\” \”%{User-Agent}i\”"

Un reinicio de Apache y Squid, y ya tenemos nuestro proxy transparente funcionando, y a Apache recibiendo las IPs reales de los visitantes.

Como hacer el amor toda la noche

Cómo hacer el amor toda la nocheAsi reza el titulo de un post que me he tropezado hoy en mi proveedor de descargas habitual. Según la descripción del propio post parece ser que se trata de uno más de los cientos de manidos manuales de autoayuda que pululan por la red, pero obviamente, este post no viene a cuento de dicho manual, sino de la gracia y el salero del primer comentario de los usuarios ante tan inusual descarga.

 

Nota: Faltas de ortografía y gramática corregidas para facilitar el entendimiento del susodicho comentario.

 

Gracias por el aporte (creo?), me interesaría el manual “Como hacer el amor todo el dia y la noche” para volver loca de placer a dos o tres mujeres; siempre he tenido dudas sobre como funciona eso, sobre todo si es rollo Pressing Cath, que va por relevos, en cuyo caso me daría miedo, puesto que en el Pressing cuando vas a ganar siempre llega alguien por detrás y…

Y otra duda es si incluye algún consejo sobre cómo financiar las prácticas; en la actualidad no tengo el placer de conocer a Paquirrin, y no sé si el libro incluye los números de telefono de Cofidis o algo asi.

Como ya decia gracias por el aporte, sin duda alguna lo bajaré, con una sóla última pregunta: ¿ es compatible con los manuales de alargamiento de pene? Lo digo por no tener que leerme los dos si este por sí mismo es suficiente.

Gracias y un saludo.

Hoy emigro…

Por si alguien lee esto de vez en cuando y le extraña verlo Offline, hoy voy a migrar todos los dominios “importantes” de la empresa a una nueva maquina, y como el único no importante que queda es el mio personal… pues se irá con viento fresco junto a los de la empresa, para poder dar de baja el servidor.

Dependiendo del trabajo que me de (que llevo unos dias MUY quemado con los fallos de hardware en los servidores) igual lo resubo, como igual lo mando a comprar hielo al Gobi.

¡ Salud !

 
 

UPDATE: Si ves esto, estás en el nuevo servidor, bienvenido.

Unos cuantos JavaScripts y Técnicas más para nuestra web

Sin orden ni concierto:

  • Timetable es un script que nos permite agregar una Linea temporal a nuestro sitio web. Es pequeño, sencillo de implementar, eficiente, apto para todos los navegadores y cumple la normativa W3C. Además, acepta eventos y se adapta al tamaño de su contenedor sin problemas.

  • Not another images gallery script , a pesar de su nombre, es un script minimalista para generar Galerías de imágenes con jQuery, cuando el espacio que tenemos para las mismas es muy limitado. Demo.

  • Aunque soy un enamorado de jQuery, al rey lo que es del rey: Image Flow nos permite generar Galerías con efecto “Slide”. Basada en Mootools, la animación es suave, soporta reflejos, eventos de ratón y teclado, y ofrece un acabado muy profesional.

  • Este indicador de carga para imágenes hace uso de una simple imagen de fondo y CSS para lograr un efecto muy vistoso. Además, al ser puro CSS, no es intrusivo.

  • Botones para la Web 2.0 con soporte para Temas 3.0, o lo que es lo mismo, Skinnable Web 2.0 Buttons 3.0 es un Set que nos permitirá crear botones de forma sencilla con efectos y diseños fuera de lo común. Los botones son de ancho variable, el código es 100% semántico y nos trae de serie 8 estilos predefinidos.

Hartija - Framework CSS para imprimir

Hartija es un Framework CSS que intenta unificar las mejores técnicas a la hora de imprimir nuestros Sitios Web.

Escalando la Wikipedia con LAMP

Escalando la Wikipedia con LAMP : 7 mil millones de páginas vistas al mes es un artículo interesante en el Blog de SUN sobre escalabilidad web que nos habla del uso de Wikipedia de Apache + PHP + MySQL como servidor, APC como Code Caché, Squid como Caché y Balanceador, y memCached como Caché de MySQL.

Matar procesos a cañonazos en Windows XP

Una instalación corrupta de un servidor WAMP en uno de los equipos de la oficina ha empezado a lanzar procesos php-cgi.exe como un loco hasta acabar comiendose toda la RAM y CPU de la máquina. Como no habia forma humana de finalizar los procesos con el Administrador de Tareas uno a uno, esto es lo que he usado para finalizarlos a todos de golpe, usando TaskKill por nombre:

CODE:
  1. C:\Documents and Settings\Administrador>taskkill /IM php-cgi.exe
  2. Correcto: se terminó el proceso "php-cgi.exe" con PID 1024.
  3. Correcto: se terminó el proceso "php-cgi.exe" con PID 5236.
  4. Correcto: se terminó el proceso "php-cgi.exe" con PID 6004.
  5. Correcto: se terminó el proceso "php-cgi.exe" con PID 1344.
  6. Correcto: se terminó el proceso "php-cgi.exe" con PID 4124.
  7.  
  8. ... unos cientos de lineas después ...
  9.  
  10. Correcto: se terminó el proceso "php-cgi.exe" con PID 4608.
  11. Correcto: se terminó el proceso "php-cgi.exe" con PID 2812.
  12. Correcto: se terminó el proceso "php-cgi.exe" con PID 2280.

Otras posibilidades de TaskKill :

Matar procesos por PID:

taskkill /PID 12345

Matar procesos por usuario:

taskkill /F /FI "USERNAME eq Luser"

Matar procesos por Titulo de la ventana:

taskkill /F /FI ""WINDOWTITLE eq No respond*"

Todas las opciones:

CODE:
  1. Nombre filtro   Operadores válidos         Valores válidos
  2.     -------------   ------------------         ---------------
  3.     STATUS          eq, ne                     RUNNING | NOT RESPONDING
  4.     IMAGENAME       eq, ne                     Nombre de imagen.
  5.     PID             eq, ne, gt, lt, ge, le     Valor de PID.
  6.     SESSION         eq, ne, gt, lt, ge, le     Número de sesión
  7.     CPUTIME         eq, ne, gt, lt, ge, le     Tiempo válido en el formato
  8.                                                hh:mm:ss.
  9.                                                hh - horas,
  10.                                                mm - minutos, ss - segundos
  11.     MEMUSAGE        eq, ne, gt, lt, ge, le     Uso de memoria en KB.
  12.     USERNAME        eq, ne                     Nombre de usuario en formato
  13.                                                [dominio\]usuario.
  14.     MODULES         eq, ne                     Nombre de DLL
  15.     SERVICES        eq, ne                     Nombre de servicio.
  16.     WINDOWTITLE     eq, ne                     Título de ventana.

Añadir más Marcados Rápidos (Speed Dials) a Opera

Los que me conocen saben que soy un poco "fanboy" a la hora de elegir navegador, con diferencia, me quedo con Opera. En sus últimas versiones se ha incluido el Speed Dial, una interesantísima opción que pone al alcance de un click nuestros 9 sitios preferidos cada vez que abrimos una pestaña.

Para los que gustamos del "clicking" indiscriminado, o trabajamos en múltiples proyectos al mismo tiempo, esta limitación de 9 "Speed Dials" puede quedársenos corta, asi que... editamos el fichero

C:\Archivos de programa\Opera\profile\speeddial.ini

Y agregamos, por ejemplo, un

CODE:
  1. [Size]
  2.   Rows=4
  3.   Columns=5

Y etvoilá, ya disponemos de 20 "Speeds Dials". Como nota negativa, decir que la función Sync entre diferentes navegadores de Opera sólo sincronizará los 9 primeros, y que probando a lo bestia con 1200 mi pobre Opera me miró con cara de susto y tardó casi un minuto en abrirse, pero sobrevivió.

Problemas de conectividad R Galicia

Escribo esto desde mi incomunicada linea de R Galicia en casa (No DNS, No tráfico, sin embargo la red R va bien asi como los accesos por IP), entrando de forma chapucera por medio de un proxy en la empresa (que va por Telefónica) y al que sólo puedo acceder por IP. Por si a alguien más le sirve el apaño... la información hasta el momento es la siguiente:

Fuente: La Voz de Galicia

Santiago de Compostela, 17 oct (EFE).- Un corte de un cable de fibra óptica en Villalba, en la periferia de Madrid, debido a un incendio ha dejado a los abonados de la empresa R con problemas de conexión a internet, indicó hoy a Efe un portavoz de la empresa.

La avería, que se produjo hacia las 16:30 horas, ha afectado a la red gallega de R, a la que están abonados la Xunta de Galicia, numerosas empresas y miles de abonados.

Fuentes de la firma de telecomunicaciones, propiedad de la financiera Caixanova, precisaron que el incendio se produjo en un cable de fibra óptica de la red de Renfe, señalaron que "desconocen las causas" de ese incidente y apuntaron que "afecta también a otros operadores".

Según fuentes de la empresa, el corte afecta sus conexiones con los proveedores internacionales T-Systems -una filial del operador alemán de telecomunicaciones Deutsche Telekom- y Cogent, una firma de ingeniería de telecomunicaciones estadounidense.

El corte de esa línea ha dejado el tráfico sensiblemente alterado de manera que ha cortado la "salida a Madrid" de R, reconocieron fuentes de la empresa.

Indicaron que actualmente los técnicos de la firma están tratando de redistribuir el tráfico de internet de la propia red gallega "repartiendo el ancho de banda" y reconocieron que "ha afectado al acceso a internet de muchos clientes", aunque indicaron que es "prácticamente imposible de cuantificar".

Añadieron que los técnicos están trabajando para restablecer la conexión y señalaron que la empresa espera que el tráfico estará restablecido "en cuestión de unas horas".

Respecto a la falta de información proporcionada a los clientes durante varias horas, sin que nadie respondiese en su número de información, el 1445, fuentes de la empresa reconocieron que ha habido "información deficiente" y aseguraron que están tratando de resolver esa situación.

Añadieron que "en la página de internet se va a colgar en tiempo real" información al respecto aunque a las 20:30 horas Efe pudo constatar que no había información alguna al respecto.

Update: Servicio restablecido en Lugo a las 22:30 , avería en Madrid confirmada por R en su página principal aprisa y corriendo (no empiezan con mayúsculas y parten una palabra en dos xD):

por causas alleas a R, e debido a un incencio en Villalba (Madrid), existe una problema de acceso a Internet. Irase restablec endo a conexión progresivamente. Esperamos que esté totalmente restablecido antes da medianoite

Update 2: 10 minutos después, el mensaje habia desaparecido de la web de R y empezaban los primeros contactos a informar desde múltiples puntos de Galicia, que todo iba bien... que susto hemos pasado por dios ! xD